horace.com
Open in
urlscan Pro
2606:4700:20::681a:295
Public Scan
URL:
https://horace.com/
Submission: On July 24 via manual from JP — Scanned from JP
Submission: On July 24 via manual from JP — Scanned from JP
Form analysis
29 forms found in the DOMPOST https://horace.com/fr/sociallogin/account/loginPost/
<form style="display:none;" class="form" action="https://horace.com/fr/sociallogin/account/loginPost/" method="post" id="sociallogin-login-form">
<input id="sociallogin-login-referer" name="refress-redirect-url" type="hidden" value="">
<input id="sociallogin-login-submit" type="submit" value="">
</form>
POST #
<form id="form-gift-newsletter-mobile" @submit.prevent="submitData" :class="{ 'border border-gray-12' : displayForm }" action="#" method="POST" class="border border-gray-12">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp">
<div :class="{ 'hidden' : !displayForm, 'flex' : displayForm }" class="flex">
<div class="w-full">
<input x-model="formData.email" type="email" value="" name="email" id="email_gift-newsletter-mobile" placeholder="monsieursympa@sympa.fr" required="" autocomplete="off">
</div>
<div class="flex">
<button type="submit" class="btn" x-html="buttonLabel"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 100 100" class="fill-current stroke-current text-white">
<path
d="M17.9,51.3l14.7,14.6c0.3,0.3,0.7,0.4,1.1,0.4c0.4,0,0.8-0.1,1.1-0.4c0.6-0.6,0.6-1.5,0-2.1L22.3,51.5h59 c0.8,0,1.5-0.7,1.5-1.5s-0.7-1.5-1.5-1.5H22.3l12.5-12.2c0.6-0.6,0.6-1.5,0-2.1c-0.6-0.6-1.5-0.6-2.1,0L16.5,49.9l0.9,0.9 C17.5,51,17.7,51.2,17.9,51.3z"
transform="translate(100, 100) rotate(180) "></path>
</svg></button>
</div>
</div>
<div class="message-text mt-2" x-transition="" x-show="!displayForm" x-html="message" style="display: none;"></div>
<template x-if="errorMessages.length > 0 && !displayForm">
<div>
<template x-for="errorMessage in errorMessages">
<div class="message-text font-semibold text-sm mt-2" x-html="errorMessage"></div>
</template>
</div>
</template>
</form>
POST #
<form @submit.prevent="submitData" id="form-popover-discount" class="mt-3 w-full" action="#" method="POST">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp">
<div :class="{ 'hidden' : !displayForm }">
<p class="font-bold mb-2">Inscription newsletter</p>
<p class="mb-2">Offre de bienvenue : <span class="text-secondary">10% de réduction</span> sur votre prochaine commande !</p>
<div class="mb-2">
<label for="email-address" class="sr-only">Email address</label>
<input x-model="formData.email" name="email" type="email" autocomplete="off" class="block w-full text-sm border-gray-1 placeholder-gray-8" placeholder="monsieursympa@sympa.fr" required="required">
</div>
<button type="submit" x-html="buttonLabel" class="btn btn-secondary w-full flex justify-center uppercase tracking-semi-wider">Valider </button>
</div>
<div class="message-text" x-html="message"></div>
<template x-if="errorMessages.length > 0">
<div class="message-text">
<template x-for="errorMessage in errorMessages">
<span x-html="errorMessage"></span>
</template>
</div>
</template>
</form>
POST #
<form action="#" method="POST">
<div x-on:mouseleave="displayList = false;">
<label for="country">
<span class="icon--sprite language mr-2"></span>
<span class="text-base font-normal text-gray-5 align-text-top"> Livraison </span>
</label>
<div class="relative">
<div @click="displayList = true;" class="absolute inset-0 w-full h-full opacity-0 z-10 cursor-pointer"></div>
<div id="loader-language-switch" class="loader-popover hidden" :class="{'flex': loading === true, 'hidden': loading === false}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg>
</div>
<select id="country" name="country" autocomplete="country" class="text-m block w-full border-gray-2 z-0">
<option value="BE"> Belgique (€) </option>
<option selected="selected" value="FR"> France (€) </option>
<option value="MC"> Monaco (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=DE" value="DE"> Germany (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=ES" value="ES"> Spain (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=IE" value="IE"> Ireland (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=LU" value="LU"> Luxembourg (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=NL" value="NL"> Netherlands (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en_fr/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuX2ZyLw%2C%2C?switchCountry=CH" value="CH"> Switzerland (€) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/en/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL2VuLw%2C%2C?switchCountry=GB" value="GB"> United Kingdom (£) </option>
<option data-url="https://horace.com/fr/stores/store/redirect/___store/us/___from_store/fr/uenc/aHR0cHM6Ly9ob3JhY2UuY29tL3VzLw%2C%2C?switchCountry=US" value="US"> United States ($) </option>
</select>
</div>
<div x-show="displayList" id="country-selector" class="flex flex-col relative w-full" style="display: none;">
<div class="absolute shadow bg-white top-0 z-40 w-full h-48 lef-0 rounded-b-lg overflow-y-auto">
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="BE" @click="changeCountry('BE')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'BE' }"> Belgique (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="FR" @click="changeCountry('FR')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2 font-semibold border-primary" :class="{'font-semibold border-primary': selectedCountry === 'FR' }"> France (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="DE" @click="changeCountry('DE')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'DE' }"> Germany (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="IE" @click="changeCountry('IE')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'IE' }"> Ireland (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="LU" @click="changeCountry('LU')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'LU' }"> Luxembourg (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="MC" @click="changeCountry('MC')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'MC' }"> Monaco (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="NL" @click="changeCountry('NL')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'NL' }"> Netherlands (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="ES" @click="changeCountry('ES')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'ES' }"> Spain (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="CH" @click="changeCountry('CH')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'CH' }"> Switzerland (€) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="GB" @click="changeCountry('GB')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'GB' }"> United Kingdom (£) </div>
</div>
<div class="selector-option cursor-pointer w-full lg:hover:text-secondary" data-country="US" @click="changeCountry('US')">
<div class="w-full text-left border-transparent border-l-2 relative px-3 py-2" :class="{'font-semibold border-primary': selectedCountry === 'US' }"> United States ($) </div>
</div>
</div>
</div>
</div>
</form>
GET https://horace.com/fr/catalogsearch/result/
<form id="search_mini_form" action="https://horace.com/fr/catalogsearch/result/" method="get">
<div id="algolia-searchbox" class="mb-4">
<input id="search" x-ref="searchInput" x-data="initAlgoliaAutoComplete()" @click="load()" @focus="load()" type="text" name="q" class="input-text algolia-search-input bordeless bordeless--primary" autocomplete="off" spellcheck="false"
autocorrect="off" autocapitalize="off" placeholder="Chercher">
<span class="clear-cross clear-query-autocomplete"></span>
</div>
</form>
POST #
<form action="#" method="post" class="form-updateitem--cart-drawer mr-auto" :data-form-updateitem="item.item_id">
<div class="flex">
<template x-if="!item.is_subscription">
<a class="change-item-qty py-1 pr-2 text-sm cursor-pointer" @click="updateItemFromCart($event, item.item_id)" :data-newquantity="item.qty - 1" :data-itemid="item.item_id">-</a>
</template>
<div class="py-1 px-2">
<input type="number" name="qty" :data-id="item.item_id" maxlength="12" :value="item.qty" title="Quantité" class="input-text qty" style="display:none">
<span class="qty--form-updateitem" x-html="item.qty"></span>
<span class="loader--form-updateitem">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin mx-2">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg>
</span>
</div>
<template x-if="!item.is_subscription">
<a class="change-item-qty py-1 pl-2 text-sm cursor-pointer" :data-oldqty="item.qty" :data-newquantity="item.qty + 1" @click="updateItemFromCart($event, item.item_id)" :data-itemid="item.item_id">+</a>
</template>
</div>
</form>
POST
<form method="post" :id="'add_to_cart_form_step_product_' + stepProduct.id" class="item product product-item product_addtocart_form">
<input type="hidden" name="form_key" :value="hyva.getFormKey()">
<input type="hidden" name="product" :value="stepProduct.id">
<input type="hidden" name="isAjax" value="true">
<input type="hidden" name="stepId" :value="step.id">
<template x-if="stepProduct.product_options && stepProduct.product_options.length">
<div>
<template x-for="option in stepProduct.product_options" :key="option">
<input type="hidden" :id="option.id" :name="option.name" :form="option.form" :class="option.class" :value="option.value" checked="checked" :data-option-id="option.data_option_id" :data-selection-id="option.data_selection_id"
:x-ref="option.x_ref">
</template>
</div>
</template>
<div class="item-upsell-product">
<p class="description-offer-stepcart" x-show="!stepProduct.used" x-html="step.minimum_amount_text"></p>
<template x-if="stepProduct.url_key">
<a :href="stepProduct.url_key" :title="stepProduct.name">
<img :src="stepProduct.product_image.src" :width="stepProduct.product_image.width" :height="stepProduct.product_image.height" :title="stepProduct.product_image.alt" class="image-item--cart-drawer" loading="lazy">
</a>
</template>
<template x-if="!stepProduct.url_key">
<img :src="stepProduct.product_image.src" :width="stepProduct.product_image.width" :height="stepProduct.product_image.height" :title="stepProduct.product_image.alt" class="image-item--cart-drawer" loading="lazy">
</template>
<div class="container-item-upsell-product">
<template x-if="stepProduct.url_key">
<p class="mt-2 mb-auto leading-4">
<a class="font-semibold hover:underline hover:text-secondary" :class="{'text-sm lg:text-xs': stepProduct.used, 'text-xs': !stepProduct.used}" :href="stepProduct.url_key" :title="stepProduct.name" x-html="stepProduct.name"></a>
</p>
</template>
<template x-if="!stepProduct.url_key">
<p class="mt-2 mb-auto leading-4 font-semibold text-xs" x-html="stepProduct.name"></p>
</template>
<template x-if="stepProduct.price > 0">
<p class="text-xs mt-1 mb-2" x-show="!stepProduct.used" x-html="stepProduct.actual_value"></p>
</template>
<button x-show="!stepProduct.used" :disabled="!displayUpsellProducts(step)" type="submit" @click.prevent="addToCartStepProduct(stepProduct.id)" :data-addtocartstepproduct-productid="stepProduct.id"
class="btn addtocart-list-upsells-cart-drawer font-bold mt-2 lg:mt-0" :class="{'btn-outline-secondary': displayUpsellProducts(step),
'invisible': !displayUpsellProducts(step)}"> Je prends </button>
<button x-show="stepProduct.used" @click.prevent="deleteItemFromCart(stepProduct.item_id)" class="text-left text-xs text-secondary hover:underline font-semibold flex mt-2"> Je change de cadeau </button>
</div>
</div>
</form>
POST #
<form method="post" enctype="multipart/form-data" @submit.prevent="setStepProductNullOnStep(step.id, hyva.getFormKey())" action="#" :id="'not_add_to_cart_form_step_product_' + step.id">
<input type="hidden" name="form_key" :value="hyva.getFormKey()">
<input type="hidden" name="stepId" :value="step.id">
<button x-show="!step.used" :disabled="step.minimum_amount > cart.prices.subtotal_including_tax.value" type="submit" class="font-bold text-sm" :class="{'text-secondary underline': step.minimum_amount <= cart.prices.subtotal_including_tax.value,
'text-gray-29 cursor-auto': step.minimum_amount > cart.prices.subtotal_including_tax.value}"> Je ne souhaite pas recevoir de cadeau </button>
<div x-show="step.used">
<p class="text-sm font-semibold">Je ne souhaite pas recevoir de cadeau</p>
<button @click.prevent="unsetStepProductNullOnStep(step.id, hyva.getFormKey())" class="text-xs text-secondary underline font-semibold"> Je change de cadeau </button>
</div>
</form>
POST
<form method="post" :id="'add_to_cart_form_gift_product_' + product.id" class="item product product-item product_addtocart_form">
<input type="hidden" name="form_key" :value="hyva.getFormKey()">
<input type="hidden" name="product" :value="product.id">
<input type="hidden" name="isAjax" value="true">
<template x-if="product.options_product.length">
<div>
<template x-for="option in product.options_product" :key="option">
<input type="hidden" :id="option.id" :name="option.name" :form="option.form" :class="option.class" :value="option.value" checked="checked" :data-option-id="option.data_option_id" :data-selection-id="option.data_selection_id"
:x-ref="option.x_ref">
</template>
</div>
</template>
<div class="single-gifted-product enabled">
<img width="50" height="50" loading="lazy" :src="product.image" :alt="product.name">
<div class="gift-product-infos ml-3">
<template x-if="product.url_key">
<p class="text-sm mb-1">
<a class="hover:text-secondary hover:underline" :href="product.url_key" :title="product.name" x-text="product.name"></a>
</p>
</template>
<template x-if="!product.url_key">
<p class="text-sm mb-1" x-text="product.name"></p>
</template>
<button :disabled="cart.horace_giftproduct.minimum_amount > cart.subtotalAmount" type="submit" @click.prevent="addToCartGiftProduct(product.id)" :data-addtocartgiftproduct-productid="product.id" class="btn addtocart-list-upsells-cart-drawer"
:class="{'btn-outline-secondary': cart.horace_giftproduct.minimum_amount <= cart.subtotalAmount,
'text-gray-29 border-gray-29 cursor-auto': cart.horace_giftproduct.minimum_amount > cart.subtotalAmount}">
<span class="addtocart-loader mx-14" x-show="giftProductLoading">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg>
</span>
<span class="addtocart-content font-semibold" x-show="!giftProductLoading"> Ajouter gratuitement </span>
</button>
</div>
</div>
</form>
POST
<form method="post" :id="'add_to_cart_cart_drawer_product_' + product.id" class="item product product-item product_addtocart_form w-full" :class="{'product_addtocart_form--half': cart.horace_giftpack.products.length > 1}">
<input type="hidden" name="form_key" :value="hyva.getFormKey()">
<input type="hidden" name="product" :value="product.id">
<input type="hidden" name="isAjax" value="true">
<div class="flex items-center">
<img :width="product.product_image.width" :height="product.product_image.height" loading="lazy" :src="product.product_image.src" :alt="product.name">
<div class="ml-3 w-full">
<p class="text-sm mb-1">
<template x-if="product.url_key">
<a class="hover:text-secondary hover:underline" :href="product.url_key" :title="product.name" x-text="product.name"></a>
</template>
<template x-if="!product.url_key">
<span x-text="product.name"></span>
</template>
</p>
<button type="submit" @click.prevent="addToCartCartDrawer($event, product.id, false)" :data-price="product.price" :form="'add_to_cart_cart_drawer_product_' + product.id"
class="btn addtocart-list-upsells-cart-drawer btn-outline-secondary max-w-290px" aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold">Ajouter</span>
<span class="mx-1">-</span>
<span x-html="product.price_currency"></span>
</span>
</button>
</div>
</div>
</form>
POST #
<form x-on:submit.prevent="dispatchCouponMutationRequest();" id="discount-coupon-form-apply" class="w-full pt-4" action="#" method="POST">
<div class="form--group-input">
<input class="border-gray-16 bg-white w-full" id="coupon_code_drawer" name="coupon_code" placeholder="Code Promo" required="" value="">
<button type="submit" class="btn btn-outline-secondary border-gray-16">
<span x-show="!couponRequestLoading">Valider </span>
<span x-show="couponRequestLoading">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg> </span>
</button>
</div>
<template x-for="message in couponMessage">
<div x-html="message" class="text-xs text-invalid mt-2"></div>
</template>
</form>
POST #
<form x-on:submit.prevent="applyPoints();" id="credits-form-apply" action="#" method="post" x-show="formCredits">
<div class="flex cursor-pointer mb-2" @click="hideFormCredits">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" class="stroke-current text-primary mr-2" width="20" height="20">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"></path>
</svg>
<span class="text-sm">
<span x-text="customer.available_points.balance > 0 ? getApplicablePoints() : 0"></span> crédit(s) utilisable(s) (<span x-text="customer.available_points.balance > 0 ? getApplicablePointsValue() : 0"></span>) </span>
</div>
<div class="form--group-input">
<input pattern="[0-9]*" id="points_amount" name="points_amount" class="border-gray-16 bg-white w-full" placeholder="Mes crédits">
<button type="submit" class="btn btn-outline-secondary border-gray-16 validate-form-coupon-code">
<span x-show="!creditsLoading"> Valider </span>
<span x-show="creditsLoading">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg> </span>
</button>
</div>
<div class="text-xm mt-1">
<p class="text-gray-18"> Ajoutez un nombre de crédits dans la limite du montant de votre panier </p>
<p class="mt-2"> Votre solde : <span x-text="customer.available_points ? customer.available_points.balance : 0"></span>
</p>
</div>
<div id="ajax-loader-credit" class="ajax-loader-item">
<i class="hico hico-spinner"></i>
</div>
</form>
POST https://horace.com/fr/customer/account/loginPost
<form method="post" action="https://horace.com/fr/customer/account/loginPost" id="login-form-sidecart" @submit.prevent="submitForm()">
<p class="already-customer hrc_text--primary leading-5 text-center mb-3"> Se connecter </p>
<div class="form-list">
<div class="form-group">
<input name="login[email]" type="email" placeholder="Adresse email " value="" id="email_account-sidecart" required="" title="Adresse email ">
</div>
<div class="form-group">
<input id="password-login-form-sidecart" type="password" name="login[password]" placeholder="Mot de passe" required="" title="Mot de passe" autocomplete="off">
</div>
<button type="submit" id="button_login_account-sidecart" class="btn btn-primary uppercase tracking-widest-l mb-4" title="Connexion" name="send" autocomplete="off">
<span x-show="!isLoading">Connexion</span>
<span x-show="isLoading"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg></span>
</button>
<div class="form-group text-center mt-2 mb-4">
<a id="link-forgot-password-sidecart" class="cursor-pointer hover:underline hover:text-secondary" @click.prevent="forgotPassword()" href="https://horace.com/fr/customer/account/forgotpassword" title="Mot de passe oublié ?">
Mot de passe oublié ? </a>
</div>
<div class="form-group mt-4">
<div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton">
<div class="mx-0 mb-4 m-auto box-border clear-both max-w-screen-xl w-auto">
<div class="sociallogin-buttons" x-ref="loginSocialButton">
<ul class="sociallogin-clearfix">
<li class="block mt-0 ml-0 mb-2 p-0 relative leading-normal list-none sociallogin-button
facebook" title="Login with Facebook">
<button type="button" class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" rel="nofollow" href="javascript:void(0);"
data-href="https://www.facebook.com/dialog/oauth?client_id=1637102479904064&redirect_uri=https://horace.com/fr/sociallogin/account/login/type/facebook/&response_type=code&display=popup&scope=email" data-width="650"
data-height="350" x-ref="facebook" @click="popupSocial($refs.facebook)">
<span class="sociallogin-button-auto">
<span class="icon--sprite facebook-white mr-3"></span>
<span class="sociallogin-button-text">Se connecter avec Facebook</span>
</span>
</button>
</li>
<li class="block mt-0 ml-0 mb-2 p-0 relative leading-normal list-none sociallogin-button
googleplus" title="Login with Google">
<button type="button" class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" rel="nofollow" href="javascript:void(0);"
data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fhorace.com%2Ffr%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=1040921723385-tppfcp7nrsr5ifca22jffgn5hc7c9f61.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto"
data-width="630" data-height="650" x-ref="googleplus" @click="popupSocial($refs.googleplus)">
<span class="sociallogin-button-auto">
<span class="icon--sprite googleplus-white mr-3"></span>
<span class="sociallogin-button-text">Se connecter avec Google</span>
</span>
</button>
</li>
</ul>
</div>
</div>
<div style="clear: both;"></div>
</div>
<script>
function bssButtonSocial() {
return {
renderShowmore: function(element) {
var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li");
for (let i = 0; i <= socialButton.length - 1; i++) {
socialButton[i].style.display = 'block';
}
element.querySelector('.sociallogin-showmore').style.display = 'none';
},
popupSocial: function(element) {
var href = element.getAttribute('data-href');
var width = element.getAttribute('data-width');
var height = element.getAttribute('data-height');
var popup_window = null;
if (!width) {
width = 650;
}
if (!height) {
height = 350;
}
var left = parseInt((window.innerWidth - width) / 2);
var top = parseInt((window.innerHeight - height) / 2);
var params = ['resizable=yes', 'scrollbars=no', 'toolbar=no', 'menubar=no', 'location=no', 'directories=no', 'status=yes', 'width=' + width, 'height=' + height, 'left=' + left, 'top=' + top];
if (popup_window) {
popup_window.close();
}
if (href) {
popup_window = window.open(href, '', params.join(','));
popup_window.focus();
} else {
alert('This Login Application was not configured correctly. Please contact our customer support.');
}
return false;
}
}
}
</script>
</div>
</div>
</form>
POST https://horace.com/fr/customer/account/forgotpassword/
<form method="post" action="https://horace.com/fr/customer/account/forgotpassword/" id="forgotpass-form-sidecart" @submit.prevent="submitForgotPasswordForm()">
<p class="already-customer hrc_text--primary leading-5 text-center mb-3"> Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. </p>
<template x-if="resetErrorMessages">
<div class="error-messages">
<template x-for="errorMessage in resetErrorMessages">
<p x-html="errorMessage"></p>
</template>
</div>
</template>
<div class="form-list">
<div class="form-group">
<input name="login[email]" type="email" placeholder="Adresse email " value="" id="email_account-reset-sidecart" required="" title="Adresse email ">
</div>
<button type="submit" class="btn btn-primary uppercase tracking-widest-l mb-4" title="Connexion" name="send">
<span x-show="!isLoading">Valider </span>
<span x-show="isLoading"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg></span>
</button>
</div>
</form>
POST https://horace.com/fr/customer/account/loginPost
<form method="post" action="https://horace.com/fr/customer/account/loginPost" id="login-form-sidecart" @submit.prevent="submitForm()">
<p class="already-customer hrc_text--primary leading-5 text-center mb-3"> Se connecter </p>
<div class="form-list">
<div class="form-group">
<input name="login[email]" type="email" placeholder="Adresse email " value="" id="email_account-sidecart" required="" title="Adresse email ">
</div>
<div class="form-group">
<input id="password-login-form-sidecart" type="password" name="login[password]" placeholder="Mot de passe" required="" title="Mot de passe" autocomplete="off">
</div>
<button type="submit" id="button_login_account-sidecart" class="btn btn-primary uppercase tracking-widest-l mb-4" title="Connexion" name="send" autocomplete="off">
<span x-show="!isLoading">Connexion</span>
<span x-show="isLoading" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg></span>
</button>
<div class="form-group text-center mt-2 mb-4">
<a id="link-forgot-password-sidecart" class="cursor-pointer hover:underline hover:text-secondary" @click.prevent="forgotPassword()" href="https://horace.com/fr/customer/account/forgotpassword" title="Mot de passe oublié ?">
Mot de passe oublié ? </a>
</div>
<div class="form-group mt-4">
<div id="add_button_login_byclass" x-data="bssButtonSocial()" x-ref="registerSocialButton">
<div class="mx-0 mb-4 m-auto box-border clear-both max-w-screen-xl w-auto">
<div class="sociallogin-buttons" x-ref="loginSocialButton">
<ul class="sociallogin-clearfix">
<li class="block mt-0 ml-0 mb-2 p-0 relative leading-normal list-none sociallogin-button
facebook" title="Login with Facebook">
<button type="button" class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" rel="nofollow" href="javascript:void(0);"
data-href="https://www.facebook.com/dialog/oauth?client_id=1637102479904064&redirect_uri=https://horace.com/fr/sociallogin/account/login/type/facebook/&response_type=code&display=popup&scope=email" data-width="650"
data-height="350" x-ref="facebook" @click="popupSocial($refs.facebook)">
<span class="sociallogin-button-auto">
<span class="icon--sprite facebook-white mr-3"></span>
<span class="sociallogin-button-text">Se connecter avec Facebook</span>
</span>
</button>
</li>
<li class="block mt-0 ml-0 mb-2 p-0 relative leading-normal list-none sociallogin-button
googleplus" title="Login with Google">
<button type="button" class="sociallogin-button-link sociallogin-button-click" id="sociallogin-button-click" rel="nofollow" href="javascript:void(0);"
data-href="https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=https%3A%2F%2Fhorace.com%2Ffr%2Fsociallogin%2Faccount%2Flogin%2Ftype%2Fgoogleplus%2F&client_id=1040921723385-tppfcp7nrsr5ifca22jffgn5hc7c9f61.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&state=&access_type=offline&approval_prompt=auto"
data-width="630" data-height="650" x-ref="googleplus" @click="popupSocial($refs.googleplus)">
<span class="sociallogin-button-auto">
<span class="icon--sprite googleplus-white mr-3"></span>
<span class="sociallogin-button-text">Se connecter avec Google</span>
</span>
</button>
</li>
</ul>
</div>
</div>
<div style="clear: both;"></div>
</div>
<script>
function bssButtonSocial() {
return {
renderShowmore: function(element) {
var socialButton = element.querySelector('.sociallogin-clearfix').getElementsByTagName("li");
for (let i = 0; i <= socialButton.length - 1; i++) {
socialButton[i].style.display = 'block';
}
element.querySelector('.sociallogin-showmore').style.display = 'none';
},
popupSocial: function(element) {
var href = element.getAttribute('data-href');
var width = element.getAttribute('data-width');
var height = element.getAttribute('data-height');
var popup_window = null;
if (!width) {
width = 650;
}
if (!height) {
height = 350;
}
var left = parseInt((window.innerWidth - width) / 2);
var top = parseInt((window.innerHeight - height) / 2);
var params = ['resizable=yes', 'scrollbars=no', 'toolbar=no', 'menubar=no', 'location=no', 'directories=no', 'status=yes', 'width=' + width, 'height=' + height, 'left=' + left, 'top=' + top];
if (popup_window) {
popup_window.close();
}
if (href) {
popup_window = window.open(href, '', params.join(','));
popup_window.focus();
} else {
alert('This Login Application was not configured correctly. Please contact our customer support.');
}
return false;
}
}
}
</script>
</div>
</div>
</form>
POST https://horace.com/fr/customer/account/forgotpassword/
<form method="post" action="https://horace.com/fr/customer/account/forgotpassword/" id="forgotpass-form-sidecart" @submit.prevent="submitForgotPasswordForm()">
<p class="already-customer hrc_text--primary leading-5 text-center mb-3"> Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. </p>
<template x-if="resetErrorMessages">
<div class="error-messages">
<template x-for="errorMessage in resetErrorMessages">
<p x-html="errorMessage"></p>
</template>
</div>
</template>
<div class="form-list">
<div class="form-group">
<input name="login[email]" type="email" placeholder="Adresse email " value="" id="email_account-reset-sidecart" required="" title="Adresse email ">
</div>
<button type="submit" class="btn btn-primary uppercase tracking-widest-l mb-4" title="Connexion" name="send">
<span x-show="!isLoading">Valider </span>
<span x-show="isLoading"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg></span>
</button>
</div>
</form>
POST https://horace.com/fr/customer/account/forgotpassword/
<form method="post" action="https://horace.com/fr/customer/account/forgotpassword/" id="forgotpass-form-sidecart" @submit.prevent="submitForgotPasswordForm()">
<p class="already-customer hrc_text--primary leading-5 text-center mb-3"> Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. </p>
<template x-if="resetErrorMessages">
<div class="error-messages">
<template x-for="errorMessage in resetErrorMessages">
<p x-html="errorMessage"></p>
</template>
</div>
</template>
<div class="error-messages">
<template x-for="errorMessage in resetErrorMessages">
<p x-html="errorMessage"></p>
</template>
</div>
<div class="form-list">
<div class="form-group">
<input name="login[email]" type="email" placeholder="Adresse email " value="" id="email_account-reset-sidecart" required="" title="Adresse email ">
</div>
<button type="submit" class="btn btn-primary uppercase tracking-widest-l mb-4" title="Connexion" name="send">
<span x-show="!isLoading">Valider </span>
<span x-show="isLoading" style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg></span>
</button>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/448/
<form method="post" id="add_to_cart_form_products_slide_448" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/448/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="448" data-name="Hydratant Visage Matifiant SPF30" data-category="Peau terne" data-price="19.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="448">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
</div>
<a href="https://horace.com/fr/product/hydratant-visage-matifiant-spf" title="Hydratant Visage Matifiant SPF30" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-448 variant-product-content-448 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Hydratant Visage Matifiant SPF30" title="Hydratant Visage Matifiant SPF30" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/p/a/packshot660x660_spf30_new.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Hydratant Visage Matifiant SPF30" href="https://horace.com/fr/product/hydratant-visage-matifiant-spf" class="variant-product-content variant-default-product-content-448 variant-product-content-448">
Hydratant Visage Matifiant SPF30 </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:90%"></div>
</div>
<a href="https://horace.com/fr/product/hydratant-visage-matifiant-spf#tabbed-content" class="count-review-product">
957 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/hydratant-visage-matifiant-spf">
<div class="text-gray-8 text-benefice">
Hydrate et protège<br> des rayons UV </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart448() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(448);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_448';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart448()" @click.prevent="addToCart(448);" data-objectid="448" data-addtocart-productid="448" data-price="19" form="add_to_cart_form_products_slide_448" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-448 variant-product-content-448 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">19 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/464/
<form method="post" id="add_to_cart_form_products_slide_464" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/464/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="464" data-name="& Horace - Eau de Parfum 100ml" data-category="Parfum" data-price="98.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="464">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
</div>
<div class="container--product-variant-switch">
<div class="btn--group-switch category">
<a href="https://horace.com/fr/product/eau-de-parfum-horace-100ml" class="btn btn--group-switch active switch-product-variant switch-product-default-variant-464 background-color-FRA_ALC_AND_100">
100ml </a>
</div>
</div>
<a href="https://horace.com/fr/product/eau-de-parfum-horace-100ml" title="& Horace - Eau de Parfum 100ml" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-464 variant-product-content-464 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="& Horace - Eau de Parfum 100ml" title="& Horace - Eau de Parfum 100ml" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/1/0/100ml_600x600_1_.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="& Horace - Eau de Parfum 100ml" href="https://horace.com/fr/product/eau-de-parfum-horace-100ml" class="variant-product-content variant-default-product-content-464 variant-product-content-464">
& Horace - Eau de Parfum 100ml </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:96%"></div>
</div>
<a href="https://horace.com/fr/product/eau-de-parfum-horace-100ml#tabbed-content" class="count-review-product">
1100 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/eau-de-parfum-horace-100ml">
<div class="text-gray-8 text-benefice">
Soyez qui vous êtes,<br>vraiment. </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart464() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(464);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_464';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart464()" @click.prevent="addToCart(464);" data-objectid="464" data-addtocart-productid="464" data-price="98" form="add_to_cart_form_products_slide_464" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-464 variant-product-content-464 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">98 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/366/
<form method="post" id="add_to_cart_form_products_slide_366" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/366/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="366" data-name="Masque Purifiant Visage " data-category="Visage" data-price="13.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="366">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--366 flex " href="https://horace.com/fr/product/masque-visage-purifiant">
<div class="label-product text-bestseller"><span>Bestseller</span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/masque-visage-purifiant">
<div class="text-gray-8 text-benefice">
Purifie et régule<br>le sébum </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/masque-visage-purifiant" title="Masque Purifiant Visage " class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-366 variant-product-content-366 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Masque Purifiant Visage " title="Masque Purifiant Visage " src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/h/o/horace_visage_masque-purifiant_packshot.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Masque Purifiant Visage " href="https://horace.com/fr/product/masque-visage-purifiant" class="variant-product-content variant-default-product-content-366 variant-product-content-366">
Masque Purifiant Visage </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:96%"></div>
</div>
<a href="https://horace.com/fr/product/masque-visage-purifiant#tabbed-content" class="count-review-product">
3305 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/masque-visage-purifiant">
<div class="text-gray-8 text-benefice">
Purifie et régule<br>le sébum </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart366() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(366);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_366';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart366()" @click.prevent="addToCart(366);" data-objectid="366" data-addtocart-productid="366" data-price="13" form="add_to_cart_form_products_slide_366" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-366 variant-product-content-366 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">13 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/319/
<form method="post" id="add_to_cart_form_products_slide_319" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/319/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="319" data-name="Shampoing pour Barbe" data-category="Rasage & Barbe" data-price="14.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="319">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--319 flex " href="https://horace.com/fr/product/shampoing-barbe">
<div class="label-product text-bestseller"><span>Bestseller</span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/shampoing-barbe">
<div class="text-gray-8 text-benefice">
Nettoie et <br>discipline le poil </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/shampoing-barbe" title="Shampoing pour Barbe" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-319 variant-product-content-319 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Shampoing pour Barbe" title="Shampoing pour Barbe" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/h/o/horace_barbe_shampoing-barbe_packshot_1.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Shampoing pour Barbe" href="https://horace.com/fr/product/shampoing-barbe" class="variant-product-content variant-default-product-content-319 variant-product-content-319">
Shampoing pour Barbe </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:98%"></div>
</div>
<a href="https://horace.com/fr/product/shampoing-barbe#tabbed-content" class="count-review-product">
1611 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/shampoing-barbe">
<div class="text-gray-8 text-benefice">
Nettoie et <br>discipline le poil </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart319() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(319);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_319';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart319()" @click.prevent="addToCart(319);" data-objectid="319" data-addtocart-productid="319" data-price="14" form="add_to_cart_form_products_slide_319" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-319 variant-product-content-319 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">14 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/541/
<form method="post" id="add_to_cart_form_products_slide_541" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/541/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="541" data-name="Gommage Visage Doux" data-category="Visage" data-price="13.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="541">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--541 flex " href="https://horace.com/fr/product/exfoliant-visage">
<div class="label-product text-bestseller"><span>Bestseller</span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/exfoliant-visage">
<div class="text-gray-8 text-benefice">
Élimine les peaux<br>mortes en douceur </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/exfoliant-visage" title="Gommage Visage Doux" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-541 variant-product-content-541 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Gommage Visage Doux" title="Gommage Visage Doux" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/p/a/packshot-600x600_1.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Gommage Visage Doux" href="https://horace.com/fr/product/exfoliant-visage" class="variant-product-content variant-default-product-content-541 variant-product-content-541">
Gommage Visage Doux </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:96%"></div>
</div>
<a href="https://horace.com/fr/product/exfoliant-visage#tabbed-content" class="count-review-product">
4537 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/exfoliant-visage">
<div class="text-gray-8 text-benefice">
Élimine les peaux<br>mortes en douceur </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart541() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(541);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_541';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart541()" @click.prevent="addToCart(541);" data-objectid="541" data-addtocart-productid="541" data-price="13" form="add_to_cart_form_products_slide_541" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-541 variant-product-content-541 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">13 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/318/
<form method="post" id="add_to_cart_form_products_slide_318" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/318/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="318" data-name="Huile pour Barbe Patchouli & Cèdre" data-category="Rasage & Barbe" data-price="13.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="318">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--318 flex " href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre">
<div class="label-product text-bestseller"><span>Bestseller</span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre">
<div class="text-gray-8 text-benefice">
Boisé et<br>aromatique </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre" title="Huile pour Barbe Patchouli & Cèdre" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-318 variant-product-content-318 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Huile pour Barbe Patchouli & Cèdre" title="Huile pour Barbe Patchouli & Cèdre" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/p/a/packshot_999x999_1_.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Huile pour Barbe Patchouli & Cèdre" href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre" class="variant-product-content variant-default-product-content-318 variant-product-content-318">
Huile pour Barbe Patchouli & Cèdre </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:94%"></div>
</div>
<a href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre#tabbed-content" class="count-review-product">
1694 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/huile-pour-barbe-patchouli-et-cedre">
<div class="text-gray-8 text-benefice">
Boisé et<br>aromatique </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart318() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(318);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_318';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart318()" @click.prevent="addToCart(318);" data-objectid="318" data-addtocart-productid="318" data-price="13" form="add_to_cart_form_products_slide_318" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-318 variant-product-content-318 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">13 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/326/
<form method="post" id="add_to_cart_form_products_slide_326" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/326/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="326" data-name="Shampoing Antipelliculaire Doux" data-category="Cheveux" data-price="13.0000">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="326">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
flex justify-between">
<a class="container--label-product-category label-product-category--326 hidden lg:flex " href="https://horace.com/fr/product/shampoing-antipelliculaire">
<div class="label-product text-bestseller"><span>Bestseller</span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/shampoing-antipelliculaire">
<div class="text-gray-8 text-benefice">
Élimine durablement<br>les pellicules </div>
</a>
</div>
<div class="container--award-product-category grooming-award">
<img class="w-full" loading="lazy" width="166" src="https://horace.com/static/version1689890119/frontend/Horace/hrc/fr_FR/images/category/2021_GQ_Grooming_Awards.png" alt="Grooming Awards">
</div>
</div>
<a href="https://horace.com/fr/product/shampoing-antipelliculaire" title="Shampoing Antipelliculaire Doux" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-326 variant-product-content-326 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Shampoing Antipelliculaire Doux" title="Shampoing Antipelliculaire Doux" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/h/o/horace_cheveux_shampoing-antipel_packshot.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Shampoing Antipelliculaire Doux" href="https://horace.com/fr/product/shampoing-antipelliculaire" class="variant-product-content variant-default-product-content-326 variant-product-content-326">
Shampoing Antipelliculaire Doux </a>
</p>
</div>
<div class="mb-1 container--review-product
category-product mt-1">
<div class="container--review-stars-empty stars-primary ">
<div class="container--review-stars-full" style="width:94%"></div>
</div>
<a href="https://horace.com/fr/product/shampoing-antipelliculaire#tabbed-content" class="count-review-product">
1165 avis </a>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/shampoing-antipelliculaire">
<div class="text-gray-8 text-benefice">
Élimine durablement<br>les pellicules </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart326() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(326);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_326';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart326()" @click.prevent="addToCart(326);" data-objectid="326" data-addtocart-productid="326" data-price="13" form="add_to_cart_form_products_slide_326" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-326 variant-product-content-326 " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="price">13 €</span> </span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/222/
<form method="post" id="add_to_cart_form_products_slide_222" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/222/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="222" data-name="L’Intégral Visage" data-category="Kits" data-price="0">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="222">
<input type="hidden" name="isAjax" value="true">
<input type="hidden" id="bundle-option-50-200" name="bundle_option[50]" form="add_to_cart_form_products_slide_222" class="bundle-option-50 product bundle option" value="200" checked="checked" data-option-id="50" data-selection-id="200"
x-ref="option-50">
<input type="hidden" id="bundle-option-49-199" name="bundle_option[49]" form="add_to_cart_form_products_slide_222" class="bundle-option-49 product bundle option" value="199" checked="checked" data-option-id="49" data-selection-id="199"
x-ref="option-49">
<input type="hidden" id="bundle-option-48-626" name="bundle_option[48]" form="add_to_cart_form_products_slide_222" class="bundle-option-48 product bundle option" value="626" checked="checked" data-option-id="48" data-selection-id="626"
x-ref="option-48">
<input type="hidden" id="bundle-option-88-693" name="bundle_option[88]" form="add_to_cart_form_products_slide_222" class="bundle-option-88 product bundle option" value="693" checked="checked" data-option-id="88" data-selection-id="693"
x-ref="option-88">
<input type="hidden" id="bundle-option-47-514" name="bundle_option[47]" form="add_to_cart_form_products_slide_222" class="bundle-option-47 product bundle option" value="514" checked="checked" data-option-id="47" data-selection-id="514"
x-ref="option-47">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--222 flex " href="https://horace.com/fr/product/kit-integral-visage">
<div class="label-product text-save"><span>Économisez <span class="price">12 €</span></span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/kit-integral-visage">
<div class="text-gray-8 text-benefice">
5 essentiels pour<br>prendre son temps </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/kit-integral-visage" title="L’Intégral Visage" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-222 variant-product-content-222 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="L’Intégral Visage" title="L’Intégral Visage" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/6/0/600x600_packshot_kit_integrale_ombre.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="L’Intégral Visage" href="https://horace.com/fr/product/kit-integral-visage" class="variant-product-content variant-default-product-content-222 variant-product-content-222">
L’Intégral Visage </a>
</p>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/kit-integral-visage">
<div class="text-gray-8 text-benefice">
5 essentiels pour<br>prendre son temps </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<script defer="" type="text/javascript">
// Detect if user come from search results
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.get('s')) {
var searchParams = sessionStorage.getItem('searchParams');
}
// Init add to cart
function initAddToCart222() {
return {
addToCartCb: function(productId) {
let $this = this;
window.dispatchEvent(new CustomEvent('validate-gc-form', {
detail: function() {
let productForm = document.querySelector('.product-add-form');
if (productForm.classList.contains('invalid')) {
return;
}
$this.addToCart(222);
}
}));
},
addToCart: function addToCart(productId) {
let postUrl = 'https://horace.com/fr/checkout/cart/add/';
let idForm;
idForm = 'add_to_cart_form_products_slide_222';
let form = document.getElementById(idForm);
let buttonAddToCart = document.querySelectorAll('[data-addtocart-productId="' + productId + '"]')[0];
let contentCartDrawer = document.querySelectorAll('.container--cart-drawer .content-cart-drawer')[0];
const data = new URLSearchParams(new FormData(form));
buttonAddToCart.classList.add('disabled:opacity-50');
buttonAddToCart.setAttribute('disabled', '');
contentCartDrawer.classList.add('is-loading');
fetch(postUrl, {
"headers": {
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
},
"body": data,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).then(function(response) {
if (response.redirected) {
window.location.href = response.url;
} else if (response.ok) {
// If user come from search
if (searchParams) {
searchParams = searchParams.split(',');
localStorage.setItem('ajs_search_' + productId, JSON.stringify(searchParams))
sessionStorage.removeItem('searchParams');
}
return response.json();
} else {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "warning",
text: "Could not add item to cart."
}], 5000);
}
}).then(function(response) {
if (!response) {
return
}
if (response.error_message) {
document.getElementById('cart-msg-error').innerHTML = response.error_message;
}
window.dispatchEvent(new CustomEvent('toggle-cart'));
var reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data");
window.dispatchEvent(reloadCustomerDataEvent);
}).catch(function(error) {
typeof window.dispatchMessages !== "undefined" && window.dispatchMessages(
[{
type: "error",
text: error
}], 5000);
}).finally(() => {
buttonAddToCart.classList.remove('disabled:opacity-50');
buttonAddToCart.removeAttribute('disabled');
setTimeout(() => {
contentCartDrawer.classList.remove('is-loading');
}, 1700);
setTimeout(() => {
document.getElementById('cart-msg-error').innerHTML = '';
}, 8000);
})
}
}
}
</script>
<button type="submit" x-data="initAddToCart222()" @click.prevent="addToCart(222);" data-objectid="222" data-addtocart-productid="222" data-price="61" form="add_to_cart_form_products_slide_222" class="btn addtocart-list btn-outline-primary variant-product-content
variant-default-product-content-222 variant-product-content-222 bundle-simple " aria-label="Ajouter au panier">
<span class="addtocart-content flex">
<span class="font-bold"> Ajouter </span>
<span class="mx-1">-</span>
<span class="pl-1">
<span class="flex">
<script type="text/javascript">
function initPrice222() {
return {
activeProductsPriceData: false,
initialFinalPrice: 0,
calculatedFinalPrice: false,
tierPrices: [],
qty: 1,
formatPrice(value, showSign) {
var currentSymbol = '€';
var formatter = new Intl.NumberFormat(document.documentElement.lang, {
style: 'currency',
currency: 'EUR',
signDisplay: showSign ? "always" : "auto",
minimumFractionDigits: 0
});
return (typeof Intl.NumberFormat.prototype.formatToParts) ? formatter.formatToParts(value).map(({
type,
value
}) => {
switch (type) {
case 'currency':
return currentSymbol || value;
case 'minusSign':
return '- ';
case 'plusSign':
return '+ ';
default:
return value;
}
}).reduce((string, part) => string + part) : formatter.format(value);
},
getFinalPrice() {
let finalPrice = this.initialFinalPrice;
if (this.activeProductsPriceData) {
finalPrice = this.activeProductsPriceData.finalPrice;
finalPrice = this.tierPrices.reduce((finalValue, tierPrice) => {
if (this.qty >= tierPrice.price_qty) {
return (this.activeProductsPriceData.oldPrice / 100 * tierPrice.percentage_value < finalValue) ? this.activeProductsPriceData.oldPrice / 100 * tierPrice.percentage_value : finalValue;
}
return finalValue;
}, finalPrice);
}
return finalPrice;
},
eventListeners: {
['@update-bundle-option-prices-222.window'](event) {
this.activeProductsPriceData = event.detail;
}
}
}
}
</script>
<div x-data="initPrice222()" x-spread="eventListeners" class="price-box price-final_price flex items-baseline">
<span class="bundle-old-price-222 old-price price-wrapper price flex line-through" id="product-price-222" :data-price="activeProductsPriceData.oldPrice"
x-html="(activeProductsPriceData.oldPrice) ? formatPrice(activeProductsPriceData.oldPrice) : formatPrice(74)">74 €</span>
<span class="final-price price-wrapper price flex " :data-price="getFinalPrice()" :data-old-price="activeProductsPriceData.oldPrice" id="product-price-222" x-html="(getFinalPrice()) ? formatPrice(getFinalPrice()) : formatPrice(61)"
data-price="0">61 €</span>
</div>
</span>
</span>
</span>
</button>
</div>
</div>
</form>
POST https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/320/
<form method="post" id="add_to_cart_form_products_slide_320" action="https://horace.com/fr/checkout/cart/add/uenc/aHR0cHM6Ly9ob3JhY2UuY29tLw%2C%2C/product/320/" class="container--item-product-category item product product-item product_addtocart_form card card-interactive
" data-id="320" data-name="Duo Shampoing Barbe & Huile Barbe" data-category="Rasage & Barbe" data-price="0">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp"> <input type="hidden" name="product" value="320">
<input type="hidden" name="isAjax" value="true">
<div class="relative h-full flex flex-col bg-white p-4 lg:p-5">
<div class="container--additional-infos-product-category
">
<a class="container--label-product-category label-product-category--320 flex " href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe">
<div class="label-product text-save"><span>Économisez <span class="price">4 €</span></span></div> </a>
<div class="container--addtocart-product-category lg:hidden">
<a href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe">
<div class="text-gray-8 text-benefice">
Pour une barbe<br>douce et forte </div>
</a>
</div>
</div>
<a href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe" title="Duo Shampoing Barbe & Huile Barbe" class="container--visual-product-category image-mobile-products-category variant-product-content variant-default-product-content-320 variant-product-content-320 product photo mx-auto" tabindex="-1">
<img loading="lazy" class="" alt="Duo Shampoing Barbe & Huile Barbe" title="Duo Shampoing Barbe & Huile Barbe" src="/cdn-cgi/image/fit=contain,width=360,format=auto,dpr=/media/catalog/product/k/i/kit-barbe-v2_1_.jpg" width="360" height="360">
</a>
<div class="container--infos-product-category product-info">
<p class="title-product text-center">
<a title="Duo Shampoing Barbe & Huile Barbe" href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe" class="variant-product-content variant-default-product-content-320 variant-product-content-320">
Duo Shampoing Barbe & Huile Barbe </a>
</p>
</div>
<div class="container--addtocart-product-category mt-2 hidden lg:block">
<a href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe">
<div class="text-gray-8 text-benefice">
Pour une barbe<br>douce et forte </div>
</a>
</div>
<div class="container--addtocart-product-category mt-4">
<a href="https://horace.com/fr/product/duo-shampoing-barbe-huile-barbe" class="btn addtocart-list btn-outline-primary" title="Duo Shampoing Barbe & Huile Barbe">
<span class="font-bold">Composer</span>
<span class="mx-1">-</span>
<span class="flex">
<script type="text/javascript">
function initPrice320() {
return {
activeProductsPriceData: false,
initialFinalPrice: 0,
calculatedFinalPrice: false,
tierPrices: [],
qty: 1,
formatPrice(value, showSign) {
var currentSymbol = '€';
var formatter = new Intl.NumberFormat(
document.documentElement.lang,
{
style: 'currency',
currency: 'EUR',
signDisplay: showSign ? "always" : "auto",
minimumFractionDigits: 0
}
);
return (typeof Intl.NumberFormat.prototype.formatToParts) ?
formatter.formatToParts(value).map(({type, value}) => {
switch (type) {
case 'currency':
return currentSymbol || value;
case 'minusSign':
return '- ';
case 'plusSign':
return '+ ';
default :
return value;
}
}).reduce((string, part) => string + part) :
formatter.format(value);
},
getFinalPrice() {
let finalPrice = this.initialFinalPrice;
if (this.activeProductsPriceData) {
finalPrice = this.activeProductsPriceData.finalPrice;
finalPrice = this.tierPrices.reduce((finalValue, tierPrice) => {
if (this.qty >= tierPrice.price_qty) {
return (
this.activeProductsPriceData.oldPrice / 100 * tierPrice.percentage_value <
finalValue
) ?
this.activeProductsPriceData.oldPrice / 100 * tierPrice.percentage_value :
finalValue;
}
return finalValue;
}, finalPrice);
}
return finalPrice;
},
eventListeners: {
['@update-bundle-option-prices-320.window'](event) {
this.activeProductsPriceData = event.detail;
}
}
}
}
</script>
<div x-data="initPrice320()" x-spread="eventListeners" class="price-box price-final_price flex items-baseline">
<span class="bundle-old-price-320 old-price price-wrapper price flex line-through" id="product-price-320" :data-price="activeProductsPriceData.oldPrice" x-html="(activeProductsPriceData.oldPrice) ? formatPrice(activeProductsPriceData.oldPrice) : formatPrice(27)">27 €</span>
<span class="final-price price-wrapper price flex " :data-price="getFinalPrice()" :data-old-price="activeProductsPriceData.oldPrice" id="product-price-320" x-html="(getFinalPrice()) ? formatPrice(getFinalPrice()) : formatPrice(23)" data-price="0">23 €</span>
</div>
</span>
</a>
</div>
</div>
</form>
POST #
<form @submit.prevent="submitData" id="signup_footer" action="#" method="POST">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp">
<div :class="{ 'hidden' : !displayForm, 'flex' : displayForm }" class="flex">
<div>
<input x-model="formData.email" type="email" class="w-full text-sm bordeless bordeless--secondary" value="" name="email" id="email_signup_footer" placeholder="monsieursympa@sympa.fr" required="" autocomplete="off">
</div>
<div class="flex">
<button type="submit" x-html="buttonLabel" class="btn bordeless bordeless--secondary w-12 lg:w-auto" aria-label="Envoyer"><svg xmlns="http://www.w3.org/2000/svg" width="7" height="14" viewBox="0 0 7 14" fill="none"
class="stroke-current text-secondary">
<path d="M1 1L6 7L1 13" stroke-linecap="round" stroke-linejoin="round"></path>
</svg></button>
</div>
</div>
<div class="message-text" x-html="message"></div>
<template x-if="errorMessages.length > 0">
<div class="message-text">
<template x-for="errorMessage in errorMessages">
<span x-html="errorMessage"></span>
</template>
</div>
</template>
</form>
Name: webform_GHZyN4 — POST
<form method="post" name="webform_GHZyN4" id="webform_GHZyN4" enctype="multipart/form-data" class="form " style="" aria-label="Exit intent" role="none">
<input name="form_key" type="hidden">
<input type="hidden" name="submitForm_4" value="1">
<input type="hidden" name="form_id" value="4">
<fieldset id="fieldset_GHZyN40" data-fieldsetid="fieldset_0" class="fieldset fieldset-0 " style="" role="group">
<div id="field_GHZyN446" role="group" data-name="EXIT_INTENT_LEAVE" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-select_checkbox webforms-fields-46 webforms-fields-EXIT_INTENT_LEAVE " aria-labelledby="label_fieldGHZyN446">
<label class="label field-label" id="label_fieldGHZyN446"> Quelle est la raison de votre départ ? </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN446">
<script defer="">
function initCheckbox_fieldGHZyN446() {
return {
checkbox: [],
selectedCheckbox: 0,
maxSelectedCheckbox: 0,
bindEvents() {
let _this = this;
this.checkbox = document.querySelectorAll('#checkbox_fieldGHZyN446 input.checkbox');
this.checkbox.forEach(input => {
input.addEventListener('change', function() {
if (this.checked) {
_this.selectedCheckbox++;
} else {
_this.selectedCheckbox--;
}
_this.isMaxOptionsSelected();
});
});
},
isMaxOptionsSelected() {
if (this.maxSelectedCheckbox > 0 && this.selectedCheckbox >= this.maxSelectedCheckbox) {
this.checkbox.forEach(input => {
if (!input.checked) {
input.disabled = true;
}
})
} else {
this.checkbox.forEach(input => {
input.disabled = false;
})
}
}
}
}
</script>
<div x-data="initCheckbox_fieldGHZyN446()" x-init="bindEvents()" id="checkbox_fieldGHZyN446" class="checkbox-group">
<div class="field field--checkbox choice option-0" style="">
<input id="fieldGHZyN4460" name="field[46][]" data-code="EXIT_INTENT_LEAVE_0" type="checkbox" value="hrc.exit-intent.anwser.option1" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4460_label label_fieldGHZyN446">
<label id="fieldGHZyN4460_label" for="fieldGHZyN4460" class="option-label">
<div>Les produits ne me correspondent pas</div>
</label>
</div>
<div class="field field--checkbox choice option-1" style="">
<input id="fieldGHZyN4461" name="field[46][]" data-code="EXIT_INTENT_LEAVE_1" type="checkbox" value="hrc.exit-intent.anwser.option2" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4461_label label_fieldGHZyN446">
<label id="fieldGHZyN4461_label" for="fieldGHZyN4461" class="option-label">
<div>Le choix des produits est trop limité</div>
</label>
</div>
<div class="field field--checkbox choice option-2" style="">
<input id="fieldGHZyN4462" name="field[46][]" data-code="EXIT_INTENT_LEAVE_2" type="checkbox" value="hrc.exit-intent.anwser.option4" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4462_label label_fieldGHZyN446">
<label id="fieldGHZyN4462_label" for="fieldGHZyN4462" class="option-label">
<div>Les frais de port sont trop élevés</div>
</label>
</div>
<div class="field field--checkbox choice option-3" style="">
<input id="fieldGHZyN4463" name="field[46][]" data-code="EXIT_INTENT_LEAVE_3" type="checkbox" value="hrc.exit-intent.anwser.option5" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4463_label label_fieldGHZyN446">
<label id="fieldGHZyN4463_label" for="fieldGHZyN4463" class="option-label">
<div>Le temps de chargement de la page est trop long</div>
</label>
</div>
<div class="field field--checkbox choice option-4" style="">
<input id="fieldGHZyN4464" name="field[46][]" data-code="EXIT_INTENT_LEAVE_4" type="checkbox" value="hrc.exit-intent.anwser.option6" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4464_label label_fieldGHZyN446">
<label id="fieldGHZyN4464_label" for="fieldGHZyN4464" class="option-label">
<div>J’ai vu une pub, j’étais curieux</div>
</label>
</div>
<div class="field field--checkbox choice option-5" style="">
<input id="fieldGHZyN4465" name="field[46][]" data-code="EXIT_INTENT_LEAVE_5" type="checkbox" value="hrc.exit-intent.anwser.option7" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4465_label label_fieldGHZyN446">
<label id="fieldGHZyN4465_label" for="fieldGHZyN4465" class="option-label">
<div>Je consulte uniquement le site pour acheter en boutiques/pharmacie/Monoprix</div>
</label>
</div>
<div class="field field--checkbox choice option-6" style="">
<input id="fieldGHZyN4466" name="field[46][]" data-code="EXIT_INTENT_LEAVE_6" type="checkbox" value="hrc.exit-intent.anwser.option8" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4466_label label_fieldGHZyN446">
<label id="fieldGHZyN4466_label" for="fieldGHZyN4466" class="option-label">
<div>Je ne suis pas prêt à acheter maintenant</div>
</label>
</div>
<div class="field field--checkbox choice option-7" style="">
<input id="fieldGHZyN4467" name="field[46][]" data-code="EXIT_INTENT_LEAVE_7" type="checkbox" value="hrc.exit-intent.anwser.option9" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4467_label label_fieldGHZyN446">
<label id="fieldGHZyN4467_label" for="fieldGHZyN4467" class="option-label">
<div>Autres</div>
</label>
</div>
</div>
</div>
</div>
<div id="field_GHZyN447" role="group" data-name="EXIT_INTENT_WHY" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-text webforms-fields-47 webforms-fields-EXIT_INTENT_WHY required" aria-labelledby="label_fieldGHZyN447"
style="display:none">
<label class="label field-label" id="label_fieldGHZyN447" for="fieldGHZyN447"> Pourquoi ? </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN447">
<input id="fieldGHZyN447" name="field[47]" data-code="EXIT_INTENT_WHY" type="text" class="form-input w-full input-text " style="" value="" placeholder="" @keyup.enter="goToNextStep()" data-validate="{'required-entry':true}"
aria-labelledby="label_fieldGHZyN447" aria-required="true">
</div>
</div>
<div id="field_GHZyN448" role="group" data-name="EXIT_INTENT_OTHER" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-text webforms-fields-48 webforms-fields-EXIT_INTENT_OTHER " aria-labelledby="label_fieldGHZyN448"
style="display:none">
<label class="label field-label" id="label_fieldGHZyN448" for="fieldGHZyN448"> Autres </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN448">
<input id="fieldGHZyN448" name="field[48]" data-code="EXIT_INTENT_OTHER" type="text" class="form-input w-full input-text " style="" value="" placeholder="" @keyup.enter="goToNextStep()" aria-labelledby="label_fieldGHZyN448">
</div>
</div>
</fieldset>
<script defer="">
function initActionsToolbar_GHZyN4() {
return {
loading: false,
isSubmitted: false,
bindEvents() {
let _this = this;
window.addEventListener('webformsSubmit', (e) => {
if (e.detail === 'submit') {
_this.loading = true;
}
if (e.detail === 'success') {
this.isSubmitted = true;
}
if (e.detail === 'error') {
this.loading = false;
}
}, false);
}
}
}
</script>
<div x-data="initActionsToolbar_GHZyN4()" x-init="bindEvents()" x-show="!isSubmitted" id="submitGHZyN4" class="actions-toolbar actions-toolbar-4 " style="display: none">
<div class="primary">
<button x-show="!loading" type="submit" class="action submit primary " id="webform_GHZyN4_submit_button" title="Envoyer" name="submit_button_GHZyN4">
<span>Envoyer</span>
</button>
</div>
<div class="secondary">
<div class="please-wait" id="webform_GHZyN4_sending_data" x-show="loading">
<div class="loading-indicator"></div>
<span id="webform_GHZyN4_progress_text">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg>
</span>
</div>
</div>
</div>
</form>
Name: webform_GHZyN4 — POST
<form method="post" name="webform_GHZyN4" id="webform_GHZyN4" enctype="multipart/form-data" class="form " style="" aria-label="Exit intent" role="none" novalidate="">
<input name="form_key" type="hidden" value="MNwD0YzJDL2fLqwp">
<input type="hidden" name="submitForm_4" value="1">
<input type="hidden" name="form_id" value="4">
<fieldset id="fieldset_GHZyN40" data-fieldsetid="fieldset_0" class="fieldset fieldset-0 " style="" role="group">
<div id="field_GHZyN446" role="group" data-name="EXIT_INTENT_LEAVE" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-select_checkbox webforms-fields-46 webforms-fields-EXIT_INTENT_LEAVE " aria-labelledby="label_fieldGHZyN446">
<label class="label field-label" id="label_fieldGHZyN446"> Quelle est la raison de votre départ ? </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN446">
<script defer="">
function initCheckbox_fieldGHZyN446() {
return {
checkbox: [],
selectedCheckbox: 0,
maxSelectedCheckbox: 0,
bindEvents() {
let _this = this;
this.checkbox = document.querySelectorAll('#checkbox_fieldGHZyN446 input.checkbox');
this.checkbox.forEach(input => {
input.addEventListener('change', function() {
if (this.checked) {
_this.selectedCheckbox++;
} else {
_this.selectedCheckbox--;
}
_this.isMaxOptionsSelected();
});
});
},
isMaxOptionsSelected() {
if (this.maxSelectedCheckbox > 0 && this.selectedCheckbox >= this.maxSelectedCheckbox) {
this.checkbox.forEach(input => {
if (!input.checked) {
input.disabled = true;
}
})
} else {
this.checkbox.forEach(input => {
input.disabled = false;
})
}
}
}
}
</script>
<div x-data="initCheckbox_fieldGHZyN446()" x-init="bindEvents()" id="checkbox_fieldGHZyN446" class="checkbox-group">
<div class="field field--checkbox choice option-0" style="">
<input id="fieldGHZyN4460" name="field[46][]" data-code="EXIT_INTENT_LEAVE_0" type="checkbox" value="hrc.exit-intent.anwser.option1" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4460_label label_fieldGHZyN446">
<label id="fieldGHZyN4460_label" for="fieldGHZyN4460" class="option-label">
<div>Les produits ne me correspondent pas</div>
</label>
</div>
<div class="field field--checkbox choice option-1" style="">
<input id="fieldGHZyN4461" name="field[46][]" data-code="EXIT_INTENT_LEAVE_1" type="checkbox" value="hrc.exit-intent.anwser.option2" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4461_label label_fieldGHZyN446">
<label id="fieldGHZyN4461_label" for="fieldGHZyN4461" class="option-label">
<div>Le choix des produits est trop limité</div>
</label>
</div>
<div class="field field--checkbox choice option-2" style="">
<input id="fieldGHZyN4462" name="field[46][]" data-code="EXIT_INTENT_LEAVE_2" type="checkbox" value="hrc.exit-intent.anwser.option4" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4462_label label_fieldGHZyN446">
<label id="fieldGHZyN4462_label" for="fieldGHZyN4462" class="option-label">
<div>Les frais de port sont trop élevés</div>
</label>
</div>
<div class="field field--checkbox choice option-3" style="">
<input id="fieldGHZyN4463" name="field[46][]" data-code="EXIT_INTENT_LEAVE_3" type="checkbox" value="hrc.exit-intent.anwser.option5" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4463_label label_fieldGHZyN446">
<label id="fieldGHZyN4463_label" for="fieldGHZyN4463" class="option-label">
<div>Le temps de chargement de la page est trop long</div>
</label>
</div>
<div class="field field--checkbox choice option-4" style="">
<input id="fieldGHZyN4464" name="field[46][]" data-code="EXIT_INTENT_LEAVE_4" type="checkbox" value="hrc.exit-intent.anwser.option6" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4464_label label_fieldGHZyN446">
<label id="fieldGHZyN4464_label" for="fieldGHZyN4464" class="option-label">
<div>J’ai vu une pub, j’étais curieux</div>
</label>
</div>
<div class="field field--checkbox choice option-5" style="">
<input id="fieldGHZyN4465" name="field[46][]" data-code="EXIT_INTENT_LEAVE_5" type="checkbox" value="hrc.exit-intent.anwser.option7" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4465_label label_fieldGHZyN446">
<label id="fieldGHZyN4465_label" for="fieldGHZyN4465" class="option-label">
<div>Je consulte uniquement le site pour acheter en boutiques/pharmacie/Monoprix</div>
</label>
</div>
<div class="field field--checkbox choice option-6" style="">
<input id="fieldGHZyN4466" name="field[46][]" data-code="EXIT_INTENT_LEAVE_6" type="checkbox" value="hrc.exit-intent.anwser.option8" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4466_label label_fieldGHZyN446">
<label id="fieldGHZyN4466_label" for="fieldGHZyN4466" class="option-label">
<div>Je ne suis pas prêt à acheter maintenant</div>
</label>
</div>
<div class="field field--checkbox choice option-7" style="">
<input id="fieldGHZyN4467" name="field[46][]" data-code="EXIT_INTENT_LEAVE_7" type="checkbox" value="hrc.exit-intent.anwser.option9" class="checkbox form-input" data-uid="GHZyN446"
aria-labelledby="fieldGHZyN4467_label label_fieldGHZyN446">
<label id="fieldGHZyN4467_label" for="fieldGHZyN4467" class="option-label">
<div>Autres</div>
</label>
</div>
</div>
</div>
</div>
<div id="field_GHZyN447" role="group" data-name="EXIT_INTENT_WHY" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-text webforms-fields-47 webforms-fields-EXIT_INTENT_WHY required" aria-labelledby="label_fieldGHZyN447"
style="display:none">
<label class="label field-label" id="label_fieldGHZyN447" for="fieldGHZyN447"> Pourquoi ? </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN447">
<input id="fieldGHZyN447" name="field[47]" data-code="EXIT_INTENT_WHY" type="text" class="form-input w-full input-text " style="" value="" placeholder="" @keyup.enter="goToNextStep()" data-validate="{"required-entry":true}"
aria-labelledby="label_fieldGHZyN447" aria-required="true">
</div>
</div>
<div id="field_GHZyN448" role="group" data-name="EXIT_INTENT_OTHER" class="main-field field wf-lg-1-1 wf-md-1-1 wf-sm-1-1 type-text webforms-fields-48 webforms-fields-EXIT_INTENT_OTHER " aria-labelledby="label_fieldGHZyN448"
style="display:none">
<label class="label field-label" id="label_fieldGHZyN448" for="fieldGHZyN448"> Autres </label>
<div class="control" role="group" aria-labelledby="label_fieldGHZyN448">
<input id="fieldGHZyN448" name="field[48]" data-code="EXIT_INTENT_OTHER" type="text" class="form-input w-full input-text " style="" value="" placeholder="" @keyup.enter="goToNextStep()" aria-labelledby="label_fieldGHZyN448">
</div>
</div>
</fieldset>
<script defer="">
function initActionsToolbar_GHZyN4() {
return {
loading: false,
isSubmitted: false,
bindEvents() {
let _this = this;
window.addEventListener('webformsSubmit', (e) => {
if (e.detail === 'submit') {
_this.loading = true;
}
if (e.detail === 'success') {
this.isSubmitted = true;
}
if (e.detail === 'error') {
this.loading = false;
}
}, false);
}
}
}
</script>
<div x-data="initActionsToolbar_GHZyN4()" x-init="bindEvents()" x-show="!isSubmitted" id="submitGHZyN4" class="actions-toolbar actions-toolbar-4 " olddisplay="" style="display: none;">
<div class="primary">
<button x-show="!loading" type="submit" class="action submit primary " id="webform_GHZyN4_submit_button" title="Envoyer" name="submit_button_GHZyN4">
<span>Envoyer</span>
</button>
</div>
<div class="secondary">
<div class="please-wait" id="webform_GHZyN4_sending_data" x-show="loading" style="display: none;">
<div class="loading-indicator"></div>
<span id="webform_GHZyN4_progress_text">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 16 16" fill="none" class="animate-spin text-secondary">
<g clip-path="url(#clip0)">
<path
d="M12.1786 3.46768L11.9946 3.65167L12.1858 3.82816C13.2889 4.84647 13.972 6.37937 13.972 8.00002C13.972 11.3286 11.3284 13.9722 7.99978 13.9722C4.67119 13.9722 2.02756 11.3286 2.02756 8.00002C2.02756 6.37937 2.71063 4.84647 3.8138 3.82816L4.00499 3.65167L3.821 3.46768L3.10989 2.75657L2.92692 2.5736L2.75035 2.76277C1.46731 4.13746 0.638672 5.9747 0.638672 8.00002C0.638672 12.0492 3.9506 15.3611 7.99978 15.3611C12.049 15.3611 15.3609 12.0492 15.3609 8.00002C15.3609 5.9747 14.5323 4.13746 13.2492 2.76277L13.0727 2.5736L12.8897 2.75657L12.1786 3.46768Z"
fill="currentColor" stroke="currentColor" stroke-width="0.5"></path>
</g>
<defs>
<clipPath id="clip0">
<rect width="16" height="16" fill="currentColor"></rect>
</clipPath>
</defs>
</svg>
</span>
</div>
</div>
</div>
</form>
Text Content
Bienvenue ! Les 20 % s'appliquent directement sur la page de commande. Créez un compte pour en profiter ! Commandez en ligne et récupérez votre commande en boutique grâce au Click & collect ! Un produit offert à partir de 60€ Réalisez votre diagnostic et trouvez la routine adaptée à vos besoins Réalisez votre diagnostic et trouvez la routine adaptée à vos besoins Commandez en ligne et récupérez votre commande en boutique grâce au Click & collect ! Un produit offert à partir de 60€ Réalisez votre diagnostic et trouvez la routine adaptée à vos besoins Commandez en ligne et récupérez votre commande en boutique grâce au Click & collect ! 10% de réduction sur votre prochaine commande en vous abonnant à notre newsletter. 10% offerts ! Inscription newsletter Offre de bienvenue : 10% de réduction sur votre prochaine commande ! Email address Valider Boutiques Mon espace France (€) Livraison Belgique (€) France (€) Monaco (€) Germany (€) Spain (€) Ireland (€) Luxembourg (€) Netherlands (€) Switzerland (€) United Kingdom (£) United States ($) Belgique (€) France (€) Germany (€) Ireland (€) Luxembourg (€) Monaco (€) Netherlands (€) Spain (€) Switzerland (€) United Kingdom (£) United States ($) 0 0 Visage Corps Rasage & Barbe Cheveux Dents Parfum Kits Magazine Soyez informé Diagnostic visage Boutiques Se connecter Livraison : Belgique (€) France (€) Germany (€) Ireland (€) Luxembourg (€) Monaco (€) Netherlands (€) Spain (€) Switzerland (€) United Kingdom (£) United States ($) Visage Corps Rasage & Barbe Cheveux Dents Parfum Kits Magazine Guides & Conseils Tous nos guides & conseils pour répondre à vos problèmes et prendre soin de vous. Hydraté comme jamais : une routine pour une peau hydratée du contour de l'œil jusqu’au menton. Guides & Conseils Lire l'article Solide comme un solide Horace Guides & Conseils Lire l'article Comment faire comprendre à vos proches que vous voulez du Horace en cadeau Guides & Conseils Lire l'article Le guide ultime pour la Fête des Pères Guides & Conseils Lire l'article Huile de CBD, huile de chanvre, quelles différences ? Guides & Conseils Lire l'article Comment prendre soin de votre peau aux sports d’hiver Guides & Conseils Lire l'article Voir tous les guides & conseils Décryptages Nos décryptages pour répondre à vos problèmes. Comment ressembler à : Leonardo DiCaprio dans The Revenant Décryptages Lire l'article Comment ressembler à : James Harden Décryptages Lire l'article Comment ressembler à : David Lynch Décryptages Lire l'article Comment ressembler à : Andrea Pirlo Décryptages Lire l'article Nos prix vont changer : on vous explique tout Décryptages Lire l'article La raie au milieu, on dit oui ! Décryptages Lire l'article Voir tous les décryptages Entretiens Interviews d'hommes inspirants et qui vous ressemblent Dans la routine de couple d’Enzo Lefort & Kitesy Martin Entretiens Lire l'article Dans la routine de… Julien Jabre Entretiens Lire l'article Dans la routine... de Nicolas Huchard Entretiens Lire l'article Dans la routine de… Izé Teixeira Entretiens Lire l'article Dans la routine de... Stomy Bugsy Entretiens Lire l'article Dans la routine de... Trésor Bofete Entretiens Lire l'article Voir tous les entretiens Témoignages Des hommes qui vous ressemblent racontent leurs expériences Ce que veut l’équipe pour la Saint-Valentin Temoignages Lire l'article “Le jour où j’ai… pris conscience de mon dysmorphisme et comment je le gère” Temoignages Lire l'article "Le jour où j'ai... assumé mes cicatrices" Temoignages Lire l'article Découvrez toute les astuces d'un thérapeute pour prendre soin de lui Temoignages Lire l'article "Voir un naturopathe pour améliorer son hygiène de vie : j'ai testé !" Temoignages Lire l'article "Comment la méditation m'a aidé à gérer mon stress et mon anxiété Temoignages Lire l'article Voir tous les témoignages Nos derniers conseils et articles pour prendre soin de vous Hydraté comme jamais : une routine pour une peau hydratée du contour de l'œil jusqu’au menton. Lire l'article Solide comme un solide Horace Lire l'article Comment ressembler à : Leonardo DiCaprio dans The Revenant Lire l'article Comment ressembler à : James Harden Lire l'article Comment ressembler à : David Lynch Lire l'article Comment ressembler à : Andrea Pirlo Lire l'article Voir tous les derniers articles Diagnostic visage Mon espace 0 Mon panier Essayez crème hydratante, cire, shampoing Découvrez les nouveautés Shampoing pour Barbe Sérum Acide Salicylique + Niacinamide Hydratant Visage Matifiant SPF30 & Horace - Eau de Parfum 100ml Voir plus Mon panier 0 En cours de chargement Encore Encore Félicitations ! Vous bénéficiez de tous les produits offerts ! Mon diagnostic Comprendre le prix Comment est calculée ma réduction ? Plus votre routine sera complète, plus la réduction sera importante. En somme, plus vous achetez, plus vous économisez ! Voir le contenu du kit - + Je prends Je change de cadeau Je ne souhaite pas recevoir de cadeau Je ne souhaite pas recevoir de cadeau Je change de cadeau Offre limitée : Une brosse à barbe offerte ! Ajouter gratuitement Ajouter - Votre panier est vide Vous avez le pouvoir de changer cela. Votre panier est vide Vous avez le pouvoir de changer cela. Un code promo ? Valider Annuler Utiliser mes crédits Crédits utilisés () Modifier - crédit(s) utilisable(s) () Valider Ajoutez un nombre de crédits dans la limite du montant de votre panier Votre solde : Total Frais de livraison estimés Offerts - tous les 3 mois Frais de livraison estimés offerts Vous y êtes presque... Commander Continuer en tant qu'invité Simplifiez-vous la vie en vous abonnant Connectez-vous pour gérer votre abonnement en 1 clic. Créez votre compte en 1 minute si vous n'en avez pas. Créer un compte Ou Se connecter Connexion Mot de passe oublié ? * Se connecter avec Facebook * Se connecter avec Google Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. Valider S'il y a un compte associé avec cet email, vous recevrez un email avec un lien pour réinitialiser votre mot de passe. Cliquez sur le bouton ci-dessous pour vous connecter. Se connecter Continuer en tant qu'invité Continuer en tant qu'invité Simplifiez-vous la vie en vous abonnant Connectez-vous pour gérer votre abonnement en 1 clic. Créez votre compte en 1 minute si vous n'en avez pas. Créer un compte Ou Se connecter Connexion Mot de passe oublié ? * Se connecter avec Facebook * Se connecter avec Google Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. Valider Veuillez renseigner votre adresse email ci-dessous, nous vous allons vous renvoyer un nouveau mot de passe. Valider S'il y a un compte associé avec cet email, vous recevrez un email avec un lien pour réinitialiser votre mot de passe. Cliquez sur le bouton ci-dessous pour vous connecter. Se connecter Nouveau Contour des Yeux Hydratant Hydrate, lisse le contour de l'œil et réduit les signes de fatigue ! JE DÉCOUVRE SOINS NATURELS POUR TOUS LES HOMMES. -------------------------------------------------------------------------------- Hydratant Visage Matifiant SPF30 957 avis Hydrate et protège des rayons UV Ajouter - 19 € 100ml & Horace - Eau de Parfum 100ml 1100 avis Soyez qui vous êtes, vraiment. Ajouter - 98 € Bestseller Purifie et régule le sébum Masque Purifiant Visage 3305 avis Purifie et régule le sébum Ajouter - 13 € Bestseller Nettoie et discipline le poil Shampoing pour Barbe 1611 avis Nettoie et discipline le poil Ajouter - 14 € Bestseller Élimine les peaux mortes en douceur Gommage Visage Doux 4537 avis Élimine les peaux mortes en douceur Ajouter - 13 € Bestseller Boisé et aromatique Huile pour Barbe Patchouli & Cèdre 1694 avis Boisé et aromatique Ajouter - 13 € Bestseller Élimine durablement les pellicules Shampoing Antipelliculaire Doux 1165 avis Élimine durablement les pellicules Ajouter - 13 € Économisez 12 € 5 essentiels pour prendre son temps L’Intégral Visage 5 essentiels pour prendre son temps Ajouter - 74 € 61 € Économisez 4 € Pour une barbe douce et forte Duo Shampoing Barbe & Huile Barbe Pour une barbe douce et forte Composer - 27 € 23 € AVEC LES AVIS, TOUT EST DIT Consultez les avis de nos clients avant de vous lancer 4,5/5avec 72665 avis Voir tous les avis AVEC 72 665 AVIS VÉRIFIÉS Florian Acheteur vérifié Âge 25-34 ans Nettoyant Visage Purifiant 15/05/2022 Génial Premier produit utilisé de la marque et vraiment très bonne impression. Utilisation quotidienne du produit qui me donne la peau douce et propre. Aucune rougeur malgré une peau très sensible, je recommande vraiment. Pablo Acheteur vérifié Âge 25-34 ans Masque Purifiant Visage 13/05/2022 Un super masque ! Très facile à utiliser, le parfum, la couleur et les résultats sont top ! Je l'ai utilisé depuis deux mois, une fois par semaine, et j'ai l'impression d'avoir la peau plus douce et avec beaucoup moins d'imperfections. Horace parle à tous les hommes, types de peaux et carnations avec un rapport qualité/prix accessible. Des produits à 95 % d’origine naturelle qui s’adaptent à toutes les carnations, qui s’adressent à tous, et à prix serrés. Horace, les cosmétiques pour homme sans fard. DES PRODUITS FAITS POUR VOUS ET AVEC VOUS -------------------------------------------------------------------------------- 1 On discute avec vous à propos de vos besoins 2 On lance le développement du produit 3 On teste différentes versions du produit avec vous 4 On lance le produit grâce à vos retours DES SOLUTIONS HORACE À TOUS VOS BESOINS -------------------------------------------------------------------------------- CRÈMES HYDRATANTES SHAMPOINGS HUILES BARBE KITS SOIN DU VISAGE BARBE SHAMPOING POUR LA BARBE PRODUITS COIFFANTS APRÈS-SHAMPOINGS Voir plus VENEZ NOUS VOIR ! Passez votre commande en ligne et récupérez-la en magasin. À Paris, Lyon, Bordeaux, Toulouse, Lille, Nantes, Aix-en-Provence, Montpellier et Marseille. Testez nos produits et profitez de nos conseils. J’arrive ! Boutique Paris Marais Boutique Paris Bastille Boutique Paris Abbesses Boutique Paris Galeries Lafayette Boutique Lyon République Boutique Toulouse Saint-Antoine du T Boutique Lille Lepelletier Boutique Paris Saint-Germain Boutique Aix-En-Provence Papassaudi Boutique Nantes La Marne Boutique Bordeaux Sainte-Catherine Boutique Montpellier Loge HORACE DANS LA VRAIE VIE -------------------------------------------------------------------------------- 10 % offert en vous abonnant ! Soyez au courant des nouveautés, recevez des conseils ou des offres ! Abonnez-vous à notre newsletter ! Made in France Nos produits sont fabriqués avec amour dans nos usines aux quatre coins de la France. Produits naturels & clean Tous nos produits sont entre 95 et 100 % naturels. Ils sont aussi sains, sans ingrédients problématiques. 1% for the planet Nous reversons 1 % de nos ventes à des associations préservant l’environnement comme Surfrider Foundation. Nous nous soucions de vous Nos modèles vous ressemblent, nos produits sont créés avec vous. Tout, chez Horace, est fait pour vous aider à vous sentir bien dans votre peau. Shop Horace + Shop Horace Visage Corps Rasage & barbe Cheveux Dents Parfum Kits Diagnostic visage Explorer Horace + Explorer Horace Notre philosophie Où nous trouver ? Magazine Vos avis Jobs Presse Réduction étudiant Cadeaux Carte cadeau Services en ligne + Services en ligne Livraison et retour Suivi de commandes Aide et FAQ Paiement sécurisé Contact Rendez-nous visite aussi en boutiques ! Paris Marais : 68 rue Vieille du Temple, 75003 Paris Bastille : 33 Rue du Faubourg Saint-Antoine, 75011 Paris Abbesses : 22 Rue des Abbesses, 75018 Paris Galeries Lafayette : 40 Boulevard Haussmann, 75009 Lyon République : 49 Rue de la République, 69002 Toulouse Saint-Antoine du T : 16 Rue Saint-Antoine du T, 31000 Bordeaux Sainte-Catherine: 108 Rue Sainte-Catherine, 33000 Lille Lepelletier : 15 Rue Lepelletier, 59800 Nantes La Marne : 7 rue de la Marne, 44000 Paris Saint-Germain : 129 Boulevard Saint Germain, 75006 Aix-en-Provence Papassaudi : 3 Rue Papassaudi, 13100 Montpellier Loge : 19 Rue de la Loge, 34000 Marseille Paradis : 20 Rue Paradis, 13001 Paris Italie 2 : 30 Avenue d'Italie, 75013 Instagram Facebook Twitter Youtube TikTok Voir les 73734 avis de nos clients sur nos produits Voir les 73734 avis de nos clients sur nos produits © 2021 Horace. Tous droits réservés. CGV & mentions légales Réalisez votre diagnostic et trouvez la routine adaptée à vos besoins. Je fais mon diagnostic Vous nous quittez déjà ? Quelle est la raison de votre départ ? Les produits ne me correspondent pas Le choix des produits est trop limité Les frais de port sont trop élevés Le temps de chargement de la page est trop long J’ai vu une pub, j’étais curieux Je consulte uniquement le site pour acheter en boutiques/pharmacie/Monoprix Je ne suis pas prêt à acheter maintenant Autres Pourquoi ? Autres Envoyer Vous nous quittez déjà ? Quelle est la raison de votre départ ? Les produits ne me correspondent pas Le choix des produits est trop limité Les frais de port sont trop élevés Le temps de chargement de la page est trop long J’ai vu une pub, j’étais curieux Je consulte uniquement le site pour acheter en boutiques/pharmacie/Monoprix Je ne suis pas prêt à acheter maintenant Autres Pourquoi ? Autres Envoyer Chez Horace nous utilisons des cookies nécessaires au bon fonctionnement du site internet, ainsi que des cookies pour personnaliser votre navigation ou comprendre le trafic sur notre site. Nos partenaires utilisent des cookies afin d'afficher de la publicité personnalisée en fonction de votre navigation. Pour en savoir plus, consultez notre pageCGV & Mentions légales Paramètres des cookies Tout refuser Tout accepter CENTRE DE PRÉFÉRENCES DE LA CONFIDENTIALITÉ Lorsque vous consultez un site Web, des données peuvent être stockées dans votre navigateur ou récupérées à partir de celui-ci, généralement sous la forme de cookies. Ces informations peuvent porter sur vous, sur vos préférences ou sur votre appareil et sont principalement utilisées pour s'assurer que le site Web fonctionne correctement. Les informations ne permettent généralement pas de vous identifier directement, mais peuvent vous permettre de bénéficier d'une expérience Web personnalisée. Parce que nous respectons votre droit à la vie privée, nous vous donnons la possibilité de ne pas autoriser certains types de cookies. Cliquez sur les différentes catégories pour obtenir plus de détails sur chacune d'entre elles, et modifier les paramètres par défaut. Toutefois, si vous bloquez certains types de cookies, votre expérience de navigation et les services que nous sommes en mesure de vous offrir peuvent être impactés. Plus d’informations Tout autoriser GÉRER LES PRÉFÉRENCES DE CONSENTEMENT COOKIES STRICTEMENT NÉCESSAIRES Toujours actif Ces cookies sont nécessaires au fonctionnement du site Web et ne peuvent pas être désactivés dans nos systèmes. Ils sont généralement établis en tant que réponse à des actions que vous avez effectuées et qui constituent une demande de services, telles que la définition de vos préférences en matière de confidentialité, la connexion ou le remplissage de formulaires. Vous pouvez configurer votre navigateur afin de bloquer ou être informé de l'existence de ces cookies, mais certaines parties du site Web peuvent être affectées. Ces cookies ne stockent aucune information d’identification personnelle. COOKIES DE PERFORMANCE Cookies de performance Ces cookies nous permettent de déterminer le nombre de visites et les sources du trafic, afin de mesurer et d’améliorer les performances de notre site Web. Ils nous aident également à identifier les pages les plus / moins visitées et d’évaluer comment les visiteurs naviguent sur le site Web. Toutes les informations collectées par ces cookies sont agrégées et donc anonymisées. Si vous n'acceptez pas ces cookies, nous ne serons pas informé de votre visite sur notre site. COOKIES DE FONCTIONNALITÉ Cookies de fonctionnalité Ces cookies permettent d’améliorer et de personnaliser les fonctionnalités du site Web. Ils peuvent être activés par nos équipes, ou par des tiers dont les services sont utilisés sur les pages de notre site Web. Si vous n'acceptez pas ces cookies, une partie ou la totalité de ces services risquent de ne pas fonctionner correctement. COOKIES POUR UNE PUBLICITÉ CIBLÉE Cookies pour une publicité ciblée Ces cookies peuvent être mis en place au sein de notre site Web par nos partenaires publicitaires. Ils peuvent être utilisés par ces sociétés pour établir un profil de vos intérêts et vous proposer des publicités pertinentes sur d'autres sites Web. Ils ne stockent pas directement des données personnelles, mais sont basés sur l'identification unique de votre navigateur et de votre appareil Internet. Si vous n'autorisez pas ces cookies, votre publicité sera moins ciblée. COOKIES « RÉSEAUX SOCIAUX » Cookies « réseaux sociaux » Ces cookies sont activés par les services proposés sur les réseaux sociaux que nous avons ajoutés au site Web afin de vous donner la possibilité de partager notre contenu avec votre réseau et vos connaissances. Ils nous permettent également de suivre votre navigation sur d’autres sites Web et d’établir un profil de vos intérêts. Cela peut avoir un impact sur le contenu et les messages affichés sur les autres sites Web que vous consultez. Si vous n'autorisez pas ces cookies, il se peut que vous ne puissiez pas utiliser ou visualiser ces outils de partage. Back Button LISTE DES COOKIES Search Icon Filter Icon Clear checkbox label label Apply Cancel Consent Leg.Interest checkbox label label checkbox label label checkbox label label Tout refuser Confirmer la sélection