{"id":15120,"date":"2025-08-29T19:19:51","date_gmt":"2025-08-29T19:19:51","guid":{"rendered":"https:\/\/graindesail.com\/quick-order\/"},"modified":"2025-08-31T00:47:07","modified_gmt":"2025-08-31T00:47:07","slug":"quick-order","status":"publish","type":"page","link":"https:\/\/graindesail.com\/en\/quick-order\/","title":{"rendered":"Quick order"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15120\" class=\"elementor elementor-15120 elementor-15080\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<main class=\"elementor-section elementor-top-section elementor-element elementor-element-aa346d9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"aa346d9\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7b8e323\" data-id=\"7b8e323\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-a030de6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"a030de6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-f38cc32 elementor-hidden-tablet elementor-hidden-mobile\" data-id=\"f38cc32\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<aside class=\"elementor-section elementor-inner-section elementor-element elementor-element-ca12a53 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"ca12a53\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-dc2cebc\" data-id=\"dc2cebc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-18d62c1 elementor-widget__width-auto elementor-absolute elementor-widget elementor-widget-text-editor\" data-id=\"18d62c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<span class=\"sidebar-title\">Filter by<\/span> \t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1fd573b elementor-widget elementor-widget-jet-smart-filters-remove-filters hide-widget\" data-id=\"1fd573b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-remove-filters.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-remove-filters jet-filter\"><div class=\"jet-remove-all-filters hide\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"jet-remove-all-filters__button\"\n\t\tdata-content-provider=\"epro-loop-builder\"\n\t\tdata-additional-providers=\"[&quot;epro-archive\\\/product_grid&quot;]\"\n\t\tdata-apply-type=\"ajax\"\n\t\tdata-query-id=\"product_grid\"\n\t\t\t>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"><\/path><\/svg> <span>Effacer tout<\/span>\t<\/button>\n<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2c06f elementor-widget elementor-widget-jet-smart-filters-checkboxes\" data-id=\"7b2c06f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-checkboxes.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-checkboxes jet-filter jet-filter-indexed\" data-indexer-rule=\"show\" data-show-counter=\"yes\" data-change-counter=\"other_changed\"><div class=\"jet-filter-label\">Availability<\/div>\n<div class=\"jet-checkboxes-list\" data-query-type=\"meta_query\" data-query-var=\"_stock_status\" data-smart-filter=\"checkboxes\" data-filter-id=\"10000\" data-apply-type=\"ajax\" data-content-provider=\"epro-loop-builder\" data-additional-providers=\"\" data-query-id=\"product_grid\" data-active-label=\"\" data-layout-options=\"{&quot;show_label&quot;:true,&quot;display_options&quot;:{&quot;show_items_label&quot;:false,&quot;show_decorator&quot;:&quot;yes&quot;,&quot;filter_image_size&quot;:&quot;full&quot;,&quot;show_counter&quot;:&quot;yes&quot;,&quot;counter_prefix&quot;:&quot;(&quot;,&quot;counter_suffix&quot;:&quot;)&quot;}}\" data-query-var-suffix=\"\" data-apply-on=\"value\"><fieldset class=\"jet-checkboxes-list-wrapper\"><legend style=\"display:none;\">Availability<\/legend><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"_stock_status\"\n\t\t\tvalue=\"instock\"\n\t\t\tdata-label=\"In stock\"\n\t\t\taria-label=\"In stock\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">In stock<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"_stock_status\"\n\t\t\tvalue=\"outofstock\"\n\t\t\tdata-label=\"Not available\"\n\t\t\taria-label=\"Not available\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Not available<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/fieldset><\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3db80f6 elementor-widget elementor-widget-jet-smart-filters-checkboxes\" data-id=\"3db80f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-checkboxes.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-checkboxes jet-filter jet-filter-indexed\" data-indexer-rule=\"show\" data-show-counter=\"yes\" data-change-counter=\"other_changed\"><div class=\"jet-filter-label\">Type de chocolat<\/div>\n<div class=\"jet-checkboxes-list\" data-query-type=\"tax_query\" data-query-var=\"product_cat\" data-smart-filter=\"checkboxes\" data-filter-id=\"15116\" data-apply-type=\"ajax\" data-content-provider=\"epro-loop-builder\" data-additional-providers=\"\" data-query-id=\"product_grid\" data-active-label=\"\" data-layout-options=\"{&quot;show_label&quot;:true,&quot;display_options&quot;:{&quot;show_items_label&quot;:false,&quot;show_decorator&quot;:&quot;yes&quot;,&quot;filter_image_size&quot;:&quot;full&quot;,&quot;show_counter&quot;:&quot;yes&quot;,&quot;counter_prefix&quot;:&quot;(&quot;,&quot;counter_suffix&quot;:&quot;)&quot;}}\" data-query-var-suffix=\"\" data-apply-on=\"value\"><fieldset class=\"jet-checkboxes-list-wrapper\"><legend style=\"display:none;\">Type de chocolat<\/legend><div class=\"jet-list-tree\"><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"266\"\n\t\t\tdata-label=\"Accessories\"\n\t\t\taria-label=\"Accessories\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Accessories<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row jet-list-tree__parent\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"267\"\n\t\t\tdata-label=\"Coffee\"\n\t\t\taria-label=\"Coffee\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Coffee<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class='jet-list-tree__children'>\n<div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"268\"\n\t\t\tdata-label=\"Our specialty coffees\"\n\t\t\taria-label=\"Our specialty coffees\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Our specialty coffees<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"269\"\n\t\t\tdata-label=\"General public coffee\"\n\t\t\taria-label=\"General public coffee\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">General public coffee<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/div>\n<div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"270\"\n\t\t\tdata-label=\"Chocolate\"\n\t\t\taria-label=\"Chocolate\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Chocolate<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"271\"\n\t\t\tdata-label=\"Boxes\"\n\t\t\taria-label=\"Boxes\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Boxes<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"260\"\n\t\t\tdata-label=\"Non cat\u00e9goris\u00e9\"\n\t\t\taria-label=\"Non cat\u00e9goris\u00e9\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Non cat\u00e9goris\u00e9<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"273\"\n\t\t\tdata-label=\"Our festive products\"\n\t\t\taria-label=\"Our festive products\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Our festive products<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"274\"\n\t\t\tdata-label=\"Offres du moment\"\n\t\t\taria-label=\"Offres du moment\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Offres du moment<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"278\"\n\t\t\tdata-label=\"Christmas\"\n\t\t\taria-label=\"Christmas\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Christmas<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/div><\/fieldset><\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-777a402 elementor-widget elementor-widget-html\" data-id=\"777a402\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t     <script>jQuery(document).ready(function($) {\n        \/\/ Trigger when filters complete (generic fallback event)\n        $(document).on('ajaxComplete', function() {\n            $.ajax({\n                url: '',\n                type: 'POST',\n                data: {\n                    action: 'gds_update_product_count'\n                },\n                success: function(response) {\n                    $('#gds-product-count').html(response);\n                }\n            });\n        });\n\n        \/\/ Example: if using WOOF filter plugin\n        $(document).on('woof_ajax_done', function() {\n            $.ajax({\n                url: '',\n                type: 'POST',\n                data: {\n                    action: 'gds_update_product_count'\n                },\n                success: function(response) {\n                    $('#gds-product-count').html(response);\n                }\n            });\n        });\n\n        \/\/ Example: if using YITH AJAX Filters\n        $(document).on('yith-wcan-ajax-filtered', function() {\n            $.ajax({\n                url: '',\n                type: 'POST',\n                data: {\n                    action: 'gds_update_product_count'\n                },\n                success: function(response) {\n                    $('#gds-product-count').html(response);\n                }\n            });\n        });\n    });\n    <\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/aside>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a14c6f5\" data-id=\"a14c6f5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-90a7f28 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"90a7f28\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-fdb7239\" data-id=\"fdb7239\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fbccfb2 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"fbccfb2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4e1134 elementor-widget__width-initial elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"a4e1134\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-541e441 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"541e441\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-8c26e2f\" data-id=\"8c26e2f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8e82dc2 elementor-widget__width-initial elementor-widget elementor-widget-jet-smart-filters-sorting\" data-id=\"8e82dc2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-sorting.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-sorting jet-filter\"><div class=\"jet-sorting jet-sorting--flex-row\"  data-smart-filter=\"sorting\" data-query-type=\"sort\" data-query-var=\"standard\" data-content-provider=\"epro-loop-builder\" data-query-id=\"product_grid\" data-apply-type=\"ajax\" data-apply-on=\"value\" data-additional-providers=\"\">\n\t\t\t<div class=\"jet-sorting-label\">Sort by :<\/div>\n\t\t<select\n\t\tclass=\"jet-sorting-select\"\n\t\tname=\"select-name\"\n\t\t\t\taria-label=\"Sort by :\"\n\t>\n\t\t\t\t\t<option value=\"\">Relevance<\/option>\n\t\t\t\t\t\t\t\t\t\t<option\n\t\t\t\tvalue=\"{&quot;orderby&quot;:&quot;sales_number&quot;,&quot;order&quot;:&quot;ASC&quot;}\"\n\t\t\t\t\t\t\t>Bestsellers<\/option>\n\t\t\t\t\t\t\t\t<option\n\t\t\t\tvalue=\"{&quot;orderby&quot;:&quot;title&quot;,&quot;order&quot;:&quot;DESC&quot;}\"\n\t\t\t\t\t\t\t>Name, A to Z<\/option>\n\t\t\t\t\t\t\t\t<option\n\t\t\t\tvalue=\"{&quot;orderby&quot;:&quot;name&quot;,&quot;order&quot;:&quot;ASC&quot;}\"\n\t\t\t\t\t\t\t>Name, Z to A<\/option>\n\t\t\t\t\t\t\t\t<option\n\t\t\t\tvalue=\"{&quot;orderby&quot;:&quot;price&quot;,&quot;order&quot;:&quot;ASC&quot;}\"\n\t\t\t\t\t\t\t>Price, croissant<\/option>\n\t\t\t\t\t\t\t\t<option\n\t\t\t\tvalue=\"{&quot;orderby&quot;:&quot;price&quot;,&quot;order&quot;:&quot;DESC&quot;}\"\n\t\t\t\t\t\t\t>Price, descending<\/option>\n\t\t\t<\/select>\n<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0234d06 elementor-mobile-align-center elementor-widget-tablet__width-auto elementor-widget-mobile__width-auto elementor-hidden-desktop show_filter elementor-widget elementor-widget-button\" data-id=\"0234d06\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Filter<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-630b0fd elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"630b0fd\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-c20a034\" data-id=\"c20a034\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7864bfb elementor-hidden-mobile elementor-widget elementor-widget-jet-smart-filters-active hide-widget\" data-id=\"7864bfb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-active.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-active jet-active-filters jet-filter\" data-label=\"Filtres actifs\" data-content-provider=\"epro-loop-builder\" data-additional-providers=\"\" data-apply-type=\"ajax\" data-query-id=\"product_grid\"><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"woocommerce elementor-element elementor-element-e5a70eb elementor-grid-1 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-widget elementor-widget-loop-grid\" data-id=\"e5a70eb\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"product_grid\" data-settings=\"{&quot;_skin&quot;:&quot;product&quot;,&quot;template_id&quot;:15047,&quot;columns&quot;:1,&quot;pagination_type&quot;:&quot;prev_next&quot;,&quot;columns_tablet&quot;:&quot;2&quot;,&quot;columns_mobile&quot;:&quot;1&quot;,&quot;edit_handle_selector&quot;:&quot;[data-elementor-type=\\&quot;loop-item\\&quot;]&quot;,&quot;pagination_load_type&quot;:&quot;page_reload&quot;,&quot;row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"loop-grid.product\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-loop-container elementor-grid\" role=\"list\">\n\t\t<style id=\"loop-15047\">.elementor-15047 .elementor-element.elementor-element-9e1c566:not(.elementor-motion-effects-element-type-background), .elementor-15047 .elementor-element.elementor-element-9e1c566 > .elementor-motion-effects-container > .elementor-motion-effects-layer{background-color:#F2F2F2;}.elementor-15047 .elementor-element.elementor-element-9e1c566, .elementor-15047 .elementor-element.elementor-element-9e1c566 > .elementor-background-overlay{border-radius:4px 4px 4px 4px;}.elementor-15047 .elementor-element.elementor-element-9e1c566{transition:background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;padding:10px 10px 10px 10px;}.elementor-15047 .elementor-element.elementor-element-9e1c566 > .elementor-background-overlay{transition:background 0.3s, border-radius 0.3s, opacity 0.3s;}.elementor-bc-flex-widget .elementor-15047 .elementor-element.elementor-element-07cb087.elementor-column .elementor-widget-wrap{align-items:center;}.elementor-15047 .elementor-element.elementor-element-07cb087.elementor-column.elementor-element[data-element_type=\"column\"] > .elementor-widget-wrap.elementor-element-populated{align-content:center;align-items:center;}.elementor-15047 .elementor-element.elementor-element-07cb087.elementor-column > .elementor-widget-wrap{justify-content:flex-start;}.elementor-15047 .elementor-element.elementor-element-07cb087 > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial):not(:last-child):not(.elementor-absolute){margin-block-end:9px;}.elementor-15047 .elementor-element.elementor-element-07cb087 > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-widget-image .widget-image-caption{color:var( --e-global-color-text );font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-weight:var( --e-global-typography-text-font-weight );}.elementor-15047 .elementor-element.elementor-element-4d8507a{text-align:start;}.elementor-15047 .elementor-element.elementor-element-4d8507a img{width:90px;}.elementor-15047 .elementor-element.elementor-element-fcf2dd6{padding:0px 20px 0px 0px;}.elementor-15047 .elementor-element.elementor-element-0a08ab7 > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial):not(:last-child):not(.elementor-absolute){margin-block-end:8px;}.elementor-15047 .elementor-element.elementor-element-0a08ab7 > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-widget-heading .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-weight:var( --e-global-typography-primary-font-weight );color:var( --e-global-color-primary );}.elementor-15047 .elementor-element.elementor-element-2fe45fb{text-align:start;}.elementor-15047 .elementor-element.elementor-element-2fe45fb .elementor-heading-title{font-family:\"OswaldStencil\", Sans-serif;font-size:20px;font-weight:700;line-height:20px;}.elementor-15047 .elementor-element.elementor-element-1b84187{text-align:start;}.elementor-15047 .elementor-element.elementor-element-1b84187 .elementor-heading-title{font-family:\"Poppins\", Sans-serif;font-size:20px;font-weight:700;line-height:20px;color:var( --e-global-color-df07a3b );}.elementor-bc-flex-widget .elementor-15047 .elementor-element.elementor-element-bcff654.elementor-column .elementor-widget-wrap{align-items:center;}.elementor-15047 .elementor-element.elementor-element-bcff654.elementor-column.elementor-element[data-element_type=\"column\"] > .elementor-widget-wrap.elementor-element-populated{align-content:center;align-items:center;}.elementor-15047 .elementor-element.elementor-element-bcff654.elementor-column > .elementor-widget-wrap{justify-content:flex-end;}.elementor-15047 .elementor-element.elementor-element-bcff654 > .elementor-widget-wrap > .elementor-widget:not(.elementor-widget__width-auto):not(.elementor-widget__width-initial):not(:last-child):not(.elementor-absolute){margin-block-end:8px;}.elementor-15047 .elementor-element.elementor-element-bcff654 > .elementor-element-populated{padding:0px 0px 0px 0px;}.elementor-15047 .elementor-element.elementor-element-b50b6c1 > .elementor-widget-container{margin:0px 0px 0px 0px;padding:0px 0px 0px 0px;}.elementor-15047 .elementor-element.elementor-element-b50b6c1{width:auto;max-width:auto;}.elementor-widget-woocommerce-product-add-to-cart .added_to_cart{font-family:var( --e-global-typography-accent-font-family ), Sans-serif;font-weight:var( --e-global-typography-accent-font-weight );}.elementor-15047 .elementor-element.elementor-element-ba5e656 .cart button, .elementor-15047 .elementor-element.elementor-element-ba5e656 .cart .button{font-family:\"OswaldStencil\", Sans-serif;font-size:1em;font-weight:400;line-height:1.25em;border-style:none;border-radius:0px 0px 0px 0px;padding:8px 20px 8px 020px;color:var( --e-global-color-12c3062 );background-color:#B92515;transition:all 0.2s;}.elementor-15047 .elementor-element.elementor-element-ba5e656 .cart button:hover, .elementor-15047 .elementor-element.elementor-element-ba5e656 .cart .button:hover{background-color:var( --e-global-color-737883f );}.elementor-15047 .elementor-element.elementor-element-ba5e656 .added_to_cart{color:var( --e-global-color-6745966 );font-family:var( --e-global-typography-84635c1-font-family ), Sans-serif;font-size:var( --e-global-typography-84635c1-font-size );font-weight:var( --e-global-typography-84635c1-font-weight );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );}.elementor-15047 .elementor-element.elementor-element-ba5e656{--button-spacing:5px;width:auto;max-width:auto;}.elementor-15047 .elementor-element.elementor-element-ba5e656 .quantity .qty{font-family:var( --e-global-typography-84635c1-font-family ), Sans-serif;font-size:var( --e-global-typography-84635c1-font-size );font-weight:var( --e-global-typography-84635c1-font-weight );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );border-style:solid;border-width:1px 1px 1px 1px;border-radius:0px 0px 0px 0px;padding:5px 5px 5px 5px;color:var( --e-global-color-6745966 );border-color:#232323;transition:all 0.2s;}.elementor-15047 .elementor-element.elementor-element-ba5e656 .quantity .qty:focus{border-color:var( --e-global-color-6745966 );}.woocommerce .elementor-15047 .elementor-element.elementor-element-ba5e656 form.cart .variations{width:100%;margin-bottom:0px;}.woocommerce .elementor-15047 .elementor-element.elementor-element-ba5e656 form.cart table.variations tr th, .woocommerce .elementor-15047 .elementor-element.elementor-element-ba5e656 form.cart table.variations tr td{padding-top:calc( 16px\/2 );padding-bottom:calc( 16px\/2 );}.woocommerce .elementor-15047 .elementor-element.elementor-element-ba5e656 form.cart table.variations td.value select, .woocommerce .elementor-15047 .elementor-element.elementor-element-ba5e656 form.cart table.variations td.value:before{background-color:#02010100;border:1px solid #02010100;border-radius:0px;}.elementor-15047 .elementor-element.elementor-element-ba5e656 > .elementor-widget-container{margin:0em 0em 0em 0em;}@media(max-width:1024px){.elementor-15047 .elementor-element.elementor-element-ba5e656 .added_to_cart{font-size:var( --e-global-typography-84635c1-font-size );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );}.elementor-15047 .elementor-element.elementor-element-ba5e656 .quantity .qty{font-size:var( --e-global-typography-84635c1-font-size );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );}}@media(max-width:767px){.elementor-15047 .elementor-element.elementor-element-4d8507a img{width:100%;}.elementor-15047 .elementor-element.elementor-element-4d8507a > .elementor-widget-container{margin:0px 0px 10px 0px;}.elementor-15047 .elementor-element.elementor-element-fcf2dd6{margin-top:0px;margin-bottom:016px;}.elementor-15047 .elementor-element.elementor-element-bcff654.elementor-column > .elementor-widget-wrap{justify-content:flex-start;}.elementor-15047 .elementor-element.elementor-element-ba5e656 .added_to_cart{font-size:var( --e-global-typography-84635c1-font-size );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );}.elementor-15047 .elementor-element.elementor-element-ba5e656 .quantity .qty{font-size:var( --e-global-typography-84635c1-font-size );line-height:var( --e-global-typography-84635c1-line-height );letter-spacing:var( --e-global-typography-84635c1-letter-spacing );word-spacing:var( --e-global-typography-84635c1-word-spacing );}}\/* Start custom CSS for image, class: .elementor-element-4d8507a *\/.elementor-15047 .elementor-element.elementor-element-4d8507a{\n    flex: 120px 0 0;\n}\n\n\n.elementor-15047 .elementor-element.elementor-element-4d8507a:before {\n        background-image: url(https:\/\/graindesail.store\/wp-content\/uploads\/2024\/12\/border-bottom-4.svg);\n        background-repeat: no-repeat;\n        background-size: 300%;\n        content: \"\";\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        height: 50px;\n        background-position: center bottom;\n        z-index: -1;\n\n       \n}\n\n\n@media only screen and (max-width: 767px) {\n  .elementor-15047 .elementor-element.elementor-element-4d8507a{\n    flex: calc(100% - 0px) 0 0;\n}\n}\/* End custom CSS *\/\n\/* Start custom CSS for section, class: .elementor-element-fcf2dd6 *\/.elementor-15047 .elementor-element.elementor-element-fcf2dd6{\n    flex: calc(50% - 120px) 0 0;\n}\n\n@media only screen and (max-width: 767px) {\n  .elementor-15047 .elementor-element.elementor-element-fcf2dd6{\n    flex: calc(100% - 0px) 0 0;\n}\n}\/* End custom CSS *\/\n\/* Start custom CSS for shortcode, class: .elementor-element-b50b6c1 *\/.elementor-15047 .elementor-element.elementor-element-b50b6c1 svg{\n    width: 24px;\n   \n}\n\n.elementor-15047 .elementor-element.elementor-element-b50b6c1 span.product-stock {\n    display: flex;\n    align-items: center;\n    gap: 2px\n}\n\n.elementor-15047 .elementor-element.elementor-element-b50b6c1 span.product-stock {\n    \n    color: var(--e-global-color-6745966);\n    font-family: var(--e-global-typography-84635c1-font-family), Sans-serif;\n    font-size: var(--e-global-typography-84635c1-font-size);\n    font-weight: var(--e-global-typography-84635c1-font-weight);\n    line-height: var(--e-global-typography-84635c1-line-height);\n}\n\n\n.elementor-15047 .elementor-element.elementor-element-b50b6c1{\n        \n        padding: 2px 10px 2px 5px;\n        background-color: #FFC729;\n        border-radius: 5px;\n        color: #232323;\n        font-weight: 400;\n        text-transform: uppercase;\n}\n\nsvg.e-font-icon-svg.e-fas-ban {\n    margin: 0 !important;\n}\/* End custom CSS *\/\n\/* Start custom CSS for woocommerce-product-add-to-cart, class: .elementor-element-ba5e656 *\/.elementor-15047 .elementor-element.elementor-element-ba5e656 p.stock.in-stock {\n    display: none;\n}\n\n.elementor-15047 .elementor-element.elementor-element-ba5e656 button.single_add_to_cart_button.button.alt {\n    margin: 0 !important;\n}\n\n.elementor-15047 .elementor-element.elementor-element-ba5e656 .quantity {\n    margin: 0 10px 0 0 !important;\n}\n\n\nspan.xoo-cp-icon-check.xoo-cp-added:before {\n    display: none;\n}\n\na.added_to_cart.wc-forward {\n    display: none;\n}\n\n.ppc-button-wrapper {\n    display: none\n}\n\n\nbutton.minus, button.plus {\n    margin: 0 !important;\n     padding: 0 3px !important;\n     background: transparent !important\n    \n}\n\nbutton.plus:hover, button.minus:hover {\n    background: #f1f1f !important;\n}\n\n\n.yith-wcwl-add-button{\n    margin: 0 0 0 20px !important;\n    display: flex ;\n    align-items: center;\n    justify-content: center;\n    width: 40px;\n    height: 40px;\n    border-radius: 50% !important;\n    box-shadow: 0.125rem -0.125rem 0.25rem 0 rgba(0, 0, 0, 0.2)!important;\n    border-width: 2px;\n}\n\ni.yith-wcwl-icon.fa.fa-heart-o, i.yith-wcwl-icon.fa.fa-heart {\n    margin: 0;\n    color: #7a7a7a;\n    font-size: 24px;\n}\n\n.yith-wcwl-add-to-wishlist {\n    margin: 0;\n    display: flex;\n}\n\np.stock.out-of-stock {\n    font-size: 16px;\n    font-weight: 600;\n    margin: 0;\n}\n\n:is(.elementor-widget-woocommerce-product-add-to-cart,.woocommerce div.product .elementor-widget-woocommerce-product-add-to-cart,.elementor-widget-wc-add-to-cart,.woocommerce div.product .elementor-widget-wc-add-to-cart) .quantity .qty {\n\n    height: auto !important;\n}\n\n.yith-wcwl-popup-footer {\n    display: flex;\n    align-items: center;\n    justify-content: flex-end;\n    margin: 16px 0 0;\n}\n\na.wishlist-submit.popup_button.add_to_wishlist.single_add_to_wishlist {\n    font-family: var( --e-global-typography-52d41d6-font-family ), Sans-serif;\n    font-size: 1.25em;\n    border-radius: 0px 0px 0px 0px;\n    padding: 8px 20px;\n    color: #FFFFFF;\n    background-color: #b92515;\n    transition: all 0.2s;\n}\n\n\n.woocommerce-variation.single_variation {\n    display: none !important;\n}\n\nth.label {\n    padding: 0 0 !important;\n    margin: 10px 0;\n    color: #232323;\n    text-transform: uppercase;\n}\n\na.reset_variations {\n    display: none !important;\n}\n\n\ntd.value.disable-to-select {\n    padding: 0 !important;\n    margin: 0 0 10px;\n}\n\n.cfvsw-swatches-option.cfvsw-image-option {\n    opacity: .75;\n    border-width: 2px;\n}\n\n.cfvsw-swatches-option.cfvsw-image-option.cfvsw-selected-swatch {\n    opacity: 1;\n}\n\n.elementor-15047 .elementor-element.elementor-element-ba5e656 .custom-qty-wrapper {\n    background: white;\n}\n\n\na.added_to_cart.wc-forward{\n    display: none !important;\n}\n\n\n.qty-btn-plus, .qty-btn-minus, .e-loop-add-to-cart-form .qty-btn-plus, .e-loop-add-to-cart-form .qty-btn-minus {\n    padding: 0 3px !important;\n    margin: 0 !important;\n}\/* End custom CSS *\/\n\/* Start custom CSS for column, class: .elementor-element-bcff654 *\/.elementor-15047 .elementor-element.elementor-element-bcff654 .elementor-element-populated{\n    gap: 16px\n}\/* End custom CSS *\/\n\/* Start custom CSS for section, class: .elementor-element-023b0c6 *\/.elementor-15047 .elementor-element.elementor-element-023b0c6{\n    flex: 50% 0 0;\n}\n\n@media only screen and (max-width: 767px) {\n  .elementor-15047 .elementor-element.elementor-element-023b0c6{\n    flex: calc(100% - 0px) 0 0;\n}\n}\/* End custom CSS *\/<\/style>\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-24500 post-24500 product type-product status-publish has-post-thumbnail product_cat-coffee first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1749\" height=\"1749\" src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G.jpg\" class=\"attachment-full size-full wp-image-27223\" alt=\"Sachet de caf\u00e9 Ethiopie Sidamo 500G\" srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G.jpg 1749w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-300x300.jpg 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-1024x1024.jpg 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-150x150.jpg 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-768x768.jpg 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-1536x1536.jpg 1536w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-595x595.jpg 595w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-600x600.jpg 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/Visuel-Ethiopie-Sidamo-500G-100x100.jpg 100w\" sizes=\"(max-width: 1749px) 100vw, 1749px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Honduras Ceiba Coffee &#8211; 500G &#8211; ORGANIC (Copie)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">15,60&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05b0e2a\">\n            Honduras Ceiba Coffee - 500G - ORGANIC (Copie) quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05b0e2a\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"49\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=24500\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_24500\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"24500\" data-product_sku=\"Caf\u00e9_SP\u00c9_Ethiopie_Sidamo_500G_Grains\" aria-label=\"Add to cart: &ldquo;Honduras Ceiba Coffee - 500G - ORGANIC (Copie)&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Honduras Ceiba Coffee - 500G - ORGANIC (Copie)&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_24500\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-23753 post-23753 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-grains-x4-grain-de-sail-bio-sans-fond.png\" class=\"attachment-full size-full wp-image-23807 lazyload\" alt=\"Pack de 4 caf\u00e9s en grains Grain de Sail\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-grains-x4-grain-de-sail-bio-sans-fond.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-grains-x4-grain-de-sail-bio-sans-fond-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-grains-x4-grain-de-sail-bio-sans-fond-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-grains-x4-grain-de-sail-bio-sans-fond-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack of 5 coffees Grains (Copie)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">49,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05b5b1b\">\n            Pack of 5 coffees Grains (Copie) quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05b5b1b\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"83\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=23753\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_23753\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"23753\" data-product_sku=\"Pack_4_Caf\u00e9s_GP_Grains-\" aria-label=\"Add to cart: &ldquo;Pack of 5 coffees Grains (Copie)&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack of 5 coffees Grains (Copie)&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_23753\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-23751 post-23751 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-moulus-x4-grain-de-sail-bio-sans-fond.png\" class=\"attachment-full size-full wp-image-23805 lazyload\" alt=\"Pack de 4 caf\u00e9s moulus Grain de Sail\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-moulus-x4-grain-de-sail-bio-sans-fond.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-moulus-x4-grain-de-sail-bio-sans-fond-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-moulus-x4-grain-de-sail-bio-sans-fond-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/pack-cafes-moulus-x4-grain-de-sail-bio-sans-fond-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack 5 ground coffees (Copie)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">25,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05ba4fe\">\n            Pack 5 ground coffees (Copie) quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05ba4fe\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"49\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=23751\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_23751\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"23751\" data-product_sku=\"Pack_4_Caf\u00e9s_GP_Moulus-\" aria-label=\"Add to cart: &ldquo;Pack 5 ground coffees (Copie)&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack 5 ground coffees (Copie)&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_23751\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-15684 post-15684 product type-product status-publish has-post-thumbnail product_cat-boxes last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924.png\" class=\"attachment-full size-full wp-image-11108 lazyload\" alt=\"Coffret de tablette de chocolat - La Totale - Composition\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1924-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">La totale &#8211; 17 references<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">56,45&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05bef74\">\n            La totale - 17 references quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05bef74\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"27\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=15684\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_15684\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"15684\" data-product_sku=\"Box_Totale_17ref\" aria-label=\"Add to cart: &ldquo;La totale - 17 references&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;La totale - 17 references&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_15684\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-12425 post-12425 product type-product status-publish has-post-thumbnail product_cat-non-categorise product_tag-gift-card first instock purchasable product-type-pw-gift-card\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/07\/carte-cadeau-eshop-grain-de-sail-fond-rouge-1.png\" class=\"attachment-full size-full wp-image-12637 lazyload\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 3600px; --smush-placeholder-aspect-ratio: 3600\/3600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Gift Card<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\" aria-hidden=\"true\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span> <span aria-hidden=\"true\">&ndash;<\/span> <span class=\"woocommerce-Price-amount amount\" aria-hidden=\"true\">150,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><span class=\"screen-reader-text\">Price range: 10,00&nbsp;&euro; through 150,00&nbsp;&euro;<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-pw-gift-card\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/gift-card\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_12425\" data-quantity=\"1\" class=\"button product_type_pw-gift-card add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"12425\" data-product_sku=\"\" aria-label=\"Select options for &ldquo;Gift Card&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select amount\">Select amount<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_12425\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-11105 post-11105 product type-product status-publish has-post-thumbnail product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925.png\" class=\"attachment-full size-full wp-image-11102 lazyload\" alt=\"Coffret de tablettes de chocolat - La Sensation - Composition\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1925-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Sensation<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">33,75&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05ccacb\">\n            The Sensation quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05ccacb\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"4\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=11105\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_11105\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"11105\" data-product_sku=\"la-sensation\" aria-label=\"Add to cart: &ldquo;The Sensation&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;The Sensation&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_11105\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-11090 post-11090 product type-product status-publish has-post-thumbnail product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933.png\" class=\"attachment-full size-full wp-image-11093 lazyload\" alt=\"Coffret de tablettes de chocolat - Boite 8 D\u00e9lices Cabosse - Composition\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1933-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box of 8 Cabosse Delights<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">27,45&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05d13f3\">\n            Box of 8 Cabosse Delights quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05d13f3\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"88\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=11090\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_11090\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"11090\" data-product_sku=\"boite8delices_cabosse\" aria-label=\"Add to cart: &ldquo;Box of 8 Cabosse Delights&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box of 8 Cabosse Delights&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_11090\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10982 post-10982 product type-product status-publish has-post-thumbnail product_cat-boxes last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956.png\" class=\"attachment-full size-full wp-image-10984 lazyload\" alt=\"Coffret de tablettes de chocolat - L&#039;id\u00e9al - Pochon rouge - Composition\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1956-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Ideal<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">17,35&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05d5d9d\">\n            The Ideal quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05d5d9d\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"164\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10982\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10982\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10982\" data-product_sku=\"L&#039;Id\u00e9al_5 tablettes\" aria-label=\"Add to cart: &ldquo;The Ideal&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;The Ideal&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10982\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10969 post-10969 product type-product status-publish has-post-thumbnail product_cat-boxes first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954.png\" class=\"attachment-full size-full wp-image-10971 lazyload\" alt=\"Coffret de tablettes de chocolat - L&#039;\u00e9crin- Pochon rouge - Composition\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1954-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">L&#8217;\u00c9crin<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,35&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05da8b5\">\n            L&#039;\u00c9crin quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05da8b5\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"74\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10969\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10969\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10969\" data-product_sku=\"L&#039;\u00c9crin_3 tablettes\" aria-label=\"Add to cart: &ldquo;L&#039;\u00c9crin&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;L&#039;\u00c9crin&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10969\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10967 post-10967 product type-product status-publish has-post-thumbnail product_cat-accessories product_cat-offres-du-moment-en  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252.png\" class=\"attachment-full size-full wp-image-10966 lazyload\" alt=\"Sac de caf\u00e9 en toile de jute - Coopagro\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252.png 800w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2252-100x100.png 100w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/800;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Burlap bag &#8211; Coopagro<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05df2e3\">\n            Burlap bag - Coopagro quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05df2e3\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/burlap-bag-coopagro\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10967\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10967\" data-product_sku=\"Sac_Toile_Coopagro\" aria-label=\"Read more about &ldquo;Burlap bag - Coopagro&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10967\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10963 post-10963 product type-product status-publish has-post-thumbnail product_cat-accessories product_cat-offres-du-moment-en  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251.png\" class=\"attachment-full size-full wp-image-10962 lazyload\" alt=\"Sac de caf\u00e9 en toile de jute - La Tribu\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251.png 800w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2251-100x100.png 100w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/800;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Burlap bag &#8211; La Tribu<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05e3d2b\">\n            Burlap bag - La Tribu quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05e3d2b\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/burlap-bag-la-tribu\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10963\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10963\" data-product_sku=\"Sac_Toile_La Tribu\" aria-label=\"Read more about &ldquo;Burlap bag - La Tribu&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10963\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10932 post-10932 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en last outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2225.png\" class=\"attachment-full size-full wp-image-10923 lazyload\" alt=\"Tablette de chocolat - Pochon rouge  - P\u00e2ques - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2225.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2225-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2225-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2225-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pochon Rouge + 4 Tablettes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">9,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05e8761\">\n            Pochon Rouge + 4 Tablettes quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05e8761\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/pochon-rouge-4-tablettes-2\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10932\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10932\" data-product_sku=\"POCHON_2_PAQUES_NOIR\" aria-label=\"Read more about &ldquo;Pochon Rouge + 4 Tablettes&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10932\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10920 post-10920 product type-product status-publish has-post-thumbnail product_cat-christmas product_cat-offres-du-moment-en first instock sale taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"691\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2174.png\" class=\"attachment-full size-full wp-image-10911 lazyload\" alt=\"Moulage Le Poisson - P\u00e2ques\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2174.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2174-260x300.png 260w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/691;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fish &#8211; 90G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><del aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">5,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/del> <span class=\"screen-reader-text\">Original price was: 5,50&nbsp;&euro;.<\/span><ins aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">3,63&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/ins><span class=\"screen-reader-text\">Current price is: 3,63&nbsp;&euro;.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05ed573\">\n            Fish - 90G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05ed573\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"56\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10920\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10920\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10920\" data-product_sku=\"Poisson-chocolat\" aria-label=\"Add to cart: &ldquo;Fish - 90G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Fish - 90G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10920\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10907 post-10907 product type-product status-publish has-post-thumbnail product_cat-christmas product_cat-offres-du-moment-en  instock sale taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"683\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2167.png\" class=\"attachment-full size-full wp-image-10900 lazyload\" alt=\"Moulage Le Poussin - P\u00e2ques - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2167.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2167-264x300.png 264w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/683;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Le Poussin &#8211; 90G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><del aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">5,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/del> <span class=\"screen-reader-text\">Original price was: 5,50&nbsp;&euro;.<\/span><ins aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">3,63&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/ins><span class=\"screen-reader-text\">Current price is: 3,63&nbsp;&euro;.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b05f21f6\">\n            Le Poussin - 90G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b05f21f6\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"42\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10907\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10907\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10907\" data-product_sku=\"Poussin-chocolat\" aria-label=\"Add to cart: &ldquo;Le Poussin - 90G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Le Poussin - 90G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10907\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10877 post-10877 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136.png\" class=\"attachment-full size-full wp-image-10874 lazyload\" alt=\"Miki Marine - A l&#039;aise Breizh x Grain de Sail - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2136-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Miki Marine<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">29,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06028e2\">\n            Miki Marine quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06028e2\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"19\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10877\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10877\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10877\" data-product_sku=\"miki-marine\" aria-label=\"Add to cart: &ldquo;Miki Marine&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Miki Marine&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10877\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10871 post-10871 product type-product status-publish has-post-thumbnail product_cat-accessories last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132.png\" class=\"attachment-full size-full wp-image-10868 lazyload\" alt=\"Bonnet Marine Rayures - A l&#039;aise Breizh x Grain de Sail - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2132-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Beanie Navy Stripes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">29,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06071cd\">\n            Beanie Navy Stripes quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06071cd\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"52\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10871\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10871\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10871\" data-product_sku=\"bonnet-marine-rayures\" aria-label=\"Add to cart: &ldquo;Beanie Navy Stripes&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Beanie Navy Stripes&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10871\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10865 post-10865 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127.png\" class=\"attachment-full size-full wp-image-10862 lazyload\" alt=\"Bonnet Bleu Marine - A l&#039;aise Breizh x Grain de Sail - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2127-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Navy Blue Bonnet<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">29,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b060bac9\">\n            Navy Blue Bonnet quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b060bac9\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"46\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10865\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10865\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10865\" data-product_sku=\"bonnet-bleu-marine\" aria-label=\"Add to cart: &ldquo;Navy Blue Bonnet&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Navy Blue Bonnet&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10865\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10762 post-10762 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1368.jpg\" class=\"attachment-full size-full wp-image-10755 lazyload\" alt=\"Sachet de chocolat Noir 85% Framboise &amp; Pralin - 500g\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1368.jpg 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1368-300x300.jpg 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1368-150x150.jpg 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1368-100x100.jpg 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Raspberry &amp; Praline Dark Chocolate Sachet &#8211; 500g<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06123c2\">\n            Raspberry &amp; Praline Dark Chocolate Sachet - 500g quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06123c2\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/raspberry-praline-dark-chocolate-sachet-500g\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10762\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10762\" data-product_sku=\"500g-noir-framboise-pralin\" aria-label=\"Read more about &ldquo;Raspberry &amp; Praline Dark Chocolate Sachet - 500g&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10762\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10697 post-10697 product type-product status-publish has-post-thumbnail product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927.png\" class=\"attachment-full size-full wp-image-10688 lazyload\" alt=\"Coffret L&#039;Essentiel - Composition sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1927-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box L&#8217;Essentiel<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">13,85&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0616df5\">\n            Box L&#039;Essentiel quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0616df5\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"100\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10697\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10697\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10697\" data-product_sku=\"Box_Essentiel\" aria-label=\"Add to cart: &ldquo;Box L&#039;Essentiel&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box L&#039;Essentiel&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10697\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10684 post-10684 product type-product status-publish has-post-thumbnail product_cat-accessories last outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1297-1.png\" class=\"attachment-full size-full wp-image-10671 lazyload\" alt=\"Totebag bleu Skyline - A l&#039;aise Breizh x Grain de Sail - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1297-1.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1297-1-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1297-1-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1297-1-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Skyline blue tote bag<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b061b7dc\">\n            Skyline blue tote bag quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b061b7dc\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/skyline-blue-tote-bag\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10684\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10684\" data-product_sku=\"tote-bag-bleu-skyline\" aria-label=\"Read more about &ldquo;Skyline blue tote bag&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10684\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10636 post-10636 product type-product status-publish has-post-thumbnail product_cat-boxes first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931.png\" class=\"attachment-full size-full wp-image-10629 lazyload\" alt=\"Coffret La Compl\u00e8te - Composition sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1931-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box La Compl\u00e8te<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">27,40&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0620264\">\n            Box La Compl\u00e8te quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0620264\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"107\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10636\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10636\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10636\" data-product_sku=\"Box_Complete\" aria-label=\"Add to cart: &ldquo;Box La Compl\u00e8te&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box La Compl\u00e8te&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10636\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10626 post-10626 product type-product status-publish has-post-thumbnail product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930.png\" class=\"attachment-full size-full wp-image-10617 lazyload\" alt=\"Coffret L&#039;Evidence - Composition sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1930-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box L&#8217;Evidence<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">27,15&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0624c0e\">\n            Box L&#039;Evidence quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0624c0e\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"57\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10626\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10626\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10626\" data-product_sku=\"Box_Evidence\" aria-label=\"Add to cart: &ldquo;Box L&#039;Evidence&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box L&#039;Evidence&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10626\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10607 post-10607 product type-product status-publish has-post-thumbnail product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929.png\" class=\"attachment-full size-full wp-image-10598 lazyload\" alt=\"Coffret L&#039;Incontournable - Composition sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1929-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box L&#8217;Incontournable<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">24,20&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0629583\">\n            Box L&#039;Incontournable quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0629583\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"120\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10607\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10607\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10607\" data-product_sku=\"Box_Incontournable\" aria-label=\"Add to cart: &ldquo;Box L&#039;Incontournable&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box L&#039;Incontournable&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10607\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10587 post-10587 product type-product status-publish has-post-thumbnail product_cat-boxes last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1331\" height=\"1186\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928.png\" class=\"attachment-full size-full wp-image-10586 lazyload\" alt=\"Coffret La Gourmande - Composition sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928.png 1331w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928-300x267.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928-1024x912.png 1024w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928-768x684.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/1928-600x535.png 600w\" data-sizes=\"(max-width: 1331px) 100vw, 1331px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1331px; --smush-placeholder-aspect-ratio: 1331\/1186;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Box La Gourmande<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">20,80&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b062dfa6\">\n            Box La Gourmande quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b062dfa6\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"443\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=10587\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10587\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"10587\" data-product_sku=\"Box_Gourmande_\" aria-label=\"Add to cart: &ldquo;Box La Gourmande&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Box La Gourmande&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10587\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10528 post-10528 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en first outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262.png\" class=\"attachment-full size-full wp-image-10517 lazyload\" alt=\"Sachet de chocolat Noir Noisettes - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262.png 800w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2262-100x100.png 100w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/800;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark Chocolate Hazelnut Sachet &#8211; 500g<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0632a6a\">\n            Dark Chocolate Hazelnut Sachet - 500g quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0632a6a\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/dark-chocolate-hazelnut-sachet-500g\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10528\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10528\" data-product_sku=\"500g-noir noisettes\" aria-label=\"Read more about &ldquo;Dark Chocolate Hazelnut Sachet - 500g&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10528\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10514 post-10514 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268.png\" class=\"attachment-full size-full wp-image-10507 lazyload\" alt=\"Sachet de chocolat Noir et Fleur de Sel - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268.png 800w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2268-100x100.png 100w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/800;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate sachet with fleur de sel &#8211; 500g<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b063938c\">\n            Dark chocolate sachet with fleur de sel - 500g quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b063938c\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/dark-chocolate-sachet-with-fleur-de-sel-500g\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10514\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10514\" data-product_sku=\"500g-noir-fleur-de-sel\" aria-label=\"Read more about &ldquo;Dark chocolate sachet with fleur de sel - 500g&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10514\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-10504 post-10504 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"800\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272.png\" class=\"attachment-full size-full wp-image-10497 lazyload\" alt=\"Sachet de chocolat Noir Th\u00e9 Earl Grey - 500G\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272.png 800w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/05\/2272-100x100.png 100w\" data-sizes=\"(max-width: 800px) 100vw, 800px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 800px; --smush-placeholder-aspect-ratio: 800\/800;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark Chocolate Earl Grey Tea &#8211; 500g<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">10,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b063dd45\">\n            Dark Chocolate Earl Grey Tea - 500g quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b063dd45\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/dark-chocolate-earl-grey-tea-500g\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_10504\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"10504\" data-product_sku=\"500g-noir-Th\u00e9-Earl-Grey\" aria-label=\"Read more about &ldquo;Dark Chocolate Earl Grey Tea - 500g&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_10504\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-11014 post-11014 product type-product status-publish has-post-thumbnail product_cat-boxes product_cat-offres-du-moment-en product_cat-our-festive-products last instock sale taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/boite-cabosse-noel-detoure.png\" class=\"attachment-full size-full wp-image-16916 lazyload\" alt=\"Boite Cabosse Noel Grain de Sail - d\u00e9tour\u00e9\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/boite-cabosse-noel-detoure.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/boite-cabosse-noel-detoure-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/boite-cabosse-noel-detoure-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/boite-cabosse-noel-detoure-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Christmas composition Boite Cabosse<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><del aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">18,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/del> <span class=\"screen-reader-text\">Original price was: 18,90&nbsp;&euro;.<\/span><ins aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">15,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/ins><span class=\"screen-reader-text\">Current price is: 15,90&nbsp;&euro;.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0642a72\">\n            Christmas composition Boite Cabosse quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0642a72\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"46\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=11014\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_11014\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"11014\" data-product_sku=\"Compo_Bte_Cabosse_Noel\" aria-label=\"Add to cart: &ldquo;Christmas composition Boite Cabosse&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Christmas composition Boite Cabosse&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_11014\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9872 post-9872 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1272.png\" class=\"attachment-full size-full wp-image-9873 lazyload\" alt=\"Pochette tissu - Grain de Sail x A l&#039;aise Breizh - Rouge et beige\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1272.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1272-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1272-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1272-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Avel red fabric pouch<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">9,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06473e4\">\n            Avel red fabric pouch quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06473e4\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"39\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9872\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9872\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9872\" data-product_sku=\"pochette-1tabl-rouge-beige\" aria-label=\"Add to cart: &ldquo;Avel red fabric pouch&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Avel red fabric pouch&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9872\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9852 post-9852 product type-product status-publish has-post-thumbnail product_cat-accessories  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1280.png\" class=\"attachment-full size-full wp-image-9854 lazyload\" alt=\"Torchon balade \u00e0 morlaix - Grain de Sail x A l&#039;aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1280.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1280-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1280-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1280-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Tea towel Balade \u00e0 Morlaix<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">9,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b064c251\">\n            Tea towel Balade \u00e0 Morlaix quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b064c251\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/tea-towel-balade-a-morlaix\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9852\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"9852\" data-product_sku=\"torchon-balade-a-morlaix\" aria-label=\"Read more about &ldquo;Tea towel Balade \u00e0 Morlaix&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9852\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9861 post-9861 product type-product status-publish has-post-thumbnail product_cat-accessories  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1288.png\" class=\"attachment-full size-full wp-image-8827 lazyload\" alt=\"Torchon Travers\u00e9e Transatlantique - Grain de Sail x A l&#039;Aise Brezih\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1288.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1288-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1288-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1288-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Travers\u00e9e Transatlantique tea towel<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">9,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b065149e\">\n            Travers\u00e9e Transatlantique tea towel quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b065149e\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/traversee-transatlantique-tea-towel\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9861\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"9861\" data-product_sku=\"torchon-traversee-transat\" aria-label=\"Read more about &ldquo;Travers\u00e9e Transatlantique tea towel&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9861\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9865 post-9865 product type-product status-publish has-post-thumbnail product_cat-accessories last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1298.png\" class=\"attachment-full size-full wp-image-8810 lazyload\" alt=\"Tote-bag \u00e9cru Balade \u00e0 Morlaix - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1298.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1298-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1298-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1298-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ecru Tote-bag Stroll in Morlaix<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">12,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0656170\">\n            Ecru Tote-bag Stroll in Morlaix quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0656170\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"76\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9865\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9865\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9865\" data-product_sku=\"tote-bag-\u00e9cru-balade-Mx\" aria-label=\"Add to cart: &ldquo;Ecru Tote-bag Stroll in Morlaix&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Ecru Tote-bag Stroll in Morlaix&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9865\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9868 post-9868 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-variable\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/935.png\" class=\"attachment-full size-full wp-image-8803 lazyload\" alt=\"Chaussettes gris et bleu marine - Grain de Sail\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/935.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/935-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/935-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/935-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Avel Socks &#8211; Blue<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">12,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-variable\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/avel-socks-blue\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9868\" data-quantity=\"1\" class=\"button product_type_variable add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"9868\" data-product_sku=\"\" aria-label=\"Select options for &ldquo;Avel Socks - Blue&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select options\">Select options<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9868\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9871 post-9871 product type-product status-publish has-post-thumbnail product_cat-accessories product_cat-boxes  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1860.png\" class=\"attachment-full size-full wp-image-8797 lazyload\" alt=\"\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1860.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1860-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1860-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1860-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pochon Rouge GDS<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">1,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0664552\">\n            Pochon Rouge GDS quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0664552\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"68\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9871\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9871\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9871\" data-product_sku=\"pochon_rouge_gds\" aria-label=\"Add to cart: &ldquo;Pochon Rouge GDS&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pochon Rouge GDS&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9871\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9880 post-9880 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-coffee-mill-dome.png\" class=\"attachment-full size-full wp-image-20141 lazyload\" alt=\"Moulin \u00e0 caf\u00e9 manuel Hario Dome - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-coffee-mill-dome.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-coffee-mill-dome-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-coffee-mill-dome-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-coffee-mill-dome-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HARIO Coffee Grinder &#8211; Dome<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">53,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0669532\">\n            HARIO Coffee Grinder - Dome quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0669532\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"9\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9880\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9880\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9880\" data-product_sku=\"Moulin_Hario_Dome_MCD-2\" aria-label=\"Add to cart: &ldquo;HARIO Coffee Grinder - Dome&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;HARIO Coffee Grinder - Dome&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9880\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9882 post-9882 product type-product status-publish has-post-thumbnail product_cat-accessories product_cat-boxes last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1429.png\" class=\"attachment-full size-full wp-image-8787 lazyload\" alt=\"Pochon Ecru GDS\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1429.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1429-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1429-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1429-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pochon Ecru GDS<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">2,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b066e41b\">\n            Pochon Ecru GDS quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b066e41b\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"57\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9882\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9882\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9882\" data-product_sku=\"pochon_ecru_gds\" aria-label=\"Add to cart: &ldquo;Pochon Ecru GDS&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pochon Ecru GDS&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9882\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9884 post-9884 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-variable\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1465.png\" class=\"attachment-full size-full wp-image-8782 lazyload\" alt=\"Chaussettes Multigo - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1465.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1465-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1465-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1465-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Multigo socks &#8211; Grain de Sail<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">12,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-variable\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/multigo-socks-grain-de-sail\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9884\" data-quantity=\"1\" class=\"button product_type_variable add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"9884\" data-product_sku=\"chaussettes-multigo\" aria-label=\"Select options for &ldquo;Multigo socks - Grain de Sail&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select options\">Select options<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9884\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9886 post-9886 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-variable\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1471.png\" class=\"attachment-full size-full wp-image-8778 lazyload\" alt=\"Chaussettes Avel Bordeaux - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1471.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1471-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1471-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1471-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Avel socks &#8211; Bordeaux<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">12,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-variable\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/avel-socks-bordeaux\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9886\" data-quantity=\"1\" class=\"button product_type_variable add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"9886\" data-product_sku=\"chaussettes-bordeaux\" aria-label=\"Select options for &ldquo;Avel socks - Bordeaux&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select options\">Select options<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9886\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9878 post-9878 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1867.png\" class=\"attachment-full size-full wp-image-8771 lazyload\" alt=\"Mug Cabosses - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1867.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1867-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1867-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1867-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Mug Cabosses &#8211; Grain de sail<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">8,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0684d6f\">\n            Mug Cabosses - Grain de sail quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0684d6f\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"87\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9878\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9878\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9878\" data-product_sku=\"mug_cabosses\" aria-label=\"Add to cart: &ldquo;Mug Cabosses - Grain de sail&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Mug Cabosses - Grain de sail&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9878\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9879 post-9879 product type-product status-publish has-post-thumbnail product_cat-accessories last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1871.png\" class=\"attachment-full size-full wp-image-8766 lazyload\" alt=\"Mug Navire - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1871.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1871-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1871-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1871-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Mug Navire &#8211; Grain de sail<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">8,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b068a1a9\">\n            Mug Navire - Grain de sail quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b068a1a9\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"35\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9879\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9879\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9879\" data-product_sku=\"mug_navire\" aria-label=\"Add to cart: &ldquo;Mug Navire - Grain de sail&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Mug Navire - Grain de sail&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9879\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9881 post-9881 product type-product status-publish has-post-thumbnail product_cat-accessories first outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1870.png\" class=\"attachment-full size-full wp-image-8755 lazyload\" alt=\"Mug Pas de m\u00e2t Pas de Chocolat - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1870.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1870-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1870-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1870-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Mug Pas de m\u00e2t Pas de Chocolat &#8211; Grain de sail<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">8,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b068f353\">\n            Mug Pas de m\u00e2t Pas de Chocolat - Grain de sail quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b068f353\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/mug-pas-de-mat-pas-de-chocolat-grain-de-sail\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9881\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"9881\" data-product_sku=\"mug_mat\" aria-label=\"Read more about &ldquo;Mug Pas de m\u00e2t Pas de Chocolat - Grain de sail&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9881\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9883 post-9883 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mss1.png\" class=\"attachment-full size-full wp-image-20167 lazyload\" alt=\"Moulin \u00e0 caf\u00e9 manuel Hario Mini Slim + - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mss1.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mss1-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mss1-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mss1-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HARIO Coffee Grinder &#8211; Mini Slim +<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">35,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06945f1\">\n            HARIO Coffee Grinder - Mini Slim + quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06945f1\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"10\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9883\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9883\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9883\" data-product_sku=\"Moulin_Hario_MiniSlim+\" aria-label=\"Add to cart: &ldquo;HARIO Coffee Grinder - Mini Slim +&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;HARIO Coffee Grinder - Mini Slim +&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9883\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9885 post-9885 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1861.png\" class=\"attachment-full size-full wp-image-8720 lazyload\" alt=\"HARIO - Zebrang Noir\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1861.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1861-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1861-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1861-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HARIO Coffee Grinder &#8211; Zebrang Black<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">49,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"m40-120 440-760 440 760H40Zm138-80h604L480-720 178-200Zm302-40q17 0 28.5-11.5T520-280q0-17-11.5-28.5T480-320q-17 0-28.5 11.5T440-280q0 17 11.5 28.5T480-240Zm-40-120h80v-200h-80v200Zm40-100Z\"\/><\/svg> Last items in stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0699765\">\n            HARIO Coffee Grinder - Zebrang Black quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"hidden\"\n                                                id=\"quantity_69eb2b0699765\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"1\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9885\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9885\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9885\" data-product_sku=\"Moulin_Hario_Zebrang\" aria-label=\"Add to cart: &ldquo;HARIO Coffee Grinder - Zebrang Black&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;HARIO Coffee Grinder - Zebrang Black&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9885\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9890 post-9890 product type-product status-publish has-post-thumbnail product_cat-accessories last instock taxable shipping-taxable purchasable product-type-variable\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014.png\" class=\"attachment-full size-full wp-image-8717 lazyload\" alt=\"Casquette blanche - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2014-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">White cap<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">29,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-variable\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/white-cap-size-s-m\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9890\" data-quantity=\"1\" class=\"button product_type_variable add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"9890\" data-product_sku=\"casquette-blanche-S-M\" aria-label=\"Select options for &ldquo;White cap&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select options\">Select options<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9890\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9892 post-9892 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-variable\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017.png\" class=\"attachment-full size-full wp-image-8715 lazyload\" alt=\"Casquette Bleu Navy - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2017-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Navy blue cap<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">29,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-variable\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t<a href=\"https:\/\/graindesail.com\/en\/produit\/navy-blue-cap-size-s-m\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9892\" data-quantity=\"1\" class=\"button product_type_variable add_to_cart_button cfvsw_ajax_add_to_cart\" data-product_id=\"9892\" data-product_sku=\"casquette-bleue-S-M\" aria-label=\"Select options for &ldquo;Navy blue cap&rdquo;\" rel=\"nofollow\" data-add_to_cart_text=\"Add to Cart\" data-select_options_text=\"Select options\">Select options<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9892\" class=\"screen-reader-text\">\n\t\tThis product has multiple variants. The options may be chosen on the product page\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9887 post-9887 product type-product status-publish has-post-thumbnail product_cat-accessories  outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2079.png\" class=\"attachment-full size-full wp-image-8710 lazyload\" alt=\"Torchon Cacao Trio - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2079.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2079-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2079-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2079-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Torchon Cacao Trio<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">9,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06af8b1\">\n            Torchon Cacao Trio quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06af8b1\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/torchon-cacao-trio\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9887\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"9887\" data-product_sku=\"torchon-cacao-trio\" aria-label=\"Read more about &ldquo;Torchon Cacao Trio&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9887\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9889 post-9889 product type-product status-publish has-post-thumbnail product_cat-accessories  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1221\" height=\"1470\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045.png\" class=\"attachment-full size-full wp-image-8709 lazyload\" alt=\"Echarpes Marine Rayures - Grain de Sail x A l&#039;Aise Breizh\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045.png 1221w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045-249x300.png 249w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045-851x1024.png 851w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045-768x925.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2045-600x722.png 600w\" data-sizes=\"(max-width: 1221px) 100vw, 1221px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1221px; --smush-placeholder-aspect-ratio: 1221\/1470;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Navy striped scarf<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">39,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06b4907\">\n            Navy striped scarf quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06b4907\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"22\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9889\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9889\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9889\" data-product_sku=\"\u00e9charpe-marine-rayures\" aria-label=\"Add to cart: &ldquo;Navy striped scarf&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Navy striped scarf&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9889\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9891 post-9891 product type-product status-publish has-post-thumbnail product_cat-accessories last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mill-skerton-n1.png\" class=\"attachment-full size-full wp-image-20175 lazyload\" alt=\"Moulin \u00e0 caf\u00e9 manuel Hario Skerton + - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mill-skerton-n1.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mill-skerton-n1-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mill-skerton-n1-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-manuel-hario-mill-skerton-n1-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">HARIO Coffee Grinder &#8211; Skerton +<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">46,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06b992c\">\n            HARIO Coffee Grinder - Skerton + quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06b992c\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"11\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9891\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9891\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9891\" data-product_sku=\"Moulin_Hario_Skerton_+\" aria-label=\"Add to cart: &ldquo;HARIO Coffee Grinder - Skerton +&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;HARIO Coffee Grinder - Skerton +&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9891\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9893 post-9893 product type-product status-publish has-post-thumbnail product_cat-accessories first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-mill-column3.png\" class=\"attachment-full size-full wp-image-20153 lazyload\" alt=\"Moulin \u00e0 caf\u00e9 manuel Hario en bois naturel - Ambiance\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-mill-column3.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-mill-column3-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-mill-column3-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/11\/moulin-a-cafe-hario-mill-column3-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Natural Wood Coffee Grinder<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">49,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06be7b9\">\n            Natural Wood Coffee Grinder quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06be7b9\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"3\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9893\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9893\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9893\" data-product_sku=\"Moulin_Hario_Bois_Naturel\" aria-label=\"Add to cart: &ldquo;Natural Wood Coffee Grinder&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Natural Wood Coffee Grinder&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9893\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9895 post-9895 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2223.png\" class=\"attachment-full size-full wp-image-10408 lazyload\" alt=\"Pack Honduras Moulu - 250G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2223.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2223-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2223-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2223-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Honduras Ground Pack &#8211; 250G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">25,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06c38b9\">\n            Honduras Ground Pack - 250G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06c38b9\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"12\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9895\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9895\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9895\" data-product_sku=\"Pack_4x250G_Honduras_GP_Moulu\" aria-label=\"Add to cart: &ldquo;Honduras Ground Pack - 250G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Honduras Ground Pack - 250G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9895\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9897 post-9897 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2222.png\" class=\"attachment-full size-full wp-image-10406 lazyload\" alt=\"Pack Mexique Moulu - 250G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2222.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2222-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2222-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2222-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ground Mexico Pack &#8211; 250G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">27,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06c8a78\">\n            Ground Mexico Pack - 250G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06c8a78\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"49\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9897\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9897\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9897\" data-product_sku=\"Pack_4x250G_Mexique_GP_Moulu\" aria-label=\"Add to cart: &ldquo;Ground Mexico Pack - 250G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Ground Mexico Pack - 250G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9897\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9899 post-9899 product type-product status-publish has-post-thumbnail product_cat-coffee last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2221.png\" class=\"attachment-full size-full wp-image-10403 lazyload\" alt=\"Pack Colombie Moulu - 250G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2221.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2221-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2221-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2221-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Colombia Ground &#8211; 250G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">26,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06cdc8f\">\n            Pack Colombia Ground - 250G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06cdc8f\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"51\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9899\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9899\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9899\" data-product_sku=\"Pack_4x250G_Colombie_GP_Moulu\" aria-label=\"Add to cart: &ldquo;Pack Colombia Ground - 250G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Colombia Ground - 250G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9899\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9903 post-9903 product type-product status-publish has-post-thumbnail product_cat-coffee first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-moulu-250g-x-4-bio.png\" class=\"attachment-full size-full wp-image-10397 lazyload\" alt=\"Pack P\u00e9rou Moulu - 250G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-moulu-250g-x-4-bio.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-moulu-250g-x-4-bio-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-moulu-250g-x-4-bio-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-moulu-250g-x-4-bio-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Ground Peru &#8211; 250G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">24,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06d2df7\">\n            Pack Ground Peru - 250G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06d2df7\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"51\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9903\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9903\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9903\" data-product_sku=\"Pack_4x250G_Perou_GP_Moulu\" aria-label=\"Add to cart: &ldquo;Pack Ground Peru - 250G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Ground Peru - 250G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9903\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9898 post-9898 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-mexique-grains-500g-x-4-bio.png\" class=\"attachment-full size-full wp-image-10393 lazyload\" alt=\"Pack Mexique Grains - 500G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-mexique-grains-500g-x-4-bio.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-mexique-grains-500g-x-4-bio-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-mexique-grains-500g-x-4-bio-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-mexique-grains-500g-x-4-bio-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Mexique Grains &#8211; 500G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">52,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06d7f2b\">\n            Pack Mexique Grains - 500G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06d7f2b\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"20\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9898\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9898\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9898\" data-product_sku=\"Pack_4x500G_Mexique_GP_Grains\" aria-label=\"Add to cart: &ldquo;Pack Mexique Grains - 500G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Mexique Grains - 500G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9898\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9900 post-9900 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-1.png\" class=\"attachment-full size-full wp-image-10391 lazyload\" alt=\"Pack Honduras Grains - 500G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-1.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-1-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-1-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-1-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Honduras Grains &#8211; 500G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">47,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06dd083\">\n            Pack Honduras Grains - 500G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06dd083\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"29\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9900\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9900\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9900\" data-product_sku=\"Pack_4x500G_Honduras_GP_Grains\" aria-label=\"Add to cart: &ldquo;Pack Honduras Grains - 500G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Honduras Grains - 500G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9900\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9902 post-9902 product type-product status-publish has-post-thumbnail product_cat-coffee last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-grains-500g-x-4-bio.png\" class=\"attachment-full size-full wp-image-10386 lazyload\" alt=\"Pack P\u00e9rou Grains - 500G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-grains-500g-x-4-bio.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-grains-500g-x-4-bio-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-grains-500g-x-4-bio-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pack-perou-grains-500g-x-4-bio-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Peru Grains &#8211; 500G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">45,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06e21ec\">\n            Pack Peru Grains - 500G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06e21ec\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"68\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9902\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9902\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9902\" data-product_sku=\"Pack_4x500G_Perou_GP_Grains\" aria-label=\"Add to cart: &ldquo;Pack Peru Grains - 500G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Peru Grains - 500G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9902\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9904 post-9904 product type-product status-publish has-post-thumbnail product_cat-coffee first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio.png\" class=\"attachment-full size-full wp-image-10389 lazyload\" alt=\"Pack Colombie Grains - 500G X 4 - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/cafe-colombie-excelso-grains-500g-x-4-bio-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pack Colombie Grains &#8211; 500G X 4 &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">50,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06e7386\">\n            Pack Colombie Grains - 500G X 4 - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06e7386\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"24\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9904\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9904\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9904\" data-product_sku=\"Pack_4x500G_Colombie_GP_Grains\" aria-label=\"Add to cart: &ldquo;Pack Colombie Grains - 500G X 4 - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pack Colombie Grains - 500G X 4 - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9904\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9911 post-9911 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2209.png\" class=\"attachment-full size-full wp-image-10443 lazyload\" alt=\"Caf\u00e9 Honduras Grains - 500G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2209.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2209-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2209-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2209-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Honduras Coffee Beans &#8211; 500G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">12,25&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06ec433\">\n            Honduras Coffee Beans - 500G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06ec433\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"12\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9911\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9911\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9911\" data-product_sku=\"Caf\u00e9_GP_Honduras_BIO_500G_Grains\" aria-label=\"Add to cart: &ldquo;Honduras Coffee Beans - 500G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Honduras Coffee Beans - 500G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9911\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9913 post-9913 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2210.png\" class=\"attachment-full size-full wp-image-10441 lazyload\" alt=\"Caf\u00e9 Honduras Moulu - 500G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2210.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2210-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2210-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2210-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Honduras Ground Coffee- 250G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">6,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b06f1618\">\n            Honduras Ground Coffee- 250G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b06f1618\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"45\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9913\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9913\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9913\" data-product_sku=\"Caf\u00e9_GP_Honduras_250G_Moulu\" aria-label=\"Add to cart: &ldquo;Honduras Ground Coffee- 250G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Honduras Ground Coffee- 250G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9913\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9910 post-9910 product type-product status-publish has-post-thumbnail product_cat-coffee last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2204.png\" class=\"attachment-full size-full wp-image-10434 lazyload\" alt=\"Caf\u00e9 P\u00e9rou Grains - 500G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2204.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2204-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2204-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2204-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Coffee Peru Beans &#8211; 500G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">11,70&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07025df\">\n            Coffee Peru Beans - 500G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07025df\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"273\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9910\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9910\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9910\" data-product_sku=\"Caf\u00e9_GP_Perou_BIO_500G_Grains\" aria-label=\"Add to cart: &ldquo;Coffee Peru Beans - 500G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Coffee Peru Beans - 500G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9910\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9912 post-9912 product type-product status-publish has-post-thumbnail product_cat-coffee first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2203.png\" class=\"attachment-full size-full wp-image-10432 lazyload\" alt=\"Caf\u00e9 P\u00e9rou Moulu - 250G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2203.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2203-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2203-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2203-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ground Peruvian Coffee &#8211; 250G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">6,20&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0707799\">\n            Ground Peruvian Coffee - 250G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0707799\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"203\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9912\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9912\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9912\" data-product_sku=\"Caf\u00e9_GP_Perou_BIO_250G_Moulu\" aria-label=\"Add to cart: &ldquo;Ground Peruvian Coffee - 250G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Ground Peruvian Coffee - 250G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9912\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9914 post-9914 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2202.png\" class=\"attachment-full size-full wp-image-10430 lazyload\" alt=\"Caf\u00e9 Mexique Grains- 500G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2202.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2202-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2202-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2202-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Coffee Mexico Grains- 500G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">13,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b070c934\">\n            Coffee Mexico Grains- 500G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b070c934\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"83\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9914\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9914\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9914\" data-product_sku=\"Caf\u00e9_GP_Mexique_BIO_500G_Grains\" aria-label=\"Add to cart: &ldquo;Coffee Mexico Grains- 500G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Coffee Mexico Grains- 500G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9914\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9916 post-9916 product type-product status-publish has-post-thumbnail product_cat-coffee  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2200.png\" class=\"attachment-full size-full wp-image-10428 lazyload\" alt=\"Caf\u00e9 Mexique Moulu - 250G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2200.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2200-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2200-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2200-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ground Mexican Coffee &#8211; 250G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">7,20&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0711cd6\">\n            Ground Mexican Coffee - 250G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0711cd6\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"192\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9916\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9916\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9916\" data-product_sku=\"Caf\u00e9_GP_Mexique_BIO_250G_Moulu\" aria-label=\"Add to cart: &ldquo;Ground Mexican Coffee - 250G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Ground Mexican Coffee - 250G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9916\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9917 post-9917 product type-product status-publish has-post-thumbnail product_cat-coffee last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2199.png\" class=\"attachment-full size-full wp-image-10426 lazyload\" alt=\"Caf\u00e9 Colombie Excelso Grains - 500G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2199.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2199-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2199-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2199-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Coffee Colombia Excelso Grains &#8211; 500G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">13,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07170cb\">\n            Coffee Colombia Excelso Grains - 500G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07170cb\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"96\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9917\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9917\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9917\" data-product_sku=\"Caf\u00e9_GP_Colombie_BIO_500G_Grains\" aria-label=\"Add to cart: &ldquo;Coffee Colombia Excelso Grains - 500G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Coffee Colombia Excelso Grains - 500G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9917\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9919 post-9919 product type-product status-publish has-post-thumbnail product_cat-coffee first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2198.png\" class=\"attachment-full size-full wp-image-10424 lazyload\" alt=\"Caf\u00e9 Colombie Excelso Moulu - 250G - BIO\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2198.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2198-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2198-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/2198-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Colombian Coffee Excelso Ground &#8211; 250G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">6,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b071c33c\">\n            Colombian Coffee Excelso Ground - 250G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b071c33c\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"206\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9919\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9919\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9919\" data-product_sku=\"Caf\u00e9_GP_Colombie_BIO_250G_Moulu\" aria-label=\"Add to cart: &ldquo;Colombian Coffee Excelso Ground - 250G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Colombian Coffee Excelso Ground - 250G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9919\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9924 post-9924 product type-product status-publish has-post-thumbnail product_cat-christmas product_cat-offres-du-moment-en  instock sale taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1727.png\" class=\"attachment-full size-full wp-image-8641 lazyload\" alt=\"paques\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1727.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1727-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1727-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/1727-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Sachet Milk Chocolate Assortment &#8211; 150G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><del aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">5,40&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/del> <span class=\"screen-reader-text\">Original price was: 5,40&nbsp;&euro;.<\/span><ins aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">3,56&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/ins><span class=\"screen-reader-text\">Current price is: 3,56&nbsp;&euro;.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0721446\">\n            Sachet Milk Chocolate Assortment - 150G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0721446\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"302\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9924\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9924\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9924\" data-product_sku=\"Sachet-Assortiment-Fritures-150G\" aria-label=\"Add to cart: &ldquo;Sachet Milk Chocolate Assortment - 150G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Sachet Milk Chocolate Assortment - 150G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9924\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9943 post-9943 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"420\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-ECLATSDEFEVESCACAO-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23904 lazyload\" alt=\"Tablette Noir \u00c9clats de F\u00e8ves - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-ECLATSDEFEVESCACAO-10ANS-RECTO-BD.png 420w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-ECLATSDEFEVESCACAO-10ANS-RECTO-BD-163x300.png 163w\" data-sizes=\"(max-width: 420px) 100vw, 420px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 420px; --smush-placeholder-aspect-ratio: 420\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark cocoa bean nibs<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b072647b\">\n            Dark cocoa bean nibs quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b072647b\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"454\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9943\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9943\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9943\" data-product_sku=\"TAB_NOIR_ECLATS_FEVES_CACAO\" aria-label=\"Add to cart: &ldquo;Dark cocoa bean nibs&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark cocoa bean nibs&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9943\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9946 post-9946 product type-product status-publish has-post-thumbnail product_cat-chocolate last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"1000\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond.png\" class=\"attachment-full size-full wp-image-22047 lazyload\" alt=\"Sachet de Pistoles Noir 75% - 180G - Sans Fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond.png 1000w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir75-grain-de-sail-sans-fond-100x100.png 100w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/1000;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bag of 180 g chocolate pistoles &#8211; 75% cocoa &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">4,90&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b072b6bb\">\n            Bag of 180 g chocolate pistoles - 75% cocoa - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b072b6bb\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"100\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9946\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9946\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9946\" data-product_sku=\"PISTOLES_75%_180G\" aria-label=\"Add to cart: &ldquo;Bag of 180 g chocolate pistoles - 75% cocoa - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Bag of 180 g chocolate pistoles - 75% cocoa - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9946\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9948 post-9948 product type-product status-publish has-post-thumbnail product_cat-chocolate first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"1000\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond.png\" class=\"attachment-full size-full wp-image-22049 lazyload\" alt=\"Sachet de Pistoles Noir 62% - 180G - Sans Fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond.png 1000w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/pistoles-chocolat-noir-62-grain-de-sail-sans-fond-100x100.png 100w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/1000;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">180 g bag of chocolate pistoles &#8211; 62% cocoa &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">4,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07306b5\">\n            180 g bag of chocolate pistoles - 62% cocoa - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07306b5\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"439\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9948\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9948\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9948\" data-product_sku=\"PISTOLES_62%_180G\" aria-label=\"Add to cart: &ldquo;180 g bag of chocolate pistoles - 62% cocoa - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;180 g bag of chocolate pistoles - 62% cocoa - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9948\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9951 post-9951 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"416\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-CARAMEL-FLEURDESEL-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23940 lazyload\" alt=\"Tablette Noir Caramel - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-CARAMEL-FLEURDESEL-10ANS-RECTO-BD.png 416w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-CARAMEL-FLEURDESEL-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 416px) 100vw, 416px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 416px; --smush-placeholder-aspect-ratio: 416\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar, Caramel and Fleur de sel &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07356e1\">\n            Dark chocolate bar, Caramel and Fleur de sel - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07356e1\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"283\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9951\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9951\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9951\" data-product_sku=\"TAB_NOIR_CARAMEL_FDS\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar, Caramel and Fleur de sel - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar, Caramel and Fleur de sel - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9951\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9953 post-9953 product type-product status-publish has-post-thumbnail product_cat-christmas  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"600\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/tablette-de-chocolat-au-lait-pralin-100g-bio.png\" class=\"attachment-full size-full wp-image-10363 lazyload\" alt=\"Tablette de chocolat au lait Pralin - Paques - Avant de la tablette\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/tablette-de-chocolat-au-lait-pralin-100g-bio.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/tablette-de-chocolat-au-lait-pralin-100g-bio-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/tablette-de-chocolat-au-lait-pralin-100g-bio-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/tablette-de-chocolat-au-lait-pralin-100g-bio-100x100.png 100w\" data-sizes=\"(max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/600;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Pralin milk chocolate bar &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,65&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b073a6f8\">\n            Pralin milk chocolate bar - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b073a6f8\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"134\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9953\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9953\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9953\" data-product_sku=\"tab-choc-lait-pralin\" aria-label=\"Add to cart: &ldquo;Pralin milk chocolate bar - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Pralin milk chocolate bar - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9953\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9957 post-9957 product type-product status-publish has-post-thumbnail product_cat-chocolate last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"422\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-FRAMBOISE-PRALIN-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23908 lazyload\" alt=\"Tablette Noir Framboise Pralin - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-FRAMBOISE-PRALIN-10ANS-RECTO-BD.png 422w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-FRAMBOISE-PRALIN-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 422px) 100vw, 422px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 422px; --smush-placeholder-aspect-ratio: 422\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Raspberry and Praline Dark Chocolate Bar &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,65&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b073f609\">\n            Raspberry and Praline Dark Chocolate Bar - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b073f609\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"451\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9957\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9957\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9957\" data-product_sku=\"TAB_NOIR_FRAMBOISE_PRALIN\" aria-label=\"Add to cart: &ldquo;Raspberry and Praline Dark Chocolate Bar - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Raspberry and Praline Dark Chocolate Bar - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9957\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9964 post-9964 product type-product status-publish has-post-thumbnail product_cat-offres-du-moment-en first instock sale taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1000\" height=\"1000\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond.png\" class=\"attachment-full size-full wp-image-24492 lazyload\" alt=\"Sachet de Noisettes caram\u00e9lis\u00e9es enrob\u00e9es 180G - Sans fond\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond.png 1000w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond-300x300.png 300w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond-150x150.png 150w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond-768x768.png 768w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond-600x600.png 600w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/sachet-noisettes-caramelisees-sans-fond-100x100.png 100w\" data-sizes=\"(max-width: 1000px) 100vw, 1000px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1000px; --smush-placeholder-aspect-ratio: 1000\/1000;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Coated roasted hazelnuts &#8211; Milk chocolate &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><del aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">5,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/del> <span class=\"screen-reader-text\">Original price was: 5,00&nbsp;&euro;.<\/span><ins aria-hidden=\"true\"><span class=\"woocommerce-Price-amount amount\">3,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/ins><span class=\"screen-reader-text\">Current price is: 3,50&nbsp;&euro;.<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0748929\">\n            Coated roasted hazelnuts - Milk chocolate - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0748929\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"27\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9964\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9964\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9964\" data-product_sku=\"noisette lait - Bio\" aria-label=\"Add to cart: &ldquo;Coated roasted hazelnuts - Milk chocolate - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Coated roasted hazelnuts - Milk chocolate - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9964\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9965 post-9965 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"423\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-THE-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23912 lazyload\" alt=\"Tablette Noir Th\u00e9 Earl Grey  - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-THE-10ANS-RECTO-BD.png 423w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-THE-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 423px) 100vw, 423px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 423px; --smush-placeholder-aspect-ratio: 423\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar with Earl Grey Tea &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b074da5e\">\n            Dark chocolate bar with Earl Grey Tea - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b074da5e\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"14\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9965\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9965\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9965\" data-product_sku=\"TAB_NOIR_THE_EARL_GREY\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar with Earl Grey Tea - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar with Earl Grey Tea - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9965\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9967 post-9967 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"408\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CACAHUETES-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23916 lazyload\" alt=\"Tablette Lait Cacahu\u00e8tes Caramel - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CACAHUETES-10ANS-RECTO-BD.png 408w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CACAHUETES-10ANS-RECTO-BD-158x300.png 158w\" data-sizes=\"(max-width: 408px) 100vw, 408px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 408px; --smush-placeholder-aspect-ratio: 408\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with peanuts, caramel and fleur de sel &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,60&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0752e7d\">\n            Milk chocolate bar with peanuts, caramel and fleur de sel - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0752e7d\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"408\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9967\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9967\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9967\" data-product_sku=\"TAB_LAIT_CACAHUETES\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with peanuts, caramel and fleur de sel - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with peanuts, caramel and fleur de sel - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9967\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9968 post-9968 product type-product status-publish has-post-thumbnail product_cat-chocolate last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"415\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-NOISETTES-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23926 lazyload\" alt=\"Tablette Lait Noisettes - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-NOISETTES-10ANS-RECTO-BD.png 415w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-NOISETTES-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 415px) 100vw, 415px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 415px; --smush-placeholder-aspect-ratio: 415\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with roasted hazelnuts &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,65&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b075816a\">\n            Milk chocolate bar with roasted hazelnuts - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b075816a\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"378\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9968\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9968\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9968\" data-product_sku=\"TAB_LAIT_NOISETTES\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with roasted hazelnuts - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with roasted hazelnuts - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9968\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9970 post-9970 product type-product status-publish has-post-thumbnail product_cat-chocolate first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"424\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-RAISIN-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23934 lazyload\" alt=\"Tablette Noir Raisins Sarrasin - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-RAISIN-10ANS-RECTO-BD.png 424w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-RAISIN-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 424px) 100vw, 424px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 424px; --smush-placeholder-aspect-ratio: 424\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar with raisins and roasted buckwheat &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b075db13\">\n            Dark chocolate bar with raisins and roasted buckwheat - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b075db13\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"21\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9970\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9970\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9970\" data-product_sku=\"TAB_NOIR_RAISINS_SARRASIN\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar with raisins and roasted buckwheat - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar with raisins and roasted buckwheat - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9970\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9972 post-9972 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"416\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-85-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23930 lazyload\" alt=\"Tablette Noir 85% - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-85-10ANS-RECTO-BD.png 416w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-85-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 416px) 100vw, 416px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 416px; --smush-placeholder-aspect-ratio: 416\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar 85% cocoa &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,60&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0762b41\">\n            Dark chocolate bar 85% cocoa - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0762b41\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"423\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9972\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9972\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9972\" data-product_sku=\"TAB_NOIR_85\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar 85% cocoa - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar 85% cocoa - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9972\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9974 post-9974 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"416\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CARAMEL-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23920 lazyload\" alt=\"Tablette Lait Caramel - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CARAMEL-10ANS-RECTO-BD.png 416w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CARAMEL-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 416px) 100vw, 416px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 416px; --smush-placeholder-aspect-ratio: 416\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with caramel and fleur de sel &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,60&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0767705\">\n            Milk chocolate bar with caramel and fleur de sel - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0767705\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"43\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9974\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9974\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9974\" data-product_sku=\"TAB_LAIT_CARAMEL_FDS\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with caramel and fleur de sel - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with caramel and fleur de sel - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9974\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9976 post-9976 product type-product status-publish has-post-thumbnail product_cat-chocolate last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"422\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-NOISETTES-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23932 lazyload\" alt=\"Tablette Noir Noisettes - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-NOISETTES-10ANS-RECTO-BD.png 422w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-NOISETTES-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 422px) 100vw, 422px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 422px; --smush-placeholder-aspect-ratio: 422\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar with roasted hazelnuts &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b076c257\">\n            Dark chocolate bar with roasted hazelnuts - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b076c257\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"359\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9976\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9976\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9976\" data-product_sku=\"TAB_NOIR_NOISETTES\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar with roasted hazelnuts - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar with roasted hazelnuts - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9976\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9969 post-9969 product type-product status-publish has-post-thumbnail product_cat-chocolate first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"429\" height=\"787\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/Capture-decran-2025-12-23-a-16.14.05.png\" class=\"attachment-full size-full wp-image-26738 lazyload\" alt=\"\u00c9dition limit\u00e9e Noir Fleur de Sel 10 ans - Peintre Jonathan Florent\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/Capture-decran-2025-12-23-a-16.14.05.png 429w, https:\/\/graindesail.com\/wp-content\/uploads\/2025\/02\/Capture-decran-2025-12-23-a-16.14.05-164x300.png 164w\" data-sizes=\"(max-width: 429px) 100vw, 429px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 429px; --smush-placeholder-aspect-ratio: 429\/787;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar with fleur de sel &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0770e31\">\n            Dark chocolate bar with fleur de sel - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0770e31\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"1164\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9969\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9969\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9969\" data-product_sku=\"TAB_NOIR_FDS\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar with fleur de sel - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar with fleur de sel - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9969\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9971 post-9971 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"415\" height=\"775\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-COCO-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23922 lazyload\" alt=\"Tablette Lait Coco - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-COCO-10ANS-RECTO-BD.png 415w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-COCO-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 415px) 100vw, 415px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 415px; --smush-placeholder-aspect-ratio: 415\/775;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with toasted coconut &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07758c0\">\n            Milk chocolate bar with toasted coconut - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07758c0\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"179\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9971\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9971\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9971\" data-product_sku=\"TAB_LAIT_COCO\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with toasted coconut - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with toasted coconut - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9971\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9973 post-9973 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"408\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT55-10ANS-GDS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23914 lazyload\" alt=\"Tablette Lait 55%  - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT55-10ANS-GDS-RECTO-BD.png 408w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT55-10ANS-GDS-RECTO-BD-158x300.png 158w\" data-sizes=\"(max-width: 408px) 100vw, 408px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 408px; --smush-placeholder-aspect-ratio: 408\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with intense cocoa 55% &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,65&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b077a380\">\n            Milk chocolate bar with intense cocoa 55% - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b077a380\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"207\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9973\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9973\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9973\" data-product_sku=\"TAB_LAIT_INTENSE\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with intense cocoa 55% - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with intense cocoa 55% - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9973\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9975 post-9975 product type-product status-publish has-post-thumbnail product_cat-chocolate last instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"423\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR62-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23936 lazyload\" alt=\"Tablette Noir 62% - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR62-10ANS-RECTO-BD.png 423w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR62-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 423px) 100vw, 423px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 423px; --smush-placeholder-aspect-ratio: 423\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar 62% cocoa &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,50&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b077ee48\">\n            Dark chocolate bar 62% cocoa - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b077ee48\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"424\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9975\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9975\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9975\" data-product_sku=\"TAB_NOIR_62\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar 62% cocoa - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar 62% cocoa - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9975\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9977 post-9977 product type-product status-publish has-post-thumbnail product_cat-chocolate first instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"414\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CAFE-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23918 lazyload\" alt=\"Tablette Lait Caf\u00e9 - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CAFE-10ANS-RECTO-BD.png 414w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-CAFE-10ANS-RECTO-BD-160x300.png 160w\" data-sizes=\"(max-width: 414px) 100vw, 414px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 414px; --smush-placeholder-aspect-ratio: 414\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk and coffee chocolate bar &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07838f9\">\n            Milk and coffee chocolate bar - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07838f9\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"417\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9977\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9977\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9977\" data-product_sku=\"TAB_LAIT_CAFE\" aria-label=\"Add to cart: &ldquo;Milk and coffee chocolate bar - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk and coffee chocolate bar - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9977\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9979 post-9979 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"421\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-SESAME-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23910 lazyload\" alt=\"Tablette Noir S\u00e9same - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-SESAME-10ANS-RECTO-BD.png 421w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-SESAME-10ANS-RECTO-BD-163x300.png 163w\" data-sizes=\"(max-width: 421px) 100vw, 421px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 421px; --smush-placeholder-aspect-ratio: 421\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar with roasted sesame &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b07883df\">\n            Dark chocolate bar with roasted sesame - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b07883df\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"279\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9979\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9979\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9979\" data-product_sku=\"TAB_NOIR_SESAME\" aria-label=\"Add to cart: &ldquo;Dark chocolate bar with roasted sesame - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Dark chocolate bar with roasted sesame - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9979\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9982 post-9982 product type-product status-publish has-post-thumbnail product_cat-chocolate  instock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"416\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-FLEURDESEL-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23924 lazyload\" alt=\"Tablette Lait Fleur de Sel - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-FLEURDESEL-10ANS-RECTO-BD.png 416w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-LAIT-FLEURDESEL-10ANS-RECTO-BD-161x300.png 161w\" data-sizes=\"(max-width: 416px) 100vw, 416px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 416px; --smush-placeholder-aspect-ratio: 416\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Milk chocolate bar with fleur de sel &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,60&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\"><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"\/><\/svg> In stock<\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b078ce60\">\n            Milk chocolate bar with fleur de sel - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b078ce60\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"1203\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"?add-to-cart=9982\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9982\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"9982\" data-product_sku=\"TAB_LAIT_FDS\" aria-label=\"Add to cart: &ldquo;Milk chocolate bar with fleur de sel - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"&ldquo;Milk chocolate bar with fleur de sel - 100G - ORGANIC&rdquo; has been added to your cart\">Add to cart<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9982\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"15047\" class=\"elementor elementor-15047 elementor-15038 elementor-15038 e-loop-item e-loop-item-9983 post-9983 product type-product status-publish has-post-thumbnail product_cat-chocolate last outofstock taxable shipping-taxable purchasable product-type-simple\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9e1c566 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"9e1c566\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-07cb087\" data-id=\"07cb087\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4d8507a elementor-widget elementor-widget-image\" data-id=\"4d8507a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"422\" height=\"774\" data-src=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-75-10ANS-RECTO-BD.png\" class=\"attachment-full size-full wp-image-23928 lazyload\" alt=\"Tablette Noir 75% - Bandeau 10 ans\" data-srcset=\"https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-75-10ANS-RECTO-BD.png 422w, https:\/\/graindesail.com\/wp-content\/uploads\/2026\/02\/GDS-NOIR-75-10ANS-RECTO-BD-164x300.png 164w\" data-sizes=\"(max-width: 422px) 100vw, 422px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 422px; --smush-placeholder-aspect-ratio: 422\/774;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-fcf2dd6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"fcf2dd6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-0a08ab7\" data-id=\"0a08ab7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2fe45fb elementor-widget elementor-widget-heading\" data-id=\"2fe45fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dark chocolate bar 75% cocoa &#8211; 100G &#8211; ORGANIC<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b84187 elementor-widget elementor-widget-heading\" data-id=\"1b84187\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"woocommerce-Price-amount amount\">3,55&nbsp;<span class=\"woocommerce-Price-currencySymbol\">&euro;<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-023b0c6 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"023b0c6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-bcff654\" data-id=\"bcff654\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b50b6c1 elementor-widget__width-auto elementor-widget elementor-widget-shortcode\" data-id=\"b50b6c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span class=\"product-stock \"><svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-ban\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"><\/path><\/svg><\/span>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5e656 elementor-add-to-cart--align-left elementor-widget__width-auto e-add-to-cart--show-quantity-yes elementor-widget elementor-widget-woocommerce-product-add-to-cart\" data-id=\"ba5e656\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-product-add-to-cart.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-add-to-cart elementor-product-simple\">\n\t\t\t\t\t<div class=\"e-loop-add-to-cart-form-container\">\n\t\t\t<form class=\"cart e-loop-add-to-cart-form\">\n\t\t\t\t\n    <div class=\"quantity\">\n        \n        <label class=\"screen-reader-text\" for=\"quantity_69eb2b0791a05\">\n            Dark chocolate bar 75% cocoa - 100G - ORGANIC quantity        <\/label>\n\n        <div class=\"custom-qty-wrapper\">\n            <!-- Input Field in its own div -->\n            <div class=\"qty-input-wrap\">\n                <input\n                        type=\"number\"\n                                                id=\"quantity_69eb2b0791a05\"\n                        class=\"qty input-text qty text\"\n                        name=\"quantity\"\n                        value=\"1\"\n                        aria-label=\"Product quantity\"\n                        min=\"1\"\n                        max=\"\"\n                                                    step=\"1\"\n                            placeholder=\"\"\n                            inputmode=\"numeric\"\n                            autocomplete=\"off\"\n                                        \/>\n            <\/div>\n\n            <!-- Plus and Minus Buttons in their own div -->\n                            <div class=\"qty-btns-wrap\">\n                    <button type=\"button\" class=\"qty-btn-plus\" data-qty-action=\"increase\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                    <button type=\"button\" class=\"qty-btn-minus\" data-qty-action=\"decrease\">\n                        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#232323\">\n                            <path d=\"M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z\"><\/path>\n                        <\/svg>\n                    <\/button>\n                <\/div>\n                    <\/div>\n\n            <\/div>\n\n    <script>\n        jQuery(document).ready(function($) {\n            'use strict';\n\n            console.log('=== QUANTITY INPUT SCRIPT LOADED ===');\n\n            var updateTimer;\n            var isProcessing = false;\n\n            \/\/ Remove any existing handlers that might conflict\n            $(document).off('.qtyCustom');\n            $('body').off('.qtyCustom');\n\n            function updateCart() {\n                console.log('updateCart() called!');\n                console.log('Current URL:', window.location.href);\n                console.log('Contains cart?', window.location.href.includes('cart'));\n                console.log('isProcessing?', isProcessing);\n\n                if (!window.location.href.includes('cart') || isProcessing) {\n                    console.log('Update skipped - not on cart page or already processing');\n                    return;\n                }\n\n                console.log('=== UPDATING CART ===');\n                isProcessing = true;\n\n                clearTimeout(updateTimer);\n                updateTimer = setTimeout(function() {\n                    \/\/ Method 1: Try to find and click update button\n                    var $updateBtn = $('button[name=\"update_cart\"], input[name=\"update_cart\"], .button[name=\"update_cart\"]');\n                    console.log('Found update buttons:', $updateBtn.length);\n\n                    if ($updateBtn.length) {\n                        console.log('Clicking update button...');\n                        $updateBtn.prop('disabled', false);\n                        $updateBtn[0].click(); \/\/ Use native click instead of jQuery\n                    } else {\n                        \/\/ Method 2: Try to submit the cart form\n                        console.log('No update button found, trying form submission...');\n                        var $cartForm = $('.woocommerce-cart-form, form.woocommerce-cart-form');\n                        console.log('Found cart forms:', $cartForm.length);\n\n                        if ($cartForm.length) {\n                            console.log('Submitting cart form...');\n                            $cartForm[0].submit(); \/\/ Native submit\n                        } else {\n                            \/\/ Method 3: Trigger WooCommerce cart update events\n                            console.log('No form found, triggering WC events...');\n                            $(document.body).trigger('wc_update_cart');\n                            $('body').trigger('update_checkout');\n\n                            \/\/ \/\/ Method 4: Last resort - page refresh\n                            \/\/ setTimeout(function() {\n                            \/\/     console.log('All methods failed, refreshing page...');\n                            \/\/     window.location.reload();\n                            \/\/ }, 3000);\n                        }\n                    }\n\n                    setTimeout(function() {\n                        isProcessing = false;\n                    }, 2000);\n                }, 100); \/\/ Reduced delay for faster response\n            }\n\n            \/\/ Single, clean event handler\n            $(document).on('click.qtyCustom', '[data-qty-action]', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                e.stopImmediatePropagation();\n\n                var $button = $(this);\n                var action = $button.attr('data-qty-action');\n                var $input = $button.closest('.custom-qty-wrapper').find('input.qty');\n\n                if (!$input.length) {\n                    console.log('No input found!');\n                    return false;\n                }\n\n                var currentVal = parseInt($input.val()) || 0;\n                var min = parseInt($input.attr('min')) || 0;\n                var max = parseInt($input.attr('max')) || 999999;\n                var newVal = currentVal;\n\n                console.log('=== BUTTON CLICKED ===');\n                console.log('Action:', action);\n                console.log('Current value:', currentVal);\n                console.log('Min:', min, 'Max:', max);\n\n                if (action === 'increase' && currentVal < max) {\n                    newVal = currentVal + 1;\n                } else if (action === 'decrease' && currentVal > min) {\n                    newVal = currentVal - 1;\n                }\n\n                if (newVal !== currentVal) {\n                    console.log('Changing from', currentVal, 'to', newVal);\n                    $input.val(newVal);\n\n                    \/\/ Trigger change event to notify WooCommerce\n                    $input.trigger('change');\n                    $input.trigger('input'); \/\/ Some themes listen to input event\n\n                    \/\/ Wait a bit then update cart\n                    console.log('About to call updateCart in 50ms...');\n                    setTimeout(function() {\n                        console.log('setTimeout executed, calling updateCart...');\n                        updateCart();\n                    }, 50);\n                } else {\n                    console.log('No change - limits reached');\n                }\n\n                return false;\n            });\n\n            \/\/ Handle direct input changes (manual typing)\n            $(document).on('change.qtyCustom', 'input.qty', function(e) {\n                if (!$(this).data('button-changed')) {\n                    console.log('=== INPUT CHANGED MANUALLY ===');\n                    updateCart();\n                }\n                $(this).removeData('button-changed');\n            });\n\n            \/\/ Rebind after cart updates\n            $(document.body).on('updated_wc_div updated_cart_totals', function() {\n                console.log('=== CART UPDATED - EVENTS STILL ACTIVE ===');\n                \/\/ Les \u00e9v\u00e9nements sont d\u00e9j\u00e0 bind\u00e9s sur document, pas besoin de rebind\n            });\n\n            \/\/ Test function\n            setTimeout(function() {\n                var $buttons = $('[data-qty-action]');\n                console.log('=== FOUND', $buttons.length, 'QUANTITY BUTTONS ===');\n            }, 500);\n        });\n    <\/script>\n\n    <style>\n        .custom-qty-wrapper {\n            display: flex;\n            align-items: stretch;\n            justify-content: flex-start;\n        }\n\n        .qty-btns-wrap {\n            flex: 0;\n            display: flex;\n            flex-direction: column;\n        }\n\n        .qty-input-wrap input,\n        .e-loop-add-to-cart-form .qty-input-wrap input,\n        .cart .qty-input-wrap input {\n            color: #232323 !important;\n            min-width: 3rem !important;\n            min-height: 100% !important;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-radius: 0 !important;\n            padding: .175rem .5rem !important;\n            font-family: \"Poppins\", Sans-serif !important;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus, .qty-btn-minus,\n        .e-loop-add-to-cart-form .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-minus {\n            padding: 0 3px;\n            display: flex;\n            border: 1px solid rgb(0, 0, 0, 1) !important;\n            border-left: 0px !important;\n            align-items: center;\n            justify-content: center;\n            border-radius: 0px !important;\n            transition: background-color 0.2s ease;\n            cursor: pointer;\n            background: white !important;\n            min-height: 24px;\n            min-width: 24px;\n            box-sizing: border-box !important;\n        }\n\n        .qty-btn-plus,\n        .e-loop-add-to-cart-form .qty-btn-plus {\n            border-bottom: 0px !important;\n        }\n\n        .qty-btn-plus svg, .qty-btn-minus svg,\n        .e-loop-add-to-cart-form .qty-btn-plus svg,\n        .e-loop-add-to-cart-form .qty-btn-minus svg {\n            width: 15px;\n            max-height: 19px;\n            pointer-events: none;\n        }\n\n        .qty-btn-plus:hover, .qty-btn-minus:hover,\n        .e-loop-add-to-cart-form .qty-btn-plus:hover,\n        .e-loop-add-to-cart-form .qty-btn-minus:hover {\n            background: #f1f1f1 !important;\n        }\n\n        .qty-btn-plus:active, .qty-btn-minus:active,\n        .e-loop-add-to-cart-form .qty-btn-plus:active,\n        .e-loop-add-to-cart-form .qty-btn-minus:active {\n            background: #e0e0e0 !important;\n        }\n\n        \/* Hide number input spinner for all browsers *\/\n        .qty.input-text.qty.text,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text {\n            -moz-appearance: textfield;\n        }\n\n        .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .qty.input-text.qty.text::-webkit-inner-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-outer-spin-button,\n        .e-loop-add-to-cart-form .qty.input-text.qty.text::-webkit-inner-spin-button {\n            -webkit-appearance: none;\n            margin: 0;\n        }\n\n        input.qty:focus,\n        .e-loop-add-to-cart-form input.qty:focus {\n            outline: none;\n            box-shadow: none;\n        }\n\n        input.qty,\n        .e-loop-add-to-cart-form input.qty {\n            outline: none;\n            box-shadow: none;\n        }\n    <\/style>\n\n<a href=\"https:\/\/graindesail.com\/en\/produit\/dark-chocolate-bar-75-cocoa-100g-organic\/\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_9983\" data-quantity=\"1\" class=\"button product_type_simple\" data-product_id=\"9983\" data-product_sku=\"TAB_NOIR_75\" aria-label=\"Read more about &ldquo;Dark chocolate bar 75% cocoa - 100G - ORGANIC&rdquo;\" rel=\"nofollow\" data-success_message=\"\">Read more<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_9983\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n\t\t\t<\/form>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-59cde78 elementor-section-full_width elementor-section-height-min-height filter_div elementor-hidden-desktop elementor-section-height-default\" data-id=\"59cde78\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-459f79f\" data-id=\"459f79f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-84c5393 elementor-widget-mobile__width-auto close_filter_div elementor-widget elementor-widget-jet-smart-filters-apply-button\" data-id=\"84c5393\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-apply-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-apply-button jet-filter\"><div class=\"apply-filters\"  data-content-provider=\"epro-loop-builder\" data-query-id=\"product_grid\" data-additional-providers=\"\" data-apply-type=\"ajax\" data-redirect=\"\">\n\t<button\n\t\ttype=\"button\"\n\t\tclass=\"apply-filters__button\"\n\t\t\t\t\t>Ok<\/button>\n<\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6353334 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"6353334\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-e610cc0\" data-id=\"e610cc0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-15f4752 label_1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"15f4752\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-c945467\" data-id=\"c945467\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d1edf41 elementor-widget elementor-widget-heading\" data-id=\"d1edf41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Type of coffee<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-6703ecf filter_1 elementor-widget elementor-widget-jet-smart-filters-checkboxes\" data-id=\"6703ecf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-checkboxes.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-checkboxes jet-filter jet-filter-indexed\" data-indexer-rule=\"show\" data-show-counter=\"yes\" data-change-counter=\"other_changed\"><div class=\"jet-checkboxes-list\" data-query-type=\"meta_query\" data-query-var=\"_stock_status\" data-smart-filter=\"checkboxes\" data-filter-id=\"10000\" data-apply-type=\"ajax\" data-content-provider=\"epro-loop-builder\" data-additional-providers=\"\" data-query-id=\"product_grid\" data-active-label=\"\" data-layout-options=\"{&quot;show_label&quot;:&quot;&quot;,&quot;display_options&quot;:{&quot;show_items_label&quot;:false,&quot;show_decorator&quot;:&quot;yes&quot;,&quot;filter_image_size&quot;:&quot;full&quot;,&quot;show_counter&quot;:&quot;yes&quot;,&quot;counter_prefix&quot;:&quot;(&quot;,&quot;counter_suffix&quot;:&quot;)&quot;}}\" data-query-var-suffix=\"\" data-apply-on=\"submit\"><fieldset class=\"jet-checkboxes-list-wrapper\"><legend style=\"display:none;\">Availability<\/legend><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"_stock_status\"\n\t\t\tvalue=\"instock\"\n\t\t\tdata-label=\"In stock\"\n\t\t\taria-label=\"In stock\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">In stock<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"_stock_status\"\n\t\t\tvalue=\"outofstock\"\n\t\t\tdata-label=\"Not available\"\n\t\t\taria-label=\"Not available\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Not available<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/fieldset><\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ffdb19b elementor-widget elementor-widget-jet-smart-filters-checkboxes\" data-id=\"ffdb19b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-smart-filters-checkboxes.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"jet-smart-filters-checkboxes jet-filter jet-filter-indexed\" data-indexer-rule=\"show\" data-show-counter=\"yes\" data-change-counter=\"other_changed\"><div class=\"jet-filter-label\">Type de chocolat<\/div>\n<div class=\"jet-checkboxes-list\" data-query-type=\"tax_query\" data-query-var=\"product_cat\" data-smart-filter=\"checkboxes\" data-filter-id=\"15116\" data-apply-type=\"ajax\" data-content-provider=\"epro-loop-builder\" data-additional-providers=\"\" data-query-id=\"product_grid\" data-active-label=\"\" data-layout-options=\"{&quot;show_label&quot;:true,&quot;display_options&quot;:{&quot;show_items_label&quot;:false,&quot;show_decorator&quot;:&quot;yes&quot;,&quot;filter_image_size&quot;:&quot;full&quot;,&quot;show_counter&quot;:&quot;yes&quot;,&quot;counter_prefix&quot;:&quot;(&quot;,&quot;counter_suffix&quot;:&quot;)&quot;}}\" data-query-var-suffix=\"\" data-apply-on=\"value\"><fieldset class=\"jet-checkboxes-list-wrapper\"><legend style=\"display:none;\">Type de chocolat<\/legend><div class=\"jet-list-tree\"><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"266\"\n\t\t\tdata-label=\"Accessories\"\n\t\t\taria-label=\"Accessories\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Accessories<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row jet-list-tree__parent\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"267\"\n\t\t\tdata-label=\"Coffee\"\n\t\t\taria-label=\"Coffee\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Coffee<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class='jet-list-tree__children'>\n<div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"268\"\n\t\t\tdata-label=\"Our specialty coffees\"\n\t\t\taria-label=\"Our specialty coffees\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Our specialty coffees<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"269\"\n\t\t\tdata-label=\"General public coffee\"\n\t\t\taria-label=\"General public coffee\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">General public coffee<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/div>\n<div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"270\"\n\t\t\tdata-label=\"Chocolate\"\n\t\t\taria-label=\"Chocolate\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Chocolate<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"271\"\n\t\t\tdata-label=\"Boxes\"\n\t\t\taria-label=\"Boxes\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Boxes<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"260\"\n\t\t\tdata-label=\"Non cat\u00e9goris\u00e9\"\n\t\t\taria-label=\"Non cat\u00e9goris\u00e9\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Non cat\u00e9goris\u00e9<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"273\"\n\t\t\tdata-label=\"Our festive products\"\n\t\t\taria-label=\"Our festive products\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Our festive products<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"274\"\n\t\t\tdata-label=\"Offres du moment\"\n\t\t\taria-label=\"Offres du moment\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Offres du moment<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><div class=\"jet-checkboxes-list__row jet-filter-row\">\n\t\t<label class=\"jet-checkboxes-list__item\" >\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\tclass=\"jet-checkboxes-list__input\"\n\t\t\tname=\"product_cat\"\n\t\t\tvalue=\"278\"\n\t\t\tdata-label=\"Christmas\"\n\t\t\taria-label=\"Christmas\"\n\t\t\t\t\t>\n\t\t<div class=\"jet-checkboxes-list__button\">\n\t\t\t\t\t\t\t<span class=\"jet-checkboxes-list__decorator\">\n\t\t\t\t\t<i class=\"jet-checkboxes-list__checked-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n\t<path d=\"M26.109 8.844c0 0.391-0.156 0.781-0.438 1.062l-13.438 13.438c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-7.781-7.781c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.609 10.25-10.266c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062z\"><\/path>\n<\/svg>\n<\/i>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t<span class=\"jet-checkboxes-list__label\">Christmas<\/span>\n\t\t\t<span class=\"jet-filters-counter\"><span class=\"counter-prefix\">(<\/span><span class=\"value\">0<\/span><span class=\"counter-suffix\">)<\/span><\/span>\t\t<\/div>\n\t<\/label>\n<\/div><\/div><\/fieldset><\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-3734270 elementor-widget elementor-widget-html\" data-id=\"3734270\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>jQuery(document).ready(function($) {\n    \/\/ Show .filter_div and hide .show_filter button\n    $('.show_filter').on('click', function() {\n        $('.filter_div').show();\n        $(this).hide(); \/\/ hide the button itself\n    });\n\n    \/\/ Hide .filter_div and show .show_filter button\n    $('.close_filter_div').on('click', function() {\n        $('.filter_div').hide();\n        $('.show_filter').show(); \/\/ show the button again\n    });\n});\n\n\n\njQuery(document).ready(function($) {\n    $('.label_1').on('click', function() {\n        $('.filter_1').slideToggle(); \/\/ Accordion effect\n    });\n});\n\n\njQuery(document).ready(function($) {\n    $('.label_2').on('click', function() {\n        $('.filter_2').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_3').on('click', function() {\n        $('.filter_3').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_4').on('click', function() {\n        $('.filter_4').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_5').on('click', function() {\n        $('.filter_5').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_6').on('click', function() {\n        $('.filter_6').slideToggle(); \/\/ Accordion effect\n    });\n});\n\n\njQuery(document).ready(function($) {\n    $('.label_7').on('click', function() {\n        $('.filter_7').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_8').on('click', function() {\n        $('.filter_8').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_9').on('click', function() {\n        $('.filter_9').slideToggle(); \/\/ Accordion effect\n    });\n});\n\njQuery(document).ready(function($) {\n    $('.label_10').on('click', function() {\n        $('.filter_10').slideToggle(); \/\/ Accordion effect\n    });\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/main>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Filter by Effacer tout Disponibilit\u00e9 Disponibilit\u00e9 En stock (0) Non disponible (0) type de produit type de produit Accessoires (0) Caf\u00e9 (0) Caf\u00e9 de sp\u00e9cialit\u00e9 (0) Caf\u00e9 grand public (0) Chocolat (0) Coffrets (0) Non class\u00e9 (0) Offres du moment (0) Sort by : RelevanceBestsellersName, A to ZName, Z to APrice, croissantPrice, descending Filter Ok [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-15120","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Quick order - GDS<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/graindesail.com\/en\/quick-order\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quick order - GDS\" \/>\n<meta property=\"og:description\" content=\"Filter by Effacer tout Disponibilit\u00e9 Disponibilit\u00e9 En stock (0) Non disponible (0) type de produit type de produit Accessoires (0) Caf\u00e9 (0) Caf\u00e9 de sp\u00e9cialit\u00e9 (0) Caf\u00e9 grand public (0) Chocolat (0) Coffrets (0) Non class\u00e9 (0) Offres du moment (0) Sort by : RelevanceBestsellersName, A to ZName, Z to APrice, croissantPrice, descending Filter Ok [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/graindesail.com\/en\/quick-order\/\" \/>\n<meta property=\"og:site_name\" content=\"GDS\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-31T00:47:07+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/graindesail.com\/en\/quick-order\/\",\"url\":\"https:\/\/graindesail.com\/en\/quick-order\/\",\"name\":\"Quick order - GDS\",\"isPartOf\":{\"@id\":\"https:\/\/graindesail.com\/en\/#website\"},\"datePublished\":\"2025-08-29T19:19:51+00:00\",\"dateModified\":\"2025-08-31T00:47:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/graindesail.com\/en\/quick-order\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/graindesail.com\/en\/quick-order\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/graindesail.com\/en\/quick-order\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/graindesail.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quick order\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/graindesail.com\/en\/#website\",\"url\":\"https:\/\/graindesail.com\/en\/\",\"name\":\"GDS\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/graindesail.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/graindesail.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/graindesail.com\/en\/#organization\",\"name\":\"GDS\",\"url\":\"https:\/\/graindesail.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/graindesail.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/graindesail.com\/wp-content\/uploads\/2024\/12\/logo.svg\",\"contentUrl\":\"https:\/\/graindesail.com\/wp-content\/uploads\/2024\/12\/logo.svg\",\"width\":82,\"height\":130,\"caption\":\"GDS\"},\"image\":{\"@id\":\"https:\/\/graindesail.com\/en\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Quick order - GDS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/graindesail.com\/en\/quick-order\/","og_locale":"en_US","og_type":"article","og_title":"Quick order - GDS","og_description":"Filter by Effacer tout Disponibilit\u00e9 Disponibilit\u00e9 En stock (0) Non disponible (0) type de produit type de produit Accessoires (0) Caf\u00e9 (0) Caf\u00e9 de sp\u00e9cialit\u00e9 (0) Caf\u00e9 grand public (0) Chocolat (0) Coffrets (0) Non class\u00e9 (0) Offres du moment (0) Sort by : RelevanceBestsellersName, A to ZName, Z to APrice, croissantPrice, descending Filter Ok [&hellip;]","og_url":"https:\/\/graindesail.com\/en\/quick-order\/","og_site_name":"GDS","article_modified_time":"2025-08-31T00:47:07+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/graindesail.com\/en\/quick-order\/","url":"https:\/\/graindesail.com\/en\/quick-order\/","name":"Quick order - GDS","isPartOf":{"@id":"https:\/\/graindesail.com\/en\/#website"},"datePublished":"2025-08-29T19:19:51+00:00","dateModified":"2025-08-31T00:47:07+00:00","breadcrumb":{"@id":"https:\/\/graindesail.com\/en\/quick-order\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/graindesail.com\/en\/quick-order\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/graindesail.com\/en\/quick-order\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/graindesail.com\/en\/"},{"@type":"ListItem","position":2,"name":"Quick order"}]},{"@type":"WebSite","@id":"https:\/\/graindesail.com\/en\/#website","url":"https:\/\/graindesail.com\/en\/","name":"GDS","description":"","publisher":{"@id":"https:\/\/graindesail.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/graindesail.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/graindesail.com\/en\/#organization","name":"GDS","url":"https:\/\/graindesail.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/graindesail.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/graindesail.com\/wp-content\/uploads\/2024\/12\/logo.svg","contentUrl":"https:\/\/graindesail.com\/wp-content\/uploads\/2024\/12\/logo.svg","width":82,"height":130,"caption":"GDS"},"image":{"@id":"https:\/\/graindesail.com\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/pages\/15120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/comments?post=15120"}],"version-history":[{"count":0,"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/pages\/15120\/revisions"}],"wp:attachment":[{"href":"https:\/\/graindesail.com\/en\/wp-json\/wp\/v2\/media?parent=15120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}