<!DOCTYPE html>
<html lang="fr" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="csrf-token" content="ktudKocFqWiDBm5noPBhi1XvWCZkFIzx0owxUNkY">
<title>AZAL Cosmetics | Produits Beauté & Accessoires Tunisie</title>
<meta name="description" content="Découvrez AZAL Cosmetics: maquillage, soins visage, soins cheveux et accessoires beauté en Tunisie. Retrouvez vos essentiels beauté en ligne sur azal.tn">
<meta name="keywords" content="AZAL Cosmetics, Cosmétiques Tunisie, Produits beauté Tunisie, Maquillage Tunisie, Soins cheveux Tunisie,Accessoires beauté Tunisie">
<link rel="canonical" href="https://azal.tn/">
<meta name="twitter:card" content="summary_large_image">
<meta property="og:title" content="AZAL Cosmetics | Produits Beauté & Accessoires Tunisie">
<meta property="og:description" content="Découvrez AZAL Cosmetics: maquillage, soins visage, soins cheveux et accessoires beauté en Tunisie. Retrouvez vos essentiels beauté en ligne sur azal.tn">
<meta property="og:image" content="https://www.azal.tn/storage/storefronts/969/q9t3oft8HnMGyjXBWsufnhbtgdm997jUTZPh0KFf.png">
<meta property="og:url" content="https://www.azal.tn">
<meta property="og:type" content="website">
<link rel="preload" as="font" href="https://www.azal.tn/fonts/google/jost/jost-1.woff2" type="font/woff2" crossorigin>
<link href="https://www.azal.tn/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link rel="preload" as="font" href="https://www.azal.tn/vendor/fontawesome-6/webfonts/fa-solid-900.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="font" href="https://www.azal.tn/vendor/fontawesome-6/webfonts/fa-regular-400.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="font" href="https://www.azal.tn/vendor/fontawesome-6/webfonts/fa-brands-400.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="style" href="https://www.azal.tn/vendor/fontawesome-6/css/all.min.css" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://www.azal.tn/vendor/fontawesome-6/css/all.min.css"></noscript>
<style>/* cyrillic */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/fonts/google/jost/jost-1.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/fonts/google/jost/jost-3.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 300;
font-display: swap;
src: url(/fonts/google/jost/jost-2.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/fonts/google/jost/jost-1.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/fonts/google/jost/jost-3.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(/fonts/google/jost/jost-2.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/fonts/google/jost/jost-1.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/fonts/google/jost/jost-3.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(/fonts/google/jost/jost-2.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(/fonts/google/jost/jost-1.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(/fonts/google/jost/jost-3.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url(/fonts/google/jost/jost-2.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* cyrillic */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/fonts/google/jost/jost-1.woff2) format('woff2');
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
/* latin-ext */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/fonts/google/jost/jost-3.woff2) format('woff2');
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Jost';
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(/fonts/google/jost/jost-2.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<link rel="preload" as="style" href="https://www.azal.tn/fonts/google/cairo/font.css" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://www.azal.tn/fonts/google/cairo/font.css"></noscript>
<style>
:root {
--primary-color: #1a1a1a;
--secondary-color: #f7c9d0;
--font-family: 'Jost', 'Cairo', sans-serif;
}
body {
font-family: var(--font-family);
color: #333;
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-primary:hover {
background-color: var(--primary-color);
border-color: var(--primary-color);
opacity: 0.9;
}
.text-primary {
color: var(--primary-color) !important;
}
.bg-primary {
background-color: var(--primary-color) !important;
}
.navbar {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.product-card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
border: 1px solid #e0e0e0;
height: 100%;
}
.product-card:hover {
transform: translateY(-5px);
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.product-image {
width: 100%;
height: 250px;
object-fit: cover;
}
.whatsapp-float {
position: fixed;
width: 60px;
height: 60px;
bottom: 40px;
right: 40px;
background-color: #25d366;
color: #FFF;
border-radius: 50px;
text-align: center;
font-size: 30px;
box-shadow: 2px 2px 3px #999;
z-index: 100;
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
transition: all 0.3s ease;
}
.whatsapp-float:hover {
background-color: #128C7E;
transform: scale(1.1);
}
footer {
background-color: #2c3e50;
color: #ecf0f1;
}
@media (max-width: 768px) {
.product-image {
height: 200px;
}
}
</style>
<style id="mtk-cart-drawer-css">
.mtk-cart-drawer {
width: min(420px, 92vw);
font-family: var(--font-family, inherit);
}
.mtk-cart-drawer__title { font-weight: 600; margin: 0; }
.mtk-cart-drawer__body { display: flex; flex-direction: column; padding: 0; }
.mtk-cart-drawer__inner { display: flex; flex-direction: column; min-height: 100%; }
.mtk-cart-drawer__loading { padding: 32px; text-align: center; color: #888; }
.mtk-cart-drawer__items { list-style: none; margin: 0; padding: 8px 16px; flex: 1 1 auto; overflow-y: auto; }
.mtk-cart-drawer__item { display: flex; gap: 12px; align-items: center; padding: 12px 0; border-bottom: 1px solid #eee; }
.mtk-cart-drawer__item-img { width: 56px; height: 56px; flex: 0 0 56px; border-radius: 8px; overflow: hidden; background: #f5f5f5; }
.mtk-cart-drawer__item-img img { width: 100%; height: 100%; object-fit: cover; }
.mtk-cart-drawer__item-placeholder { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; color: #bbb; }
.mtk-cart-drawer__item-info { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.mtk-cart-drawer__item-name { font-weight: 600; font-size: 0.9rem; line-height: 1.3; }
.mtk-cart-drawer__item-variant { font-size: 0.78rem; color: #777; }
.mtk-cart-drawer__item-meta { font-size: 0.8rem; color: #555; }
.mtk-cart-drawer__item-total { font-weight: 600; font-size: 0.88rem; white-space: nowrap; }
.mtk-cart-drawer__item-right { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }
.mtk-cart-drawer__qty { display: inline-flex; align-items: center; border: 1px solid #e2e2e2; border-radius: 6px; overflow: hidden; margin-top: 4px; }
.mtk-cart-drawer__qty-btn { border: 0; background: #f5f5f5; width: 26px; height: 26px; line-height: 1; cursor: pointer; font-size: 0.95rem; color: #333; }
.mtk-cart-drawer__qty-btn:hover { background: #ececec; }
.mtk-cart-drawer__qty-val { min-width: 30px; text-align: center; font-size: 0.85rem; font-variant-numeric: tabular-nums; }
.mtk-cart-drawer__item-qtyfixed { font-size: 0.78rem; color: #777; }
.mtk-cart-drawer__remove { border: 0; background: transparent; color: #b3b3b3; cursor: pointer; padding: 2px 4px; font-size: 0.85rem; }
.mtk-cart-drawer__remove:hover { color: #c0392b; }
.mtk-cart-drawer__body[aria-busy="true"] { opacity: 0.55; pointer-events: none; }
.mtk-cart-drawer__summary { padding: 14px 16px; border-top: 1px solid #eee; background: #fafafa; }
.mtk-cart-drawer__subtotal { display: flex; justify-content: space-between; align-items: baseline; font-size: 1rem; }
.mtk-cart-drawer__subtotal strong { color: var(--primary-color, inherit); }
.mtk-cart-drawer__note { margin: 4px 0 0; font-size: 0.75rem; color: #999; }
.mtk-cart-drawer__actions { padding: 16px; display: flex; flex-direction: column; gap: 10px; }
.mtk-cart-drawer__checkout {
display: block; text-align: center; text-decoration: none;
padding: 13px 16px; border: 0; border-radius: 8px; cursor: pointer;
font-weight: 600; font-size: 0.95rem;
background: var(--primary-color, #111); color: #fff;
}
.mtk-cart-drawer__checkout:hover { filter: brightness(0.94); color: #fff; }
.mtk-cart-drawer__continue {
display: block; width: 100%; text-align: center;
padding: 12px 16px; border-radius: 8px; cursor: pointer;
font-weight: 500; font-size: 0.9rem;
background: transparent; color: inherit;
border: 1px solid var(--secondary-color, #ccc);
}
.mtk-cart-drawer__view-cart { display: block; text-align: center; font-size: 0.82rem; color: #888; text-decoration: underline; }
.mtk-cart-drawer__empty { padding: 48px 24px; text-align: center; display: flex; flex-direction: column; gap: 14px; align-items: center; }
.mtk-cart-drawer__empty-icon { font-size: 2.2rem; color: #ccc; }
.mtk-cart-drawer__empty-text { margin: 0; color: #777; }
.mtk-add-error { margin-top: 8px; font-size: 0.82rem; color: #b23a2e; }
</style>
<style id="global-custom-css">
/* ═══════════ AZAL — design language ═══════════ */
:root{
--az-ink:#1a1a1a; --az-body:#6b7280; --az-line:#ececec;
--az-pink:#f7c9d0; --az-pink-soft:#fdf1f3; --az-coral:#e05a54;
}
body{color:var(--az-ink)}
h1,h2,h3,h4,.section-heading-text{font-family:'Jost',sans-serif;letter-spacing:.1em;text-transform:uppercase;font-weight:600}
/* Section eyebrows: the heading subtitle becomes a coral letterspaced kicker */
.az-univers .section-heading-subtitle-top,.az-carousel .section-heading-subtitle-top,
.az-avis .section-heading-subtitle-top,.az-insta .section-heading-subtitle-top,
.az-band .section-heading-subtitle-top{
color:var(--az-coral);font-size:11px;font-weight:700;letter-spacing:.32em;text-transform:uppercase}
.az-univers .section-heading-text,.az-carousel .section-heading-text,
.az-avis .section-heading-text,.az-insta .section-heading-text{font-size:24px;letter-spacing:.16em;color:var(--az-ink)}
/* Hero: kicker above the heading, no text shadow, pill button */
.az-hero .hero-content{display:flex;flex-direction:column;align-items:flex-start}
.az-hero .text-center .hero-content{align-items:center}
.az-hero .hero-subheading{order:-1;letter-spacing:.32em;margin-bottom:14px}
.az-hero .hero-heading{letter-spacing:.08em;text-transform:uppercase;font-weight:600;max-width:620px;text-shadow:none}
.az-hero .hero-description{max-width:600px}
.az-hero .hero-description strong.az-pink{color:#f7c9d0;font-weight:700}
.az-hero .hero-cta-button{border-radius:999px;text-transform:none;letter-spacing:.02em;font-size:14.5px;padding:.95rem 2.2rem;font-weight:600}
.az-hero .hero-nav-btn{background:rgba(255,255,255,.85);color:var(--az-ink)}
/* Header: double-row like the mockup — row 1 logo / wide search / actions,
row 2 the nav centered (flex wrap on the standard layout) */
.nav-menu .nav-link,.header-nav a{text-transform:uppercase;letter-spacing:.08em;font-size:13px;font-weight:600}
@media (min-width:992px){
.header-inner.layout-standard{flex-wrap:wrap;row-gap:2px;padding-bottom:8px}
.header-inner.layout-standard .header-nav{order:10;flex-basis:100%;display:flex;justify-content:center;padding-top:4px}
.header-inner.layout-standard .header-nav .nav-menu{justify-content:center;gap:10px}
.header-inner .search-bar-full{flex:1 1 auto;max-width:none;min-width:0;margin:0 40px}
.header-inner .search-bar-full input{min-width:0}
}
@media (max-width:991.98px){
.header-inner .search-bar-full{min-width:0;max-width:230px;flex:0 1 230px}
}
.header-nav .nav-menu > .nav-item:last-child > .nav-link,.header-nav .nav-menu > li:last-child > a{color:var(--az-coral)}
/* Header top bar marquee: petite letterspaced blush type on ink */
.header-topbar,.topbar-style-marquee{font-size:11px;letter-spacing:.22em;text-transform:uppercase;font-weight:600}
/* Trust marquee: hairline band, letterspaced uppercase, coral icons */
.az-trust{border-top:1px solid var(--az-line);border-bottom:1px solid var(--az-line)}
.az-trust [class*=marquee]{letter-spacing:.18em}
/* Universe grid: uppercase labels + the wireframe's unequal 4/3 rows */
.az-univers [class*=category-name],.az-univers h3{letter-spacing:.18em;text-transform:uppercase;font-size:13px}
/* unequal 4/3 universe rows are applied by custom_js (the widget's #id
selector out-specifies any class rule here) */
/* Product cards ('clean' style): white card, hairline border, persistent
outlined pill add-to-cart (moved after the info block by custom JS) */
.az-carousel .product-card-clean{background:#fff;border:1px solid var(--az-line);border-radius:20px;
padding:12px 12px 18px;transition:box-shadow .25s,border-color .25s}
.az-carousel .clean-info{padding:14px 6px 0}
.az-carousel .clean-title{margin-bottom:10px;min-height:38px}
.az-carousel .clean-price-row{margin:4px 0 14px}
.az-carousel .product-card-clean:hover{border-color:#dcdcdc;box-shadow:0 12px 30px -14px rgba(26,26,26,.16)}
.az-carousel .clean-img-wrap{background:#fff}
.az-carousel .clean-title{font-size:13px;font-weight:500;color:var(--az-ink);letter-spacing:.02em}
.az-carousel .clean-price{color:var(--az-ink);font-weight:700}
.az-carousel .clean-badge{background:var(--az-ink);color:#fff;border-radius:999px;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;padding:4px 10px}
.az-carousel .product-card-clean .clean-hover-atc{position:static;display:flex;opacity:1;transform:none;
margin:10px 12px 0;width:calc(100% - 24px);
background:transparent;border:1.5px solid var(--az-ink);color:var(--az-ink);
border-radius:999px;text-transform:uppercase;letter-spacing:.1em;font-size:11px;font-weight:700;padding:9px 12px;transition:all .2s}
.az-carousel .product-card-clean .clean-hover-atc:hover{background:var(--az-ink);color:#fff}
.az-carousel .clean-touch-atc{display:none}
.az-carousel .clean-heart{border:1px solid var(--az-line)}
/* Editorial bands: readability scrim on the light senteurs image */
.az-band-senteurs .cta-v2-overlay,.az-band-senteurs [class*=overlay]{
background:linear-gradient(90deg,rgba(255,251,251,.88) 0%,rgba(255,251,251,.55) 38%,rgba(255,251,251,0) 65%);opacity:1}
/* Editorial bands: contained inner block, left aligned, ink type */
.az-band .cta-v2-section .cta-v2-centered,.az-band section .cta-v2-centered{max-width:1140px;margin:0 auto;padding:0 24px}
.az-band .section-heading-text{font-size:26px;letter-spacing:.14em;max-width:560px}
.az-band-home .section-heading-text,.az-band-senteurs .section-heading-text{color:#fff}
.az-band-home .section-heading-subtitle-top,.az-band-senteurs .section-heading-subtitle-top{color:#f7c9d0}
.az-band .section-heading-description{color:rgba(255,255,255,.92)}
.az-band .section-heading-description,.az-band .cta-v2-description{max-width:520px;font-size:15.5px;line-height:1.75}
.az-band .cta-v2-btn{text-transform:none;letter-spacing:.02em;font-size:14.5px;font-weight:600;padding:.95rem 2.2rem}
.az-gloss-btn a{text-transform:none;letter-spacing:.02em;font-size:14px;font-weight:600;padding:.85rem 2rem}
/* VOIR TOUT link injected by custom_js on left-aligned carousels */
.az-voir-tout{position:absolute;right:0;top:50%;transform:translateY(-50%);color:var(--az-ink);font-size:13px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;text-decoration:none}
.az-voir-tout:hover{color:var(--az-coral);text-decoration:none}
/* Feature cards (rich_text) */
.az-fc{position:relative;background:#f0efed;border-radius:4px;padding:36px 36px 30px;overflow:hidden;height:100%;display:flex;flex-direction:column}
.az-fc-body{position:relative;z-index:2;max-width:420px}
.az-fc h3{font-size:16px;letter-spacing:.2em;margin-bottom:14px}
.az-feature-card .rich-text-content ul,.az-fc ul{list-style:none;padding:0;margin:0 0 14px;color:var(--az-ink)}
.az-feature-card .rich-text-content ul li,.az-fc ul li{list-style:none;font-size:13.5px;padding:3px 0;font-weight:500}
.az-feature-card .rich-text-content ul li::marker{content:''}
.az-fc ul li::before{content:'—';color:var(--az-coral);margin-right:8px}
.az-fc p{color:var(--az-body);font-size:13.5px;line-height:1.7;margin-bottom:20px}
.rich-text-content a.az-fc-btn{display:inline-block;background:var(--az-pink);color:var(--az-ink);border-radius:999px;
padding:12px 24px;font-size:12.5px;font-weight:600;text-transform:none;letter-spacing:.02em;
text-decoration:none;transition:all .2s;margin-bottom:0}
.rich-text-content a.az-fc-btn:hover{background:var(--az-ink);color:#fff;text-decoration:none}
/* Testimonials carousel on the pink band: white square card, thin ink border,
single centered slide, gold stars (finished by custom_js) */
.az-avis [class*="-carousel-slide"] > div{max-width:860px;margin-left:auto;margin-right:auto}
.az-avis [class*=star],.az-avis .fa-star{color:#f2b01e}
.az-avis [class*=carousel-btn]{background:transparent;border:2px solid var(--az-ink);border-radius:50%;color:var(--az-ink)}
/* Instagram strip: ink outlined follow pill instead of the gradient */
.ig-feed-follow__btn{background:transparent;border:1.5px solid var(--az-ink);color:var(--az-ink);
border-radius:999px;text-transform:uppercase;letter-spacing:.1em;font-size:11.5px;font-weight:700;box-shadow:none}
.ig-feed-follow__btn:hover{background:var(--az-ink);color:#fff}
/* Buttons platform-wide: pill feel */
.btn-primary{border-radius:999px}
/* ═══════════ Mobile & tablet: premium rhythm ═══════════ */
@media (max-width:991.98px){
.az-voir-tout{position:static;transform:none;display:inline-block;margin-top:6px}
}
@media (max-width:767.98px){
/* type scale */
.az-univers .section-heading-text,.az-carousel .section-heading-text,.az-avis .section-heading-text,.az-insta .section-heading-text{font-size:17px;letter-spacing:.12em}
.az-band .section-heading-text{font-size:19px;line-height:1.3}
.section-heading-subtitle-top{font-size:10px}
/* hero */
.az-hero .hero-heading{font-size:24px;line-height:1.2}
.az-hero .hero-description{font-size:13.5px;line-height:1.65}
.az-hero .hero-cta-button{font-size:13px;padding:.8rem 1.7rem}
.az-hero .hero-nav-btn{display:none}
/* rhythm: tighter but even */
.az-univers{padding-top:52px;padding-bottom:48px}
.az-carousel.az-new{padding-bottom:52px}
.az-carousel.az-gloss{padding-top:52px}
.az-gloss-btn{padding-bottom:52px}
.az-avis{padding-top:56px;padding-bottom:56px}
.az-insta{padding-top:52px;padding-bottom:56px}
/* bands */
.az-band .cta-v2-section,.az-band section{min-height:340px}
.az-band .cta-v2-section .cta-v2-centered,.az-band section .cta-v2-centered{padding:0 18px}
.az-band .section-heading-description,.az-band .cta-v2-description{font-size:14px;line-height:1.7}
.az-band .cta-v2-btn{font-size:13px;padding:.8rem 1.6rem}
/* feature cards */
.az-fc{padding:26px 20px 24px}
.az-fc h3{font-size:14px}
/* product cards */
.az-carousel .clean-title{min-height:34px;font-size:12px}
.az-carousel .clean-price-row{margin:2px 0 10px}
/* universe tiles: airy 2-col */
.az-univers .categories-grid{gap:10px}
.az-univers [class*=category-name],.az-univers h3{font-size:11px;letter-spacing:.14em}
/* trust marquee */
.az-trust [class*=marquee]{letter-spacing:.14em}
/* reviews card: breathing room from the screen edges */
.az-avis [class*="-carousel-slide"] > div{padding:22px 16px;max-width:calc(100% - 32px)}
}
</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"/>
<style>
.hero-carousel-container {
position: relative;
width: 100%;
}
.hero-carousel-container .swiper {
width: 100%;
height: 100%;
}
.hero-carousel-container .swiper-slide {
width: 100%;
height: 100%;
}
.hero-carousel-container .swiper-slide .hero-single-full {
width: 100%;
height: 100%;
}
.hero-nav-btn {
color: #fff !important;
background: rgba(0, 0, 0, 0.5) !important;
width: 44px !important;
height: 44px !important;
border-radius: 50% !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.hero-nav-btn:hover {
background: rgba(0, 0, 0, 0.7) !important;
}
.hero-nav-btn::after {
font-size: 20px !important;
}
.hero-pagination {
bottom: 20px !important;
}
.hero-pagination .swiper-pagination-bullet {
background: #fff;
opacity: 0.6;
width: 12px;
height: 12px;
}
.hero-pagination .swiper-pagination-bullet-active {
opacity: 1;
background: #fff;
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
/* Base Heading Styles */
.section-heading-wrapper {
margin-bottom: 2.5rem;
}
.section-heading-text {
margin: 0;
line-height: 1.3;
}
.section-heading-subtitle-top {
margin-top: 0;
margin-bottom: 0.75rem;
font-size: 0.95rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
opacity: 0.75;
}
.section-heading-description {
margin-top: 1rem;
margin-bottom: 0;
font-size: 1.05rem;
line-height: 1.6;
opacity: 0.85;
}
/* Legacy subtitle (kept for backwards compatibility) */
.section-heading-subtitle {
margin-top: 0.75rem;
margin-bottom: 0;
opacity: 0.85;
font-size: 1.1rem;
}
/* Decorator Line Styles */
.heading-decorator {
background: var(--secondary-color, #6c757d);
height: 3px;
border-radius: 2px;
}
.heading-decorator-top {
width: 60px;
margin-bottom: 1rem;
}
.heading-decorator-bottom {
width: 60px;
margin-top: 1rem;
}
.heading-decorator-before {
width: 40px;
height: 3px;
display: inline-block;
vertical-align: middle;
margin-right: 1rem;
}
/* Alignment Specific Decorator Positions */
.heading-align-left .heading-decorator-top,
.heading-align-left .heading-decorator-bottom {
margin-left: 0;
}
.heading-align-center .heading-decorator-top,
.heading-align-center .heading-decorator-bottom {
margin-left: auto;
margin-right: auto;
}
.heading-align-right .heading-decorator-top,
.heading-align-right .heading-decorator-bottom {
margin-left: auto;
margin-right: 0;
}
/* Preset 1: Classic - Traditional Serif */
.heading-preset-classic .section-heading-text {
font-family: 'Georgia', 'Times New Roman', serif;
font-size: 2.5rem;
font-weight: 600;
color: #2c3e50;
letter-spacing: -0.02em;
}
.heading-preset-classic .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #5a6c7d;
}
/* Preset 2: Modern - Clean Minimalist */
.heading-preset-modern .section-heading-text {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
font-size: 2.25rem;
font-weight: 300;
color: #1a1a1a;
letter-spacing: 0.05em;
text-transform: uppercase;
}
.heading-preset-modern .section-heading-subtitle {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
font-weight: 400;
color: #666666;
letter-spacing: 0.02em;
}
.heading-preset-modern .heading-decorator {
height: 2px;
width: 80px !important;
}
/* Preset 3: Bold - Heavy Impact */
.heading-preset-bold .section-heading-text {
font-family: 'Arial Black', 'Arial Bold', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000000;
letter-spacing: -0.03em;
text-transform: uppercase;
text-shadow: 2px 2px 0px rgba(0, 0, 0, 0.1);
}
.heading-preset-bold .section-heading-subtitle {
font-family: 'Arial', sans-serif;
font-weight: 600;
color: #333333;
font-size: 1.2rem;
}
.heading-preset-bold .heading-decorator {
height: 5px;
width: 100px !important;
}
/* Preset 4: Elegant - Script & Decorative */
.heading-preset-elegant .section-heading-text {
font-family: 'Brush Script MT', 'Lucida Handwriting', cursive;
font-size: 3rem;
font-weight: 400;
color: #8b4789;
letter-spacing: 0.03em;
position: relative;
}
.heading-preset-elegant .section-heading-text::first-letter {
font-size: 1.5em;
color: var(--secondary-color, #6c757d);
}
.heading-preset-elegant .section-heading-subtitle {
font-family: 'Georgia', serif;
font-style: italic;
color: #7d5a7b;
font-size: 1.15rem;
}
.heading-preset-elegant .heading-decorator {
background: linear-gradient(90deg, transparent, var(--secondary-color, #6c757d), transparent);
height: 2px;
width: 200px !important;
}
/* Preset 5: Tech - Futuristic Geometric */
.heading-preset-tech .section-heading-text {
font-family: 'Courier New', 'Consolas', monospace;
font-size: 2.5rem;
font-weight: 700;
color: #00d4ff;
letter-spacing: 0.1em;
text-transform: uppercase;
text-shadow:
0 0 10px rgba(0, 212, 255, 0.5),
0 0 20px rgba(0, 212, 255, 0.3),
0 0 30px rgba(0, 212, 255, 0.1);
position: relative;
}
.heading-preset-tech .section-heading-text::before {
content: '▸';
margin-right: 0.5rem;
color: var(--secondary-color, #6c757d);
}
.heading-preset-tech .section-heading-subtitle {
font-family: 'Courier New', monospace;
color: #4a9fb5;
letter-spacing: 0.05em;
}
.heading-preset-tech .heading-decorator {
background: linear-gradient(90deg,
var(--secondary-color, #6c757d) 0%,
var(--secondary-color, #6c757d) 50%,
transparent 50%,
transparent 100%);
background-size: 20px 100%;
height: 3px;
width: 150px !important;
}
/* Preset 6: Creative - Artistic Unique */
.heading-preset-creative .section-heading-text {
font-family: 'Trebuchet MS', 'Lucida Sans', sans-serif;
font-size: 2.75rem;
font-weight: 700;
color: #ff6b6b;
letter-spacing: 0.02em;
position: relative;
display: inline-block;
background: linear-gradient(135deg, #ff6b6b 0%, #feca57 50%, #48dbfb 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.heading-preset-creative .section-heading-subtitle {
font-family: 'Trebuchet MS', sans-serif;
color: #95a5a6;
font-weight: 500;
}
.heading-preset-creative .heading-decorator {
background: linear-gradient(90deg, #ff6b6b, #feca57, #48dbfb);
height: 4px;
width: 120px !important;
border-radius: 2px;
}
/* Preset 7: Fashion - Thin Elegant Serif */
.heading-preset-fashion .section-heading-text {
font-family: 'Playfair Display', 'Georgia', serif;
font-size: 2.5rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.heading-preset-fashion .heading-decorator {
background: linear-gradient(90deg, transparent, #c9a96e, transparent);
height: 1px;
width: 200px !important;
}
/* Preset 8: Luxury - Gold Accent Serif */
.heading-preset-luxury .section-heading-text {
font-family: 'Didot', 'Georgia', serif;
font-size: 2.75rem;
font-weight: 400;
color: #1a1a1a;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.heading-preset-luxury .section-heading-subtitle-top {
color: #c9a96e;
letter-spacing: 0.2em;
}
.heading-preset-luxury .heading-decorator {
background: #c9a96e;
height: 2px;
width: 80px !important;
}
/* Preset 9: Streetwear - Heavy Uppercase */
.heading-preset-streetwear .section-heading-text {
font-family: 'Impact', 'Arial Black', sans-serif;
font-size: 3rem;
font-weight: 900;
color: #000;
letter-spacing: -0.02em;
text-transform: uppercase;
line-height: 0.95;
}
.heading-preset-streetwear .heading-decorator {
background: #000;
height: 6px;
width: 100% !important;
}
/* Preset 10: Minimal - Barely There */
.heading-preset-minimal .section-heading-text {
font-family: -apple-system, 'Helvetica Neue', sans-serif;
font-size: 1.75rem;
font-weight: 300;
color: #555;
letter-spacing: 0.15em;
text-transform: uppercase;
}
.heading-preset-minimal .heading-decorator {
background: #ddd;
height: 1px;
width: 40px !important;
}
/* Preset 11: Organic - Natural Handwritten */
.heading-preset-organic .section-heading-text {
font-family: 'Caveat', 'Comic Sans MS', cursive;
font-size: 2.75rem;
font-weight: 700;
color: #2d5016;
letter-spacing: 0.01em;
}
.heading-preset-organic .section-heading-subtitle-top {
color: #6b8e23;
}
.heading-preset-organic .heading-decorator {
background: linear-gradient(90deg, transparent, #6b8e23, transparent);
height: 2px;
width: 120px !important;
}
/* Preset 12: Mega - Store Title */
.heading-preset-mega .section-heading-text {
font-family: 'Montserrat', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 800;
color: #1e3a5f;
letter-spacing: 0;
text-transform: uppercase;
position: relative;
padding-bottom: 12px;
}
.heading-preset-mega .section-heading-text::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 4px;
background: var(--primary-color, #3b82f6);
border-radius: 2px;
}
.heading-align-left .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-left .section-heading-text::after { left: 0; transform: none; }
.heading-align-right .heading-preset-mega .section-heading-text::after,
.heading-preset-mega.heading-align-right .section-heading-text::after { left: auto; right: 0; transform: none; }
/* Preset 13: Pharmacy - Clean Medical */
.heading-preset-pharmacy .section-heading-text {
font-family: 'Nunito Sans', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #0d6efd;
letter-spacing: 0;
}
.heading-preset-pharmacy .heading-decorator {
background: linear-gradient(90deg, #0d6efd, #20c997);
height: 3px;
width: 60px !important;
border-radius: 3px;
}
/* Preset 14: Gradient Line - Colorful accent */
.heading-preset-gradient-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
}
.heading-preset-gradient-line .heading-decorator {
background: linear-gradient(90deg, #6366f1, #ec4899, #f59e0b);
height: 4px;
width: 100px !important;
border-radius: 2px;
}
/* Preset 15: Underline - Text with underline */
.heading-preset-underline .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2.25rem;
font-weight: 700;
color: #1f2937;
display: inline;
padding-bottom: 6px;
border-bottom: 3px solid var(--primary-color, #3b82f6);
}
/* Preset 16: Boxed - Text in a box */
.heading-preset-boxed .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.5rem;
font-weight: 700;
color: #fff !important;
background: #1f2937 !important;
padding: 12px 28px !important;
display: inline-block;
letter-spacing: 0.05em;
text-transform: uppercase;
}
/* Preset 17: Side Line - Line on the left */
.heading-preset-side-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 2rem;
font-weight: 700;
color: #1f2937;
padding-left: 16px !important;
border-left: 4px solid var(--primary-color, #3b82f6);
display: block !important;
}
/* Preset 18: Dual Line - Lines on both sides */
.heading-preset-dual-line {
display: flex !important;
align-items: center;
gap: 16px;
}
.heading-preset-dual-line::before,
.heading-preset-dual-line::after {
content: '';
flex: 1;
height: 1px;
background: #ddd;
}
.heading-preset-dual-line .section-heading-text {
font-family: 'Inter', -apple-system, sans-serif;
font-size: 1.75rem;
font-weight: 600;
color: #333;
white-space: nowrap;
}
/* Decorator width variants */
.deco-w-short { width: 60px !important; }
.deco-w-medium { width: 120px !important; }
.deco-w-heading { width: auto !important; min-width: 60px; max-width: 200px; }
.deco-w-full { width: 100% !important; }
/* Decorator style variants */
.deco-s-dashed { background: none !important; border-top-style: dashed; border-top-width: inherit; border-top-color: inherit; }
.deco-s-dotted { background: none !important; border-top-style: dotted; border-top-width: inherit; border-top-color: inherit; }
.deco-s-double { background: none !important; border-top-style: double; border-top-width: inherit; border-top-color: inherit; height: auto !important; }
.deco-s-gradient { background: linear-gradient(90deg, transparent, currentColor, transparent) !important; }
/* Animation Styles — paused until in viewport */
.animation-fade-in,
.animation-fade-up,
.animation-fade-down,
.animation-slide-left,
.animation-slide-right,
.animation-zoom-in {
opacity: 0;
animation-duration: var(--animation-duration, 800ms);
animation-timing-function: ease-out;
animation-fill-mode: forwards;
animation-play-state: paused;
}
.animation-fade-in { animation-name: fadeIn; }
.animation-fade-up { animation-name: fadeUp; }
.animation-fade-down { animation-name: fadeDown; }
.animation-slide-left { animation-name: slideLeft; }
.animation-slide-right { animation-name: slideRight; }
.animation-zoom-in { animation-name: zoomIn; }
/* Play animation when element is in viewport */
.animation-fade-in.animate-visible,
.animation-fade-up.animate-visible,
.animation-fade-down.animate-visible,
.animation-slide-left.animate-visible,
.animation-slide-right.animate-visible,
.animation-zoom-in.animate-visible {
animation-play-state: running;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideLeft {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideRight {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Responsive adjustments */
@media (max-width: 768px) {
.section-heading-wrapper [class*="heading-preset-"] .section-heading-text,
.heading-preset-classic .section-heading-text,
.heading-preset-modern .section-heading-text,
.heading-preset-bold .section-heading-text,
.heading-preset-elegant .section-heading-text,
.heading-preset-tech .section-heading-text,
.heading-preset-creative .section-heading-text,
.heading-preset-fashion .section-heading-text,
.heading-preset-luxury .section-heading-text,
.heading-preset-streetwear .section-heading-text,
.heading-preset-minimal .section-heading-text,
.heading-preset-organic .section-heading-text,
.heading-preset-mega .section-heading-text,
.heading-preset-pharmacy .section-heading-text,
.heading-preset-gradient-line .section-heading-text,
.heading-preset-underline .section-heading-text,
.heading-preset-boxed .section-heading-text,
.heading-preset-side-line .section-heading-text,
.heading-preset-dual-line .section-heading-text {
font-size: 1.5rem;
}
.heading-preset-bold .section-heading-text,
.heading-preset-streetwear .section-heading-text {
font-size: 1.75rem;
}
.section-heading-subtitle { font-size: 1rem; }
.heading-decorator-top, .heading-decorator-bottom, .heading-decorator-before { width: 40px !important; }
.deco-w-full { width: 100% !important; }
}
</style>
<style>
.hero-banner-section {
position: relative;
overflow: hidden;
}
</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
<style>
/* Categories Widget Styles */
#categories-widget-6ab697cbece39 .category-card {
position: relative;
border-radius: 2px;
overflow: hidden;
transition: all 0.3s ease;
text-decoration: none;
display: block;
}
#categories-widget-6ab697cbece39 .category-card:hover {
transform: translateY(-3px);
}
/* Overlay Card Style */
#categories-widget-6ab697cbece39 .category-card.style-overlay {
background: #000;
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-image-wrapper {
position: relative;
padding-bottom: 66.67%;
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease, opacity 0.3s ease;
}
#categories-widget-6ab697cbece39 .category-card.style-overlay:hover .category-image {
transform: scale(1.1);
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(0deg, rgba(0,0,0,0.65) 0%, rgba(0,0,0,0.1) 50%, transparent 100%);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 16px 18px;
transition: background 0.3s ease;
}
#categories-widget-6ab697cbece39 .category-card.style-overlay:hover .category-overlay {
background: linear-gradient(0deg, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.2) 60%, rgba(0,0,0,0.05) 100%);
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-name {
color: #ffffff;
font-size: 14px;
font-weight: 600;
margin: 0 0 3px;
line-height: 1.3;
text-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-description {
color: rgba(255, 255, 255, 0.9);
font-size: 12px;
margin: 0 0 4px;
line-height: 1.4;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
#categories-widget-6ab697cbece39 .category-card.style-overlay .category-count {
color: rgba(255, 255, 255, 0.8);
font-size: 11px;
opacity: 0.85;
}
/* Below Image Card Style */
#categories-widget-6ab697cbece39 .category-card.style-below {
background: #ffffff;
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-image-wrapper {
position: relative;
padding-bottom: 66.67%;
overflow: hidden;
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
#categories-widget-6ab697cbece39 .category-card.style-below:hover .category-image {
transform: scale(1.1);
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-content {
padding: 14px 16px;
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-name {
color: #333333;
font-size: 14px;
font-weight: 600;
margin: 0 0 4px;
line-height: 1.3;
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-description {
color: #666666;
font-size: 12px;
margin: 0 0 4px;
line-height: 1.4;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
#categories-widget-6ab697cbece39 .category-card.style-below .category-count {
color: #999999;
font-size: 11px;
}
/* Minimal Card Style */
#categories-widget-6ab697cbece39 .category-card.style-minimal {
background: transparent;
text-align: center;
box-shadow: none;
padding: 12px 8px;
border-radius: 2px;
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .category-card.style-minimal:hover {
box-shadow: none;
background: rgba(0,0,0,0.02);
}
#categories-widget-6ab697cbece39 .category-card.style-minimal .category-image-wrapper {
position: relative;
width: 100%;
aspect-ratio: 1;
max-width: 140px;
margin: 0 auto 14px;
border-radius: 2px;
overflow: hidden;
border: 2px solid #f0f0f0;
transition: all 0.3s ease;
background: #f9fafb;
}
#categories-widget-6ab697cbece39 .category-card.style-minimal:hover .category-image-wrapper {
border-color: var(--accent-color, #667eea);
transform: translateY(-3px);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);
}
#categories-widget-6ab697cbece39 .category-card.style-minimal .category-image {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.4s ease;
}
#categories-widget-6ab697cbece39 .category-card.style-minimal:hover .category-image {
transform: scale(1.08);
}
#categories-widget-6ab697cbece39 .category-card.style-minimal .category-name {
color: #333333;
font-size: 13px;
font-weight: 600;
margin: 0 0 4px;
line-height: 1.3;
}
#categories-widget-6ab697cbece39 .category-card.style-minimal .category-count {
color: #999999;
font-size: 11px;
}
/* Grid Responsive - mobile first */
#categories-widget-6ab697cbece39 .categories-grid {
grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 768px) {
#categories-widget-6ab697cbece39 .categories-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (min-width: 1024px) {
#categories-widget-6ab697cbece39 .categories-grid {
grid-template-columns: repeat(4, 1fr);
}
}
/* Carousel Navigation */
#categories-widget-6ab697cbece39 .categories-nav-btn {
width: 44px;
height: 44px;
background: white;
border-radius: 50%;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .categories-nav-btn:after {
font-size: 18px;
font-weight: 700;
color: #333;
}
#categories-widget-6ab697cbece39 .categories-nav-btn:hover {
background: var(--accent-color, #667eea);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
}
#categories-widget-6ab697cbece39 .categories-nav-btn:hover:after {
color: white;
}
#categories-widget-6ab697cbece39 .categories-pagination {
position: relative !important;
margin-top: 30px;
}
#categories-widget-6ab697cbece39 .swiper-pagination-bullet {
width: 12px;
height: 12px;
background: #dee2e6;
opacity: 1;
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .swiper-pagination-bullet-active {
background: var(--accent-color, #667eea);
width: 32px;
border-radius: 6px;
}
/* CTA Button Styles */
#categories-widget-6ab697cbece39 .btn-categories-primary {
display: inline-flex;
align-items: center;
padding: 14px 32px;
background: var(--accent-color, #667eea);
color: white;
border-radius: 8px;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .btn-categories-primary:hover {
background: var(--accent-hover, #5a6fd6);
transform: translateY(-2px);
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
color: white;
}
#categories-widget-6ab697cbece39 .btn-categories-secondary {
display: inline-flex;
align-items: center;
padding: 14px 32px;
background: #6c757d;
color: white;
border-radius: 8px;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .btn-categories-secondary:hover {
background: #5a6268;
transform: translateY(-2px);
color: white;
}
#categories-widget-6ab697cbece39 .btn-categories-outline {
display: inline-flex;
align-items: center;
padding: 12px 30px;
background: transparent;
color: var(--accent-color, #667eea);
border: 2px solid var(--accent-color, #667eea);
border-radius: 8px;
font-weight: 600;
text-decoration: none;
transition: all 0.3s ease;
}
#categories-widget-6ab697cbece39 .btn-categories-outline:hover {
background: var(--accent-color, #667eea);
color: white;
transform: translateY(-2px);
}
/* Animations */
@keyframes fadeUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
#categories-widget-6ab697cbece39 .animation-fade-up {
animation: fadeUp var(--animation-duration, 800ms) ease forwards;
animation-play-state: paused;
opacity: 0;
}
#categories-widget-6ab697cbece39 .animation-fade-up.animate-visible {
animation-play-state: running;
}
#categories-widget-6ab697cbece39 .animation-delay-100 { animation-delay: 100ms; }
#categories-widget-6ab697cbece39 .animation-delay-200 { animation-delay: 200ms; }
#categories-widget-6ab697cbece39 .animation-delay-300 { animation-delay: 300ms; }
#categories-widget-6ab697cbece39 .animation-delay-400 { animation-delay: 400ms; }
#categories-widget-6ab697cbece39 .animation-delay-500 { animation-delay: 500ms; }
#categories-widget-6ab697cbece39 .animation-delay-600 { animation-delay: 600ms; }
#categories-widget-6ab697cbece39 .animation-delay-700 { animation-delay: 700ms; }
#categories-widget-6ab697cbece39 .animation-delay-800 { animation-delay: 800ms; }
@media (max-width: 768px) {
#categories-widget-6ab697cbece39 .categories-nav-btn {
display: none;
}
#categories-widget-6ab697cbece39 .category-card.style-minimal .category-image-wrapper {
width: 80px;
height: 80px;
}
}
</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
<style>
.ratio-1x1 {
position: relative;
padding-bottom: 100%;
overflow: hidden;
}
.ratio-4x3 {
position: relative;
padding-bottom: 75%;
overflow: hidden;
}
.ratio-16x9 {
position: relative;
padding-bottom: 56.25%;
overflow: hidden;
}
.ratio-1x1 img,
.ratio-4x3 img,
.ratio-16x9 img {
position: absolute;
top: 0;
left: 0;
}
/* Carousel Navigation — override Swiper 11 via CSS variables + specificity */
.product-carousel-section {
--swiper-navigation-size: 40px;
--swiper-navigation-color: #333;
}
.product-carousel-section .swiper-button-next,
.product-carousel-section .swiper-button-prev {
width: 40px !important;
height: 40px !important;
background: #fff !important;
border-radius: 50% !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
border: 1px solid rgba(0, 0, 0, 0.08);
transition: all 0.25s ease;
top: 50%;
margin-top: -20px;
}
.product-carousel-section .swiper-button-next::after,
.product-carousel-section .swiper-button-prev::after {
font-size: 16px !important;
color: #333;
}
.product-carousel-section .swiper-button-next:hover,
.product-carousel-section .swiper-button-prev:hover {
background: var(--primary-color, #333) !important;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
border-color: transparent;
}
.product-carousel-section .swiper-button-next:hover::after,
.product-carousel-section .swiper-button-prev:hover::after {
color: #fff;
}
.product-carousel-section .swiper-button-disabled {
opacity: 0.25 !important;
cursor: not-allowed;
box-shadow: none !important;
}
.product-carousel-section .swiper-button-next { right: 0; }
.product-carousel-section .swiper-button-prev { left: 0; }
/* Pagination Dots */
.swiper-pagination {
position: relative !important;
margin-top: 30px;
}
.swiper-pagination-bullet {
width: 12px;
height: 12px;
background: var(--swiper-pagination-bullet-inactive-color, #dee2e6);
opacity: 1;
transition: all 0.3s ease;
}
.swiper-pagination-bullet-active {
background: var(--swiper-pagination-color, #007bff);
width: 32px;
border-radius: 6px;
}
/* Carousel Container */
.product-carousel-wrapper {
padding: 0 20px;
}
@media (max-width: 768px) {
.product-carousel-wrapper {
padding: 0 10px;
}
.product-carousel-section .carousel-nav-btn.swiper-button-next,
.product-carousel-section .carousel-nav-btn.swiper-button-prev {
display: none;
}
}
</style>
<style>
/* ============================================
CTA V2 - Premium Call to Action
============================================ */
#cta-v2-6ab697cbf2f48 {
display: flex;
align-items: center;
}
/* Video Background */
#cta-v2-6ab697cbf2f48 .cta-v2-video-bg {
position: absolute;
top: 50%;
left: 50%;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
transform: translate(-50%, -50%);
object-fit: cover;
z-index: 0;
}
/* Overlay */
#cta-v2-6ab697cbf2f48 .cta-v2-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
}
/* Particles Layer */
#cta-v2-6ab697cbf2f48 .cta-v2-particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
pointer-events: none;
overflow: hidden;
}
/* Inner Content */
#cta-v2-6ab697cbf2f48 .cta-v2-inner {
position: relative;
z-index: 5;
width: 100%;
}
/* Animated Gradient */
/* ---- Heading & Description ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-heading {
font-weight: 800;
line-height: 1.15;
margin: 0 0 20px 0;
letter-spacing: -0.02em;
}
#cta-v2-6ab697cbf2f48 .cta-v2-description {
font-size: 18px;
line-height: 1.7;
margin: 0 0 36px 0;
max-width: 600px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-centered .cta-v2-description {
margin-left: auto;
margin-right: auto;
}
/* ---- Buttons ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-buttons {
display: flex;
flex-wrap: wrap;
gap: 16px;
align-items: center;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn {
display: inline-flex;
align-items: center;
justify-content: center;
text-decoration: none;
font-weight: 700;
letter-spacing: 0.02em;
transition: all 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
cursor: pointer;
position: relative;
overflow: hidden;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255,255,255,0.15);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s ease, height 0.6s ease;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn:hover::after {
width: 300px;
height: 300px;
}
/* Primary Button */
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary {
padding: 13px 32px;
font-size: 15px;
border-radius: 999px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-solid {
background: #f7c9d0;
color: #1a1a1a;
border: 2px solid #f7c9d0;
box-shadow: 0 4px 15px rgba(0,0,0,0.15);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-solid:hover {
background: #1a1a1a;
color: #ffffff;
border-color: #1a1a1a;
transform: translateY(-3px);
box-shadow: 0 8px 30px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-outline {
background: transparent;
color: #1a1a1a;
border: 2px solid #f7c9d0;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-outline:hover {
background: #f7c9d0;
color: #ffffff;
transform: translateY(-3px);
box-shadow: 0 8px 30px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-gradient {
background: linear-gradient(135deg, #f7c9d0, #1a1a1a);
color: #1a1a1a;
border: none;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-primary.cta-v2-btn-gradient:hover {
transform: translateY(-3px) scale(1.02);
box-shadow: 0 8px 35px rgba(0,0,0,0.3);
}
/* Secondary Button */
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary {
padding: 13px 32px;
font-size: 15px;
border-radius: var(--sf-btn-radius, 50px);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-solid {
background: transparent;
color: #ffffff;
border: 2px solid transparent;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-solid:hover {
background: rgba(255,255,255,0.15);
color: #ffffff;
transform: translateY(-3px);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-outline {
background: transparent;
color: #ffffff;
border: 2px solid #ffffff;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-outline:hover {
background: rgba(255,255,255,0.15);
color: #ffffff;
transform: translateY(-3px);
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-ghost {
background: transparent;
color: #ffffff;
border: none;
text-decoration: underline;
text-underline-offset: 4px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn-secondary.cta-v2-btn-ghost:hover {
color: #ffffff;
transform: translateY(-2px);
}
/* ---- Email Capture ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-email-form {
margin-bottom: 28px;
max-width: 520px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-centered .cta-v2-email-form {
margin-left: auto;
margin-right: auto;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input-wrap {
display: flex;
align-items: center;
background: rgba(255,255,255,0.12);
border: 2px solid rgba(255,255,255,0.25);
border-radius: 999px;
padding: 5px;
transition: border-color 0.3s ease, box-shadow 0.3s ease;
backdrop-filter: blur(10px);
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input-wrap:focus-within {
border-color: rgba(255,255,255,0.6);
box-shadow: 0 0 0 4px rgba(255,255,255,0.1);
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input {
flex: 1;
background: transparent;
border: none;
outline: none;
color: #ffffff;
font-size: 15px;
padding: 12px 18px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input::placeholder {
color: rgba(255,255,255,0.5);
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-btn {
padding: 12px 28px;
border: none;
font-weight: 700;
font-size: 14px;
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
flex-shrink: 0;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-btn:hover {
opacity: 0.9;
transform: scale(1.03);
}
/* ---- Split Layout ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-split {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-reverse {
direction: rtl;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-reverse > * {
direction: ltr;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-image {
position: relative;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-image img {
width: 100%;
height: auto;
border-radius: 16px;
box-shadow: 0 25px 60px rgba(0,0,0,0.3);
transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-image:hover img {
transform: scale(1.03) rotate(1deg);
}
/* ---- Floating Card ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-floating-card {
background: rgba(255,255,255,0.06);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255,255,255,0.12);
border-radius: 24px;
padding: 60px 50px;
text-align: center;
max-width: 800px;
margin: 0 auto;
box-shadow: 0 25px 60px rgba(0,0,0,0.15), inset 0 1px 0 rgba(255,255,255,0.1);
position: relative;
overflow: hidden;
}
#cta-v2-6ab697cbf2f48 .cta-v2-floating-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 200%;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
animation: cta-v2-6ab697cbf2f48-shimmer 3s infinite;
}
@keyframes cta-v2-6ab697cbf2f48-shimmer {
0% { left: -100%; }
100% { left: 100%; }
}
/* ---- Banner Style ---- */
#cta-v2-6ab697cbf2f48.cta-v2-banner {
min-height: auto !important;
}
#cta-v2-6ab697cbf2f48.cta-v2-banner .cta-v2-centered {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 24px;
}
#cta-v2-6ab697cbf2f48.cta-v2-banner .cta-v2-heading {
margin-bottom: 0;
font-size: clamp(20px, 3vw, h2px);
}
#cta-v2-6ab697cbf2f48.cta-v2-banner .cta-v2-description {
margin-bottom: 0;
}
#cta-v2-6ab697cbf2f48.cta-v2-banner .cta-v2-buttons {
flex-shrink: 0;
}
/* ---- Particles ---- */
/* ---- Entrance Animation ---- */
#cta-v2-6ab697cbf2f48 .cta-v2-heading,
#cta-v2-6ab697cbf2f48 .cta-v2-description,
#cta-v2-6ab697cbf2f48 .cta-v2-buttons,
#cta-v2-6ab697cbf2f48 .cta-v2-email-form,
#cta-v2-6ab697cbf2f48 .cta-v2-split-image {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.7s ease, transform 0.7s ease;
}
#cta-v2-6ab697cbf2f48.cta-v2-visible .cta-v2-heading {
opacity: 1;
transform: translateY(0);
transition-delay: 0.1s;
}
#cta-v2-6ab697cbf2f48.cta-v2-visible .cta-v2-description {
opacity: 1;
transform: translateY(0);
transition-delay: 0.2s;
}
#cta-v2-6ab697cbf2f48.cta-v2-visible .cta-v2-email-form {
opacity: 1;
transform: translateY(0);
transition-delay: 0.3s;
}
#cta-v2-6ab697cbf2f48.cta-v2-visible .cta-v2-buttons {
opacity: 1;
transform: translateY(0);
transition-delay: 0.35s;
}
#cta-v2-6ab697cbf2f48.cta-v2-visible .cta-v2-split-image {
opacity: 1;
transform: translateY(0);
transition-delay: 0.25s;
}
/* ---- Responsive ---- */
@media (max-width: 991px) {
#cta-v2-6ab697cbf2f48 .cta-v2-split {
grid-template-columns: 1fr;
gap: 40px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-reverse {
direction: ltr;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-content {
text-align: center !important;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-content .cta-v2-buttons {
justify-content: center;
}
#cta-v2-6ab697cbf2f48 .cta-v2-split-content .cta-v2-description {
margin-left: auto;
margin-right: auto;
}
#cta-v2-6ab697cbf2f48 .cta-v2-floating-card {
padding: 40px 28px;
}
#cta-v2-6ab697cbf2f48.cta-v2-banner .cta-v2-centered {
flex-direction: column;
text-align: center;
}
}
@media (max-width: 575px) {
#cta-v2-6ab697cbf2f48 .cta-v2-heading {
font-size: clamp(24px, 6vw, h2px) !important;
}
#cta-v2-6ab697cbf2f48 .cta-v2-buttons {
flex-direction: column;
width: 100%;
}
#cta-v2-6ab697cbf2f48 .cta-v2-btn {
width: 100%;
text-align: center;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input-wrap {
flex-direction: column;
border-radius: 16px;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-input {
width: 100%;
text-align: center;
}
#cta-v2-6ab697cbf2f48 .cta-v2-email-btn {
width: 100%;
border-radius: 999px !important;
}
}
</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
<style>
.ratio-1x1 {
position: relative;
padding-bottom: 100%;
overflow: hidden;
}
.ratio-4x3 {
position: relative;
padding-bottom: 75%;
overflow: hidden;
}
.ratio-16x9 {
position: relative;
padding-bottom: 56.25%;
overflow: hidden;
}
.ratio-1x1 img,
.ratio-4x3 img,
.ratio-16x9 img {
position: absolute;
top: 0;
left: 0;
}
/* Carousel Navigation — override Swiper 11 via CSS variables + specificity */
.product-carousel-section {
--swiper-navigation-size: 40px;
--swiper-navigation-color: #333;
}
.product-carousel-section .swiper-button-next,
.product-carousel-section .swiper-button-prev {
width: 40px !important;
height: 40px !important;
background: #fff !important;
border-radius: 50% !important;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
border: 1px solid rgba(0, 0, 0, 0.08);
transition: all 0.25s ease;
top: 50%;
margin-top: -20px;
}
.product-carousel-section .swiper-button-next::after,
.product-carousel-section .swiper-button-prev::after {
font-size: 16px !important;
color: #333;
}
.product-carousel-section .swiper-button-next:hover,
.product-carousel-section .swiper-button-prev:hover {
background: var(--primary-color, #333) !important;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
border-color: transparent;
}
.product-carousel-section .swiper-button-next:hover::after,
.product-carousel-section .swiper-button-prev:hover::after {
color: #fff;
}
.product-carousel-section .swiper-button-disabled {
opacity: 0.25 !important;
cursor: not-allowed;
box-shadow: none !important;
}
.product-carousel-section .swiper-button-next { right: 0; }
.product-carousel-section .swiper-button-prev { left: 0; }
/* Pagination Dots */
.swiper-pagination {
position: relative !important;
margin-top: 30px;
}
.swiper-pagination-bullet {
width: 12px;
height: 12px;
background: var(--swiper-pagination-bullet-inactive-color, #dee2e6);
opacity: 1;
transition: all 0.3s ease;
}
.swiper-pagination-bullet-active {
background: var(--swiper-pagination-color, #007bff);
width: 32px;
border-radius: 6px;
}
/* Carousel Container */
.product-carousel-wrapper {
padding: 0 20px;
}
@media (max-width: 768px) {
.product-carousel-wrapper {
padding: 0 10px;
}
.product-carousel-section .carousel-nav-btn.swiper-button-next,
.product-carousel-section .carousel-nav-btn.swiper-button-prev {
display: none;
}
}
</style>
<style>
/* Button Widget Animations */
.btn-hover-lift {
transition: all 0.3s ease !important;
}
.btn-hover-lift:hover {
transform: translateY(-3px) !important;
box-shadow: 0 8px 20px rgba(0,0,0,0.2) !important;
}
.btn-hover-grow {
transition: all 0.3s ease !important;
}
.btn-hover-grow:hover {
transform: scale(1.05) !important;
}
.btn-hover-pulse {
transition: all 0.3s ease !important;
}
.btn-hover-pulse:hover {
animation: btnPulse 0.6s ease-in-out !important;
}
@keyframes btnPulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
.btn-hover-shine {
position: relative;
overflow: hidden;
transition: all 0.3s ease !important;
}
.btn-hover-shine::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
transition: left 0.5s ease;
}
.btn-hover-shine:hover::before {
left: 100%;
}
/* Custom Button Hover States */
#button-widget-section-azal-7:hover {
background-color: #0056b3 !important;
border-color: #0056b3 !important;
color: #ffffff !important;
}
/* XLarge size for non-custom styles */
</style>
<style>
.rich-text-content h1,
.rich-text-content h2,
.rich-text-content h3,
.rich-text-content h4,
.rich-text-content h5,
.rich-text-content h6 {
margin-top: 1.5rem;
margin-bottom: 1rem;
font-weight: 600;
}
.rich-text-content h1 {
font-size: 2.5em;
}
.rich-text-content h2 {
font-size: 2em;
}
.rich-text-content h3 {
font-size: 1.75em;
}
.rich-text-content h4 {
font-size: 1.5em;
}
.rich-text-content h5 {
font-size: 1.25em;
}
.rich-text-content h6 {
font-size: 1em;
}
.rich-text-content p {
margin-bottom: 1rem;
}
.rich-text-content ul,
.rich-text-content ol {
margin-bottom: 1rem;
padding-left: 2rem;
}
.rich-text-content ul {
list-style-type: disc;
}
.rich-text-content ol {
list-style-type: decimal;
}
.rich-text-content li {
margin-bottom: 0.5rem;
}
.rich-text-content img {
max-width: 100%;
height: auto;
margin: 1rem 0;
border-radius: 4px;
}
.rich-text-content a {
color: inherit;
text-decoration: underline;
}
.rich-text-content a:hover {
opacity: 0.8;
}
.rich-text-content blockquote {
border-left: 4px solid #e5e7eb;
padding-left: 1.5rem;
margin: 1.5rem 0;
font-style: italic;
color: #6b7280;
}
.rich-text-content code {
background-color: #f3f4f6;
padding: 0.2rem 0.4rem;
border-radius: 3px;
font-family: monospace;
font-size: 0.9em;
}
.rich-text-content pre {
background-color: #1f2937;
color: #f3f4f6;
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
margin: 1rem 0;
}
.rich-text-content pre code {
background-color: transparent;
padding: 0;
color: inherit;
}
.rich-text-content table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
}
.rich-text-content table th,
.rich-text-content table td {
border: 1px solid #e5e7eb;
padding: 0.75rem;
text-align: left;
}
.rich-text-content table th {
background-color: #f9fafb;
font-weight: 600;
}
.rich-text-content hr {
border: none;
border-top: 1px solid #e5e7eb;
margin: 2rem 0;
}
.rich-text-content strong,
.rich-text-content b {
font-weight: 700;
}
.rich-text-content em,
.rich-text-content i {
font-style: italic;
}
</style>
<style>
.rich-text-content h1,
.rich-text-content h2,
.rich-text-content h3,
.rich-text-content h4,
.rich-text-content h5,
.rich-text-content h6 {
margin-top: 1.5rem;
margin-bottom: 1rem;
font-weight: 600;
}
.rich-text-content h1 {
font-size: 2.5em;
}
.rich-text-content h2 {
font-size: 2em;
}
.rich-text-content h3 {
font-size: 1.75em;
}
.rich-text-content h4 {
font-size: 1.5em;
}
.rich-text-content h5 {
font-size: 1.25em;
}
.rich-text-content h6 {
font-size: 1em;
}
.rich-text-content p {
margin-bottom: 1rem;
}
.rich-text-content ul,
.rich-text-content ol {
margin-bottom: 1rem;
padding-left: 2rem;
}
.rich-text-content ul {
list-style-type: disc;
}
.rich-text-content ol {
list-style-type: decimal;
}
.rich-text-content li {
margin-bottom: 0.5rem;
}
.rich-text-content img {
max-width: 100%;
height: auto;
margin: 1rem 0;
border-radius: 4px;
}
.rich-text-content a {
color: inherit;
text-decoration: underline;
}
.rich-text-content a:hover {
opacity: 0.8;
}
.rich-text-content blockquote {
border-left: 4px solid #e5e7eb;
padding-left: 1.5rem;
margin: 1.5rem 0;
font-style: italic;
color: #6b7280;
}
.rich-text-content code {
background-color: #f3f4f6;
padding: 0.2rem 0.4rem;
border-radius: 3px;
font-family: monospace;
font-size: 0.9em;
}
.rich-text-content pre {
background-color: #1f2937;
color: #f3f4f6;
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
margin: 1rem 0;
}
.rich-text-content pre code {
background-color: transparent;
padding: 0;
color: inherit;
}
.rich-text-content table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
}
.rich-text-content table th,
.rich-text-content table td {
border: 1px solid #e5e7eb;
padding: 0.75rem;
text-align: left;
}
.rich-text-content table th {
background-color: #f9fafb;
font-weight: 600;
}
.rich-text-content hr {
border: none;
border-top: 1px solid #e5e7eb;
margin: 2rem 0;
}
.rich-text-content strong,
.rich-text-content b {
font-weight: 700;
}
.rich-text-content em,
.rich-text-content i {
font-style: italic;
}
</style>
<style>
/* ============================================
CTA V2 - Premium Call to Action
============================================ */
#cta-v2-6ab697cc04f42 {
display: flex;
align-items: center;
}
/* Video Background */
#cta-v2-6ab697cc04f42 .cta-v2-video-bg {
position: absolute;
top: 50%;
left: 50%;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
transform: translate(-50%, -50%);
object-fit: cover;
z-index: 0;
}
/* Overlay */
#cta-v2-6ab697cc04f42 .cta-v2-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
}
/* Particles Layer */
#cta-v2-6ab697cc04f42 .cta-v2-particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2;
pointer-events: none;
overflow: hidden;
}
/* Inner Content */
#cta-v2-6ab697cc04f42 .cta-v2-inner {
position: relative;
z-index: 5;
width: 100%;
}
/* Animated Gradient */
/* ---- Heading & Description ---- */
#cta-v2-6ab697cc04f42 .cta-v2-heading {
font-weight: 800;
line-height: 1.15;
margin: 0 0 20px 0;
letter-spacing: -0.02em;
}
#cta-v2-6ab697cc04f42 .cta-v2-description {
font-size: 18px;
line-height: 1.7;
margin: 0 0 36px 0;
max-width: 600px;
}
#cta-v2-6ab697cc04f42 .cta-v2-centered .cta-v2-description {
margin-left: auto;
margin-right: auto;
}
/* ---- Buttons ---- */
#cta-v2-6ab697cc04f42 .cta-v2-buttons {
display: flex;
flex-wrap: wrap;
gap: 16px;
align-items: center;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn {
display: inline-flex;
align-items: center;
justify-content: center;
text-decoration: none;
font-weight: 700;
letter-spacing: 0.02em;
transition: all 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
cursor: pointer;
position: relative;
overflow: hidden;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255,255,255,0.15);
border-radius: 50%;
transform: translate(-50%, -50%);
transition: width 0.6s ease, height 0.6s ease;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn:hover::after {
width: 300px;
height: 300px;
}
/* Primary Button */
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary {
padding: 13px 32px;
font-size: 15px;
border-radius: 999px;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-solid {
background: #f7c9d0;
color: #1a1a1a;
border: 2px solid #f7c9d0;
box-shadow: 0 4px 15px rgba(0,0,0,0.15);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-solid:hover {
background: #ffffff;
color: #1a1a1a;
border-color: #ffffff;
transform: translateY(-3px);
box-shadow: 0 8px 30px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-outline {
background: transparent;
color: #1a1a1a;
border: 2px solid #f7c9d0;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-outline:hover {
background: #f7c9d0;
color: #1a1a1a;
transform: translateY(-3px);
box-shadow: 0 8px 30px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-gradient {
background: linear-gradient(135deg, #f7c9d0, #ffffff);
color: #1a1a1a;
border: none;
box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-primary.cta-v2-btn-gradient:hover {
transform: translateY(-3px) scale(1.02);
box-shadow: 0 8px 35px rgba(0,0,0,0.3);
}
/* Secondary Button */
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary {
padding: 13px 32px;
font-size: 15px;
border-radius: var(--sf-btn-radius, 50px);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-solid {
background: transparent;
color: #ffffff;
border: 2px solid transparent;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-solid:hover {
background: rgba(255,255,255,0.15);
color: #ffffff;
transform: translateY(-3px);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-outline {
background: transparent;
color: #ffffff;
border: 2px solid #ffffff;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-outline:hover {
background: rgba(255,255,255,0.15);
color: #ffffff;
transform: translateY(-3px);
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-ghost {
background: transparent;
color: #ffffff;
border: none;
text-decoration: underline;
text-underline-offset: 4px;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn-secondary.cta-v2-btn-ghost:hover {
color: #ffffff;
transform: translateY(-2px);
}
/* ---- Email Capture ---- */
#cta-v2-6ab697cc04f42 .cta-v2-email-form {
margin-bottom: 28px;
max-width: 520px;
}
#cta-v2-6ab697cc04f42 .cta-v2-centered .cta-v2-email-form {
margin-left: auto;
margin-right: auto;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input-wrap {
display: flex;
align-items: center;
background: rgba(255,255,255,0.12);
border: 2px solid rgba(255,255,255,0.25);
border-radius: 999px;
padding: 5px;
transition: border-color 0.3s ease, box-shadow 0.3s ease;
backdrop-filter: blur(10px);
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input-wrap:focus-within {
border-color: rgba(255,255,255,0.6);
box-shadow: 0 0 0 4px rgba(255,255,255,0.1);
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input {
flex: 1;
background: transparent;
border: none;
outline: none;
color: #ffffff;
font-size: 15px;
padding: 12px 18px;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input::placeholder {
color: rgba(255,255,255,0.5);
}
#cta-v2-6ab697cc04f42 .cta-v2-email-btn {
padding: 12px 28px;
border: none;
font-weight: 700;
font-size: 14px;
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
flex-shrink: 0;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-btn:hover {
opacity: 0.9;
transform: scale(1.03);
}
/* ---- Split Layout ---- */
#cta-v2-6ab697cc04f42 .cta-v2-split {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 60px;
align-items: center;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-reverse {
direction: rtl;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-reverse > * {
direction: ltr;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-image {
position: relative;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-image img {
width: 100%;
height: auto;
border-radius: 16px;
box-shadow: 0 25px 60px rgba(0,0,0,0.3);
transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
#cta-v2-6ab697cc04f42 .cta-v2-split-image:hover img {
transform: scale(1.03) rotate(1deg);
}
/* ---- Floating Card ---- */
#cta-v2-6ab697cc04f42 .cta-v2-floating-card {
background: rgba(255,255,255,0.06);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border: 1px solid rgba(255,255,255,0.12);
border-radius: 24px;
padding: 60px 50px;
text-align: center;
max-width: 800px;
margin: 0 auto;
box-shadow: 0 25px 60px rgba(0,0,0,0.15), inset 0 1px 0 rgba(255,255,255,0.1);
position: relative;
overflow: hidden;
}
#cta-v2-6ab697cc04f42 .cta-v2-floating-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 200%;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
animation: cta-v2-6ab697cc04f42-shimmer 3s infinite;
}
@keyframes cta-v2-6ab697cc04f42-shimmer {
0% { left: -100%; }
100% { left: 100%; }
}
/* ---- Banner Style ---- */
#cta-v2-6ab697cc04f42.cta-v2-banner {
min-height: auto !important;
}
#cta-v2-6ab697cc04f42.cta-v2-banner .cta-v2-centered {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 24px;
}
#cta-v2-6ab697cc04f42.cta-v2-banner .cta-v2-heading {
margin-bottom: 0;
font-size: clamp(20px, 3vw, h2px);
}
#cta-v2-6ab697cc04f42.cta-v2-banner .cta-v2-description {
margin-bottom: 0;
}
#cta-v2-6ab697cc04f42.cta-v2-banner .cta-v2-buttons {
flex-shrink: 0;
}
/* ---- Particles ---- */
/* ---- Entrance Animation ---- */
#cta-v2-6ab697cc04f42 .cta-v2-heading,
#cta-v2-6ab697cc04f42 .cta-v2-description,
#cta-v2-6ab697cc04f42 .cta-v2-buttons,
#cta-v2-6ab697cc04f42 .cta-v2-email-form,
#cta-v2-6ab697cc04f42 .cta-v2-split-image {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.7s ease, transform 0.7s ease;
}
#cta-v2-6ab697cc04f42.cta-v2-visible .cta-v2-heading {
opacity: 1;
transform: translateY(0);
transition-delay: 0.1s;
}
#cta-v2-6ab697cc04f42.cta-v2-visible .cta-v2-description {
opacity: 1;
transform: translateY(0);
transition-delay: 0.2s;
}
#cta-v2-6ab697cc04f42.cta-v2-visible .cta-v2-email-form {
opacity: 1;
transform: translateY(0);
transition-delay: 0.3s;
}
#cta-v2-6ab697cc04f42.cta-v2-visible .cta-v2-buttons {
opacity: 1;
transform: translateY(0);
transition-delay: 0.35s;
}
#cta-v2-6ab697cc04f42.cta-v2-visible .cta-v2-split-image {
opacity: 1;
transform: translateY(0);
transition-delay: 0.25s;
}
/* ---- Responsive ---- */
@media (max-width: 991px) {
#cta-v2-6ab697cc04f42 .cta-v2-split {
grid-template-columns: 1fr;
gap: 40px;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-reverse {
direction: ltr;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-content {
text-align: center !important;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-content .cta-v2-buttons {
justify-content: center;
}
#cta-v2-6ab697cc04f42 .cta-v2-split-content .cta-v2-description {
margin-left: auto;
margin-right: auto;
}
#cta-v2-6ab697cc04f42 .cta-v2-floating-card {
padding: 40px 28px;
}
#cta-v2-6ab697cc04f42.cta-v2-banner .cta-v2-centered {
flex-direction: column;
text-align: center;
}
}
@media (max-width: 575px) {
#cta-v2-6ab697cc04f42 .cta-v2-heading {
font-size: clamp(24px, 6vw, h2px) !important;
}
#cta-v2-6ab697cc04f42 .cta-v2-buttons {
flex-direction: column;
width: 100%;
}
#cta-v2-6ab697cc04f42 .cta-v2-btn {
width: 100%;
text-align: center;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input-wrap {
flex-direction: column;
border-radius: 16px;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-input {
width: 100%;
text-align: center;
}
#cta-v2-6ab697cc04f42 .cta-v2-email-btn {
width: 100%;
border-radius: 999px !important;
}
}
</style>
<style>
/* ============================================
TESTIMONIALS V2 - PREMIUM WIDGET
Scoped to: .tv2-6ab697cc0553a-section
============================================ */
/* --- MASONRY LAYOUT --- */
.tv2-6ab697cc0553a-masonry {
column-count: 1;
column-gap: 24px;
}
.tv2-6ab697cc0553a-masonry-item {
break-inside: avoid;
margin-bottom: 24px;
display: inline-block;
width: 100%;
}
/* --- GRID LAYOUT --- */
.tv2-6ab697cc0553a-grid {
display: grid;
grid-template-columns: repeat(1, 1fr);
gap: 24px;
}
.tv2-6ab697cc0553a-grid-item {
display: flex;
}
/* --- HIGHLIGHT LAYOUT --- */
.tv2-6ab697cc0553a-highlight {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px;
align-items: start;
}
.tv2-6ab697cc0553a-highlight-featured {
grid-row: 1 / -1;
}
.tv2-6ab697cc0553a-highlight-featured .tv2-6ab697cc0553a-card {
min-height: 100%;
}
.tv2-6ab697cc0553a-highlight-featured .tv2-6ab697cc0553a-card-text {
font-size: 1.15rem;
}
.tv2-6ab697cc0553a-highlight-featured .tv2-6ab697cc0553a-card-avatar-img {
width: 72px !important;
height: 72px !important;
}
.tv2-6ab697cc0553a-highlight-rest {
display: flex;
flex-direction: column;
gap: 24px;
}
/* --- CAROUSEL LAYOUT --- */
.tv2-6ab697cc0553a-carousel {
position: relative;
overflow: hidden;
padding: 8px 0 48px;
}
.tv2-6ab697cc0553a-carousel-track {
display: flex;
transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
gap: 24px;
}
.tv2-6ab697cc0553a-carousel-slide {
min-width: calc((100% - 0px) / 1);
flex-shrink: 0;
}
.tv2-6ab697cc0553a-carousel-btn {
position: absolute;
top: calc(50% - 24px);
transform: translateY(-50%);
width: 44px;
height: 44px;
border-radius: 50%;
border: none;
background: rgba(255,255,255,0.95);
color: #374151;
box-shadow: 0 4px 12px rgba(0,0,0,0.12);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
transition: all 0.25s ease;
backdrop-filter: blur(8px);
}
.tv2-6ab697cc0553a-carousel-btn:hover {
background: #ffffff;
box-shadow: 0 6px 20px rgba(0,0,0,0.18);
transform: translateY(-50%) scale(1.08);
}
.tv2-6ab697cc0553a-carousel-prev { left: 4px; }
.tv2-6ab697cc0553a-carousel-next { right: 4px; }
.tv2-6ab697cc0553a-carousel-dots {
display: flex;
justify-content: center;
gap: 8px;
margin-top: 28px;
}
.tv2-6ab697cc0553a-dot {
width: 8px;
height: 8px;
border-radius: 10px;
border: none;
background: #d1d5db;
cursor: pointer;
transition: all 0.3s ease;
padding: 0;
}
.tv2-6ab697cc0553a-dot.active {
width: 28px;
background: var(--primary-color, #6366f1);
}
/* --- CARD BASE --- */
.tv2-6ab697cc0553a-card {
background: #ffffff;
border-radius: 4px;
padding: 28px;
box-shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06);
position: relative;
overflow: hidden;
transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94),
box-shadow 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
height: 100%;
display: flex;
flex-direction: column;
}
/* --- QUOTE DECORATION --- */
.tv2-6ab697cc0553a-card-quote-icon {
position: absolute;
top: -4px;
right: 12px;
font-size: 80px;
line-height: 1;
opacity: 0.06;
font-family: Georgia, serif;
font-weight: 700;
color: var(--primary-color, #6366f1);
pointer-events: none;
user-select: none;
}
/* Layout: quotes - adds left accent bar */
.tv2-6ab697cc0553a-card.layout-quotes {
border-left: 4px solid var(--primary-color, #6366f1);
border-radius: 0 4px 4px 0;
}
.tv2-6ab697cc0553a-card.layout-quotes .tv2-6ab697cc0553a-card-quote-icon {
opacity: 0.1;
color: var(--primary-color, #6366f1);
}
/* Layout: bubbles - speech bubble tail */
.tv2-6ab697cc0553a-card.layout-bubbles {
border-radius: 4px 4px 4px 4px;
position: relative;
}
.tv2-6ab697cc0553a-card.layout-bubbles::after {
content: '';
position: absolute;
bottom: -10px;
left: 32px;
width: 20px;
height: 20px;
background: #ffffff;
transform: rotate(45deg);
box-shadow: 2px 2px 4px rgba(0,0,0,0.04);
}
/* Layout: minimal - very light, no heavy shadow */
.tv2-6ab697cc0553a-card.layout-minimal {
box-shadow: none;
background: transparent;
border: 1px solid rgba(0,0,0,0.06);
padding: 24px;
}
.tv2-6ab697cc0553a-card.layout-minimal:hover {
border-color: var(--primary-color, #6366f1);
background: rgba(99,102,241,0.02);
}
/* --- SOURCE ICON --- */
.tv2-6ab697cc0553a-source-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
border-radius: 6px;
flex-shrink: 0;
}
.tv2-6ab697cc0553a-source-icon.source-google {
background: #f8f9fa;
}
.tv2-6ab697cc0553a-source-icon.source-trustpilot {
background: #f0fdf4;
}
.tv2-6ab697cc0553a-source-icon.source-facebook {
background: #eff6ff;
}
.tv2-6ab697cc0553a-source-icon.source-custom {
background: #f5f3ff;
}
/* --- STAR RATING --- */
.tv2-6ab697cc0553a-stars {
display: inline-flex;
gap: 2px;
align-items: center;
}
.tv2-6ab697cc0553a-star {
width: 16px;
height: 16px;
flex-shrink: 0;
}
/* --- AVATAR --- */
.tv2-6ab697cc0553a-card-avatar {
position: relative;
display: inline-block;
flex-shrink: 0;
}
.tv2-6ab697cc0553a-card-avatar-img {
width: 52px;
height: 52px;
border-radius: 50%;
object-fit: cover;
display: block;
}
.tv2-6ab697cc0553a-card-avatar-ring {
padding: 3px;
border-radius: 50%;
background: linear-gradient(135deg, #f7c9d0, #f7c9d088, #f7c9d044);
display: inline-block;
line-height: 0;
}
/* Video play button overlay on avatar */
.tv2-6ab697cc0553a-card-avatar-video {
cursor: pointer;
position: relative;
}
.tv2-6ab697cc0553a-card-avatar-video::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 24px;
height: 24px;
background: rgba(0,0,0,0.6);
border-radius: 50%;
backdrop-filter: blur(4px);
}
.tv2-6ab697cc0553a-card-avatar-video::before {
content: '';
position: absolute;
top: 50%;
left: 52%;
transform: translate(-50%, -50%);
width: 0;
height: 0;
border-style: solid;
border-width: 5px 0 5px 9px;
border-color: transparent transparent transparent #ffffff;
z-index: 1;
}
.tv2-6ab697cc0553a-card-avatar-video:hover::after {
background: rgba(0,0,0,0.75);
}
/* --- CARD CONTENT --- */
.tv2-6ab697cc0553a-card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
gap: 8px;
}
.tv2-6ab697cc0553a-card-text {
color: #374151;
font-size: 0.95rem;
line-height: 1.7;
margin: 0 0 20px;
flex-grow: 1;
letter-spacing: 0.01em;
}
.tv2-6ab697cc0553a-card-footer {
display: flex;
align-items: center;
gap: 14px;
margin-top: auto;
padding-top: 16px;
border-top: 1px solid rgba(0,0,0,0.05);
}
.tv2-6ab697cc0553a-card-author-info {
flex: 1;
min-width: 0;
}
.tv2-6ab697cc0553a-card-name {
font-size: 0.93rem;
font-weight: 600;
color: #1a1a1a;
margin: 0;
display: flex;
align-items: center;
gap: 6px;
line-height: 1.3;
}
.tv2-6ab697cc0553a-card-role {
font-size: 0.8rem;
color: #6b7280;
margin: 2px 0 0;
line-height: 1.3;
}
.tv2-6ab697cc0553a-card-meta {
display: flex;
align-items: center;
gap: 10px;
margin-top: 4px;
flex-wrap: wrap;
}
.tv2-6ab697cc0553a-card-date {
font-size: 0.75rem;
color: #6b7280;
opacity: 0.7;
}
.tv2-6ab697cc0553a-card-product {
font-size: 0.75rem;
color: var(--primary-color, #6366f1);
background: rgba(99,102,241,0.08);
padding: 2px 8px;
border-radius: 4px;
display: inline-block;
}
/* --- VERIFIED BADGE --- */
.tv2-6ab697cc0553a-verified {
display: inline-flex;
align-items: center;
justify-content: center;
width: 16px;
height: 16px;
flex-shrink: 0;
}
/* --- INITIAL LETTER AVATAR FALLBACK --- */
.tv2-6ab697cc0553a-avatar-fallback {
width: 52px;
height: 52px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 1.1rem;
color: #ffffff;
text-transform: uppercase;
}
/* --- STAGGERED FADE-IN ANIMATION --- */
.tv2-6ab697cc0553a-animate-item {
opacity: 0;
transform: translateY(24px);
transition: opacity 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94),
transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.tv2-6ab697cc0553a-animate-item.is-visible {
opacity: 1;
transform: translateY(0);
}
/* --- VIDEO MODAL --- */
.tv2-6ab697cc0553a-video-modal {
display: none;
position: fixed;
inset: 0;
z-index: 99999;
align-items: center;
justify-content: center;
}
.tv2-6ab697cc0553a-video-modal.is-open {
display: flex;
}
.tv2-6ab697cc0553a-video-modal-overlay {
position: absolute;
inset: 0;
background: rgba(0,0,0,0.8);
backdrop-filter: blur(4px);
}
.tv2-6ab697cc0553a-video-modal-content {
position: relative;
width: 90%;
max-width: 800px;
z-index: 1;
}
.tv2-6ab697cc0553a-video-wrapper {
position: relative;
padding-bottom: 56.25%;
height: 0;
border-radius: 12px;
overflow: hidden;
background: #000;
}
.tv2-6ab697cc0553a-video-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.tv2-6ab697cc0553a-video-modal-close {
position: absolute;
top: -44px;
right: 0;
background: none;
border: none;
color: #ffffff;
cursor: pointer;
padding: 4px;
opacity: 0.8;
transition: opacity 0.2s;
}
.tv2-6ab697cc0553a-video-modal-close:hover {
opacity: 1;
}
/* --- RESPONSIVE --- */
@media (max-width: 1024px) {
.tv2-6ab697cc0553a-masonry {
column-count: 1;
}
.tv2-6ab697cc0553a-grid {
grid-template-columns: repeat(1, 1fr);
}
.tv2-6ab697cc0553a-carousel-slide {
min-width: calc((100% - 0px) / 1);
}
.tv2-6ab697cc0553a-highlight {
grid-template-columns: 1fr;
}
.tv2-6ab697cc0553a-highlight-featured {
grid-row: auto;
}
}
@media (max-width: 640px) {
.tv2-6ab697cc0553a-masonry {
column-count: 1;
}
.tv2-6ab697cc0553a-grid {
grid-template-columns: repeat(1, 1fr);
}
.tv2-6ab697cc0553a-carousel-slide {
min-width: 100%;
}
.tv2-6ab697cc0553a-card {
padding: 22px;
}
.tv2-6ab697cc0553a-carousel-btn {
width: 36px;
height: 36px;
}
}
</style>
<style>
/* ===== Instagram Feed: ig-feed-6ab697cc05db8 ===== */
/* Grid Layout */
#ig-feed-6ab697cc05db8 .ig-feed-grid {
display: grid;
grid-template-columns: repeat(10, 1fr);
gap: 8px;
}
@media (max-width: 991px) {
#ig-feed-6ab697cc05db8 .ig-feed-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 575px) {
#ig-feed-6ab697cc05db8 .ig-feed-grid {
grid-template-columns: repeat(3, 1fr);
}
}
/* Item */
#ig-feed-6ab697cc05db8 .ig-feed-item__inner {
position: relative;
overflow: hidden;
border-radius: 35px;
background: #fafafa;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__link {
display: block;
position: relative;
text-decoration: none;
color: #fff;
}
/* Image Wrapper (aspect ratio) */
#ig-feed-6ab697cc05db8 .ig-feed-item__image-wrap {
position: relative;
width: 100%;
padding-bottom: 75%;
overflow: hidden;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94);
will-change: transform;
}
/* Hover zoom */
#ig-feed-6ab697cc05db8 .ig-feed-item__inner:hover .ig-feed-item__image {
transform: scale(1.08);
}
/* Overlay */
#ig-feed-6ab697cc05db8 .ig-feed-item__overlay {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: #000000;
opacity: 0;
transition: opacity 0.35s ease;
z-index: 2;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__inner:hover .ig-feed-item__overlay {
opacity: 1;
}
/* Overlay Icon */
#ig-feed-6ab697cc05db8 .ig-feed-item__overlay-icon {
font-size: 2rem;
color: #fff;
margin-bottom: 12px;
transform: scale(0.6) rotate(-20deg);
transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
opacity: 0;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__inner:hover .ig-feed-item__overlay-icon {
transform: scale(1) rotate(0deg);
opacity: 1;
}
/* Overlay Stats */
#ig-feed-6ab697cc05db8 .ig-feed-item__overlay-stats {
display: flex;
gap: 18px;
transform: translateY(10px);
transition: transform 0.35s ease, opacity 0.35s ease;
opacity: 0;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__inner:hover .ig-feed-item__overlay-stats {
transform: translateY(0);
opacity: 1;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__stat {
display: flex;
align-items: center;
gap: 6px;
color: #fff;
font-size: 0.9rem;
font-weight: 600;
text-shadow: 0 1px 3px rgba(0,0,0,0.3);
}
#ig-feed-6ab697cc05db8 .ig-feed-item__stat i {
font-size: 0.85rem;
}
#ig-feed-6ab697cc05db8 .ig-feed-item__stat .fa-heart {
color: #ff4d6a;
}
/* Follow Button */
#ig-feed-6ab697cc05db8 .ig-feed-follow {
text-align: center;
margin-top: 2rem;
}
#ig-feed-6ab697cc05db8 .ig-feed-follow__btn {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 12px 32px;
font-size: 1rem;
font-weight: 600;
color: #fff;
text-decoration: none;
border: none;
border-radius: 8px;
background: linear-gradient(45deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888);
background-size: 200% 200%;
box-shadow: 0 4px 15px rgba(214, 41, 118, 0.35);
transition: transform 0.25s ease, box-shadow 0.25s ease, background-position 0.5s ease;
cursor: pointer;
}
#ig-feed-6ab697cc05db8 .ig-feed-follow__btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 22px rgba(214, 41, 118, 0.45);
background-position: 100% 0;
color: #fff;
text-decoration: none;
}
#ig-feed-6ab697cc05db8 .ig-feed-follow__btn:active {
transform: translateY(0);
}
#ig-feed-6ab697cc05db8 .ig-feed-follow__btn i {
font-size: 1.25rem;
}
/* Masonry Layout */
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry {
/* Handled by JS — items get variable heights */
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item__image-wrap {
padding-bottom: 0 !important;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item__image {
position: relative;
height: auto;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+1) .ig-feed-item__image-wrap {
padding-bottom: 120% !important;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+1) .ig-feed-item__image {
position: absolute;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+2) .ig-feed-item__image-wrap {
padding-bottom: 80% !important;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+2) .ig-feed-item__image {
position: absolute;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+3) .ig-feed-item__image-wrap {
padding-bottom: 100% !important;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--masonry .ig-feed-item:nth-child(3n+3) .ig-feed-item__image {
position: absolute;
}
/* Carousel Layout */
#ig-feed-6ab697cc05db8 .ig-feed-grid--carousel {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
gap: 8px;
padding-bottom: 8px;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--carousel::-webkit-scrollbar {
display: none;
}
#ig-feed-6ab697cc05db8 .ig-feed-grid--carousel .ig-feed-item {
flex: 0 0 calc(100% / 10 - 8px);
scroll-snap-align: start;
min-width: 180px;
}
@media (max-width: 991px) {
#ig-feed-6ab697cc05db8 .ig-feed-grid--carousel .ig-feed-item {
flex: 0 0 calc(100% / 3 - 8px);
}
}
@media (max-width: 575px) {
#ig-feed-6ab697cc05db8 .ig-feed-grid--carousel .ig-feed-item {
flex: 0 0 calc(100% / 3 - 8px);
}
}
/* Staggered entrance animation */
#ig-feed-6ab697cc05db8 .ig-feed-item {
opacity: 0;
transform: translateY(20px);
animation: igFeedItemInig-feed-6ab697cc05db8 0.5s ease forwards;
}
@keyframes igFeedItemInig-feed-6ab697cc05db8 {
to {
opacity: 1;
transform: translateY(0);
}
}
</style>
<style>
/* Page-specific styles */
.page-content {
min-height: 400px;
}
.page-content section {
position: relative;
}
.page-container {
position: relative;
}
</style>
</head>
<body data-cart-behavior="drawer">
<script>
(function () {
// Skip if the bar already rendered server-side (token-based auth)
if (document.getElementById('sf-admin-bar')) return;
// Skip on main mallatech.tn domain (admin panel, not a storefront)
var host = window.location.host;
if (host === 'mallatech.tn' || host === 'www.mallatech.tn') return;
// Skip if URL carries a token — server is processing it
if (window.location.search.indexOf('_admin_token=') !== -1) return;
// Sticky skip ONLY for confirmed non-admin responses, never for
// network/CORS/auth-handle-missing failures so reloads work.
if (window.sessionStorage && sessionStorage.getItem('mlt_ab_tried') === 'no_access') return;
var endpoint = 'https://mallatech.tn/_storefront-admin-bridge'
+ '?domain=' + encodeURIComponent(host)
+ '&path=' + encodeURIComponent(window.location.pathname);
fetch(endpoint, {
method: 'GET',
credentials: 'include',
cache: 'no-store',
})
.then(function (r) { return r.json(); })
.then(function (data) {
if (!data || !data.success || !data.html) {
if (data && data.reason === 'not_authenticated' && window.sessionStorage) {
sessionStorage.setItem('mlt_ab_tried', 'no_access');
}
return;
}
// Plant the cookie so subsequent navigations render the bar
// server-side without needing this JS bridge round-trip.
if (data.token) {
document.cookie = 'mallatech_admin_bar=' + encodeURIComponent(data.token)
+ '; path=/; max-age=86400; secure; samesite=lax';
}
// Parse the rendered HTML, extract <script> tags for manual
// execution (innerHTML never runs them), then inject the rest
// (the bar markup + <style>) at the top of <body>.
var temp = document.createElement('div');
temp.innerHTML = data.html;
var scripts = [];
var scriptNodes = temp.querySelectorAll('script');
scriptNodes.forEach(function (node) {
scripts.push(node.textContent || '');
node.parentNode.removeChild(node);
});
var frag = document.createDocumentFragment();
while (temp.firstChild) {
frag.appendChild(temp.firstChild);
}
document.body.insertBefore(frag, document.body.firstChild);
scripts.forEach(function (code) {
try {
var s = document.createElement('script');
s.text = code;
document.head.appendChild(s);
s.remove();
} catch (e) { /* silent */ }
});
})
.catch(function () { /* silent — pure progressive enhancement */ });
})();
</script>
<div class="header-topbar topbar-style-marquee" style="background-color: #1a1a1a; color: #f7c9d0; font-family: 'Inter', -apple-system, sans-serif;">
<div class="topbar-flex-container">
<div class="marquee-wrapper pause-on-hover" dir="ltr">
<div class="marquee-track left" style="animation-duration: 55s;">
<div class="marquee-set"><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span></div>
<div class="marquee-set" aria-hidden="true"><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span><span class="marquee-text">Nouvelle collection — brumes corps, brumes cheveux & laits corps ✦ Livraison gratuite à partir de 150DT ✦ Paiement à la livraison<span class="marquee-divider">✦</span></span></div>
</div>
</div>
</div>
</div>
<header class="site-header sticky-header mobile-two_row" style="--header-bg: #ffffff; --header-text: #1a1a1a; background-color: #ffffff; color: #1a1a1a; font-family: 'Inter', -apple-system, sans-serif; border-bottom: 1px solid rgba(0,0,0,0.1);">
<div class="header-container">
<div class="header-inner layout-standard">
<div class="header-logo size-custom position-center" style="padding: 0px 20px 0px 0px;">
<a href="/">
<img src="https://www.azal.tn/storage/storefronts/969/q9t3oft8HnMGyjXBWsufnhbtgdm997jUTZPh0KFf.png" alt="AZAL" style="max-height: 150px;">
</a>
</div>
<button class="mobile-menu-toggle" type="button" onclick="toggleMobileMenu()">
<i class="fas fa-bars" style="color: #1a1a1a;"></i>
</button>
<nav class="header-nav position-right" id="headerNav">
<ul class="nav-menu">
<li class="nav-item has-dropdown">
<a href="/collections/maquillage" class="nav-link" style="color: #1a1a1a;">
Maquillage
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="/collections/teint" target="_self">
Teint
</a>
</li>
<li>
<a href="/collections/yeux" target="_self">
Yeux
</a>
</li>
<li>
<a href="/collections/levres" target="_self">
Lévres
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/soin" class="nav-link" style="color: #1a1a1a;">
Soin
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="https://a-zalstore.mallatech.tn/collections/accessoires-de-bain-et-de-douche" target="_self">
Accessoires de bain et de douche
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/nettoyants-et-demaquillants" target="_self">
Nettoyants et Démaquillants
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/gommage" target="_self">
Gommage
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/cremes-hydratantes" target="_self">
Crémes hydratantes
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/rasage-et-epilation" target="_self">
Rasage et épilation
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/cotons-et-lingettes" target="_self">
Cotons
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/cheveux" class="nav-link" style="color: #1a1a1a;">
Cheveux
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="https://a-zalstore.mallatech.tn/collections/shampoing-et-masque" target="_self">
Shampoing et Masque
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/peignes" target="_self">
Peignes
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/soin-capillaire" target="_self">
Soin Capillaire
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/brosses-cheveux" target="_self">
Brosses Cheveux
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/accessoires-cheveux" target="_self">
Accessoires Cheveux
</a>
</li>
<li>
<a href="/collections/autres-produits-cheveux" target="_self">
Autres produits cheveux
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/corps" class="nav-link" style="color: #1a1a1a;">
Corps
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="/collections/vernis" target="_self">
Vernis
</a>
</li>
<li>
<a href="/collections/coupe-ongles" target="_self">
Coupe ongles
</a>
</li>
<li>
<a href="/collections/limes" target="_self">
Limes
</a>
</li>
<li>
<a href="#" target="_self">
Autres produit ongles
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/parfums" class="nav-link" style="color: #1a1a1a;">
Parfums
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="https://a-zalstore.mallatech.tn/collections/eau-de-parfum-50ml" target="_self">
Eau de parfum - 50ML
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/brume-et-lait-de-corps" target="_self">
Brumes et laits de cops
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/brume-pour-corps" target="_self">
Brume pour corps
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/accessoires" class="nav-link" style="color: #1a1a1a;">
Accessoires
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="/collections/sacs" target="_self">
Sacs
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/outils-pour-sourcils-et-cils" target="_self">
Outils pour sourcils et cils
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/trousses" target="_self">
Trousses
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/eponges" target="_self">
Eponges
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/pinceaux" target="_self">
Pinceaux
</a>
</li>
<li>
<a href="/collections/outils-divers-beaute" target="_self">
Outils Divers Beauté
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown">
<a href="/collections/azal-home" class="nav-link" style="color: #1a1a1a;">
Azal Home
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sf-dropdown">
<li>
<a href="https://a-zalstore.mallatech.tn/collections/diffuseur" target="_self">
Diffuseur
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/bougie" target="_self">
Bougie
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/home-mist" target="_self">
Home Mist
</a>
</li>
<li>
<a href="https://a-zalstore.mallatech.tn/collections/miroirs-decoratifs" target="_self">
Miroirs Décoratifs
</a>
</li>
</ul>
</li>
<li class="nav-item">
<a href="https://a-zalstore.mallatech.tn/collections/nos-offres" class="nav-link" target="_self" style="color: #1a1a1a;">
Nos Offres
</a>
</li>
</ul>
</nav>
<div class="search-bar-full" x-data="ajaxSearch()" @click.outside="closeResults()">
<form action="/search" method="GET" @submit="handleSubmit">
<input type="text"
name="q"
placeholder="Rechercher des produits..."
style="color: #1a1a1a;"
x-model="query"
@input.debounce.300ms="search()"
@focus="if(results.length > 0) showResults = true"
autocomplete="off">
<button type="submit" style="color: #1a1a1a;"><i class="fas fa-search"></i></button>
</form>
<div class="search-results-dropdown" x-show="showResults" x-cloak x-transition>
<div x-show="isLoading" class="search-loading">
<i class="fas fa-spinner fa-spin"></i> Recherche...
</div>
<template x-if="!isLoading && results.length > 0">
<div>
<template x-for="product in results" :key="product.id">
<a :href="product.url" class="search-result-item">
<img :src="product.image || '/images/placeholder.png'" :alt="product.name" class="search-result-image" onerror="this.src='/images/placeholder.png'">
<div class="search-result-info">
<span class="search-result-name" x-text="product.name"></span>
<span class="search-result-price" x-text="product.price.toFixed(2) + ' TND'"></span>
</div>
</a>
</template>
<a :href="'/search?q=' + encodeURIComponent(query)" class="search-view-all">
Voir tous les résultats <i class="fas fa-arrow-right"></i>
</a>
</div>
</template>
<div x-show="!isLoading && results.length === 0 && query.length >= 2" class="search-no-results">
<i class="fas fa-search"></i>
<span>Aucun produit trouvé pour "<span x-text="query"></span>"</span>
</div>
</div>
</div>
<div class="header-icons">
<a href="/track-order" class="header-icon" style="color: #1a1a1a;">
<i class="fas fa-user"></i>
</a>
<a href="#" class="header-icon" style="color: #1a1a1a;">
<i class="fas fa-heart"></i>
</a>
<a href="/cart" class="header-icon cart-icon" style="color: #1a1a1a;">
<i class="fas fa-shopping-cart"></i>
<span class="cart-count" id="cart-count">0</span>
</a>
</div>
</div>
</div>
<div class="mobile-search-row" x-data="ajaxSearch()" @click.outside="closeResults()">
<form action="/search" method="GET" class="mobile-search-form" @submit="handleSubmit">
<i class="fas fa-search mobile-search-icon"></i>
<input type="text" name="q"
placeholder="Rechercher des produits..."
x-model="query"
@input.debounce.300ms="search()"
@focus="if(results.length > 0) showResults = true"
autocomplete="off">
</form>
<div class="search-results-dropdown" x-show="showResults" x-cloak x-transition>
<div x-show="isLoading" class="search-loading">
<i class="fas fa-spinner fa-spin"></i> Recherche...
</div>
<template x-if="!isLoading && results.length > 0">
<div>
<template x-for="product in results" :key="product.id">
<a :href="product.url" class="search-result-item">
<img :src="product.image || '/images/placeholder.png'" :alt="product.name" class="search-result-image" onerror="this.src='/images/placeholder.png'">
<div class="search-result-info">
<span class="search-result-name" x-text="product.name"></span>
<span class="search-result-price" x-text="product.price.toFixed(2) + ' TND'"></span>
</div>
</a>
</template>
<a :href="'/search?q=' + encodeURIComponent(query)" class="search-view-all">
Voir tous les résultats <i class="fas fa-arrow-right"></i>
</a>
</div>
</template>
<div x-show="!isLoading && results.length === 0 && query.length >= 2" class="search-no-results">
<i class="fas fa-search"></i>
<span>Aucun produit trouvé pour "<span x-text="query"></span>"</span>
</div>
</div>
</div>
</header>
<style>
/* Header Base Styles */
.site-header {
width: 100%;
z-index: 1000;
transition: all 0.3s ease;
position: relative;
}
.sticky-header {
position: sticky;
top: 0;
}
.transparent-header {
position: absolute;
background-color: transparent !important;
}
@media (max-width: 991px) {
.transparent-header {
position: relative;
background-color: #ffffff !important;
}
}
.header-container {
max-width: 1400px;
margin: 0 auto;
padding: 0 20px;
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 15px 0;
gap: 20px;
}
/* Desktop-only layout overrides — scoped so they don't bleed into mobile layouts */
@media (min-width: 992px) {
.header-inner.layout-centered {
flex-wrap: wrap;
justify-content: center;
}
.header-inner.layout-centered .header-logo {
width: 100%;
text-align: center;
margin-bottom: 10px;
}
.header-inner.layout-centered .header-nav {
order: 0;
}
.header-inner.layout-stacked {
flex-direction: column;
gap: 15px;
}
}
/* Logo */
.header-logo a {
display: inline-flex;
align-items: center;
text-decoration: none;
}
.header-logo img {
display: block;
}
.header-logo .logo-text {
font-size: 24px;
font-weight: 700;
}
.header-logo.size-small img { max-height: 30px; }
.header-logo.size-medium img { max-height: 45px; }
.header-logo.size-large img { max-height: 60px; }
.header-logo.size-xlarge img { max-height: 80px; }
.header-logo.size-custom img { max-height: 150px; }
@media (max-width: 991px) {
.header-logo img { max-height: 30px !important; }
.header-logo .logo-text { font-size: 16px; }
}
/* Navigation */
.header-nav {
flex: 1;
padding-left: 24px;
}
.header-nav.position-left { justify-content: flex-start; }
.header-nav.position-center { justify-content: center; }
.header-nav.position-right { justify-content: flex-end; }
.nav-menu {
display: flex;
align-items: center;
gap: 30px;
list-style: none;
margin: 0;
padding: 0;
}
.nav-item {
position: relative;
}
.nav-link {
display: flex;
align-items: center;
gap: 5px;
text-decoration: none;
font-size: 15px;
font-weight: 500;
padding: 8px 0;
transition: opacity 0.2s;
}
.nav-link:hover {
opacity: 0.7;
}
.dropdown-arrow {
font-size: 10px;
transition: transform 0.2s;
}
.nav-item.has-dropdown:hover > .nav-link .dropdown-arrow,
.nav-item.has-dropdown.dropdown-open > .nav-link .dropdown-arrow {
transform: rotate(180deg);
}
/* ═══ Dropdown Menu — Attached List ═══ */
.nav-item.has-dropdown { position: relative; }
.nav-item .sf-dropdown {
position: absolute;
top: 100%;
left: 0;
min-width: 230px;
background: #fff;
border-top: 2px solid var(--primary-color, #111);
box-shadow: 0 6px 20px rgba(0,0,0,0.10), 0 0 0 1px rgba(0,0,0,0.04);
padding: 6px 0;
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 0.18s ease, visibility 0.18s;
z-index: 9999;
list-style: none;
margin: 0;
display: block;
}
.nav-item.has-dropdown:hover > .sf-dropdown,
.nav-item.has-dropdown.dropdown-open > .sf-dropdown {
opacity: 1;
visibility: visible;
pointer-events: auto;
}
/* Active nav indicator */
.nav-item.has-dropdown:hover > .nav-link::after,
.nav-item.has-dropdown:hover > .nav-label::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 2px;
background: var(--primary-color, #111);
}
/* Dropdown links */
.sf-dropdown > li { padding: 0; }
.sf-dropdown li a {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 18px;
color: #333;
text-decoration: none;
font-size: 13.5px;
font-weight: 450;
transition: all 0.12s ease;
white-space: nowrap;
border-left: 2px solid transparent;
}
.sf-dropdown li a:hover {
background: #f8f8f9;
color: var(--primary-color, #111);
border-left-color: var(--primary-color, #111);
}
.sf-dropdown li a .mi-icon {
width: 18px;
text-align: center;
font-size: 14px;
color: #aaa;
transition: color 0.12s;
}
.sf-dropdown li a:hover .mi-icon { color: var(--primary-color, #111); }
/* Label items */
.sf-dropdown-label {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 18px 6px;
color: #999;
font-size: 10px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 1.2px;
cursor: default;
}
.sf-dropdown-label .mi-icon { font-size: 11px; color: #bbb; }
.nav-label { user-select: none; cursor: default; }
/* ═══ Sub-levels: new box to the right ═══ */
.sf-has-sub { position: relative; }
.sf-has-sub > a,
.sf-has-sub > .sf-dropdown-label {
display: flex;
justify-content: space-between;
align-items: center;
}
.sf-sub-arrow {
font-size: 8px;
opacity: 0.3;
transition: all 0.15s;
margin-left: auto;
padding-left: 12px;
}
.sf-has-sub:hover > a { background: #f8f8f9; border-left-color: var(--primary-color, #111); }
.sf-has-sub:hover > a .sf-sub-arrow { opacity: 0.8; transform: translateX(2px); }
ul.sf-dropdown.sf-dropdown-sub {
position: absolute;
left: 100%;
top: -2px;
min-width: 210px;
background: #fff;
border-top: 2px solid var(--primary-color, #111);
box-shadow: 0 6px 20px rgba(0,0,0,0.10), 0 0 0 1px rgba(0,0,0,0.04);
padding: 6px 0;
opacity: 0;
visibility: hidden;
pointer-events: none;
transition: opacity 0.15s ease, visibility 0.15s;
display: block;
list-style: none;
z-index: 10000;
margin: 0;
}
ul.sf-dropdown.sf-dropdown-sub li { padding: 0; }
.sf-has-sub:hover > ul.sf-dropdown-sub {
opacity: 1;
visibility: visible;
pointer-events: auto;
}
/* L4 sub-sub box */
ul.sf-dropdown.sf-dropdown-l4 {
left: 100%;
top: -2px;
}
/* Search Styles */
.search-bar-full {
flex: 1;
max-width: 400px;
}
.search-bar-full form {
display: flex;
background: rgba(128,128,128,0.1);
border-radius: 25px;
overflow: hidden;
}
.search-bar-full input {
flex: 1;
border: none;
background: transparent;
padding: 12px 20px;
outline: none;
font-size: 14px;
}
.search-bar-full input::placeholder {
opacity: 0.6;
}
.search-bar-full button {
padding: 12px 20px;
background: none;
border: none;
cursor: pointer;
}
.search-expandable {
padding: 15px 0;
border-top: 1px solid rgba(0,0,0,0.1);
}
.search-expandable form {
display: flex;
gap: 10px;
}
.search-expandable input {
flex: 1;
padding: 12px 20px;
border: 1px solid rgba(0,0,0,0.1);
border-radius: 25px;
outline: none;
font-size: 14px;
color: #333333;
}
.search-expandable button {
padding: 12px 20px;
background: none;
border: none;
cursor: pointer;
}
/* Header Icons */
.header-icons {
display: flex;
align-items: center;
gap: 20px;
}
.header-icon {
display: flex;
align-items: center;
justify-content: center;
background: none;
border: none;
font-size: 20px;
cursor: pointer;
position: relative;
text-decoration: none;
transition: opacity 0.2s;
}
.header-icon:hover {
opacity: 0.7;
}
.cart-count {
position: absolute;
top: -8px;
right: -8px;
background: #ef4444;
color: #fff;
font-size: 11px;
font-weight: 600;
min-width: 18px;
height: 18px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
/* Mobile Menu Toggle */
.mobile-menu-toggle {
display: none;
background: none;
border: none;
font-size: 24px;
cursor: pointer;
padding: 5px;
}
/* Top Bar */
.header-topbar {
width: 100%;
font-size: 13px;
}
.topbar-static {
text-align: center;
padding: 10px 20px;
}
/* Marquee Animation */
.topbar-flex-container { display: flex; align-items: stretch; width: 100%; }
.topbar-phone-block { display: flex !important; align-items: center; gap: 6px; padding: 8px 16px; white-space: nowrap; font-size: 13px; font-weight: 700; text-decoration: none; color: #ffffff !important; flex-shrink: 0; border-right: 1px solid rgba(255,255,255,0.25); background: rgba(0,0,0,0.2); z-index: 10; position: relative; }
.topbar-phone-block:hover { text-decoration: none; color: inherit; opacity: 0.85; }
.topbar-phone-block i { font-size: 10px; }
@media (max-width: 991px) { .topbar-phone-block { display: none; } }
.marquee-wrapper {
overflow: hidden;
flex: 1;
min-width: 0;
}
.marquee-track {
display: flex;
will-change: transform;
}
.marquee-set {
display: flex;
flex-shrink: 0;
min-width: 100%;
}
.marquee-text {
padding: 10px 50px;
white-space: nowrap;
display: inline-flex;
align-items: center;
gap: 50px;
flex-shrink: 0;
}
.marquee-divider {
margin: 0 20px;
opacity: 0.7;
}
.marquee-wrapper.pause-on-hover:hover .marquee-track {
animation-play-state: paused;
}
/* Search Results Dropdown */
.search-bar-full,
.search-expandable {
position: relative;
}
.search-results-dropdown {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #fff;
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
z-index: 1100;
max-height: 400px;
overflow-y: auto;
margin-top: 5px;
}
.search-result-item {
display: flex;
align-items: center;
gap: 12px;
padding: 12px 15px;
text-decoration: none;
color: #333;
transition: background 0.2s;
border-bottom: 1px solid #f0f0f0;
}
.search-result-item:hover {
background: #f8f9fa;
}
.search-result-item:last-of-type {
border-bottom: none;
}
.search-result-image {
width: 50px;
height: 50px;
object-fit: cover;
border-radius: 6px;
background: #f5f5f5;
}
.search-result-info {
flex: 1;
display: flex;
flex-direction: column;
gap: 4px;
}
.search-result-name {
font-size: 14px;
font-weight: 500;
color: #333;
}
.search-result-price {
font-size: 13px;
color: #28a745;
font-weight: 600;
}
.search-view-all {
display: block;
text-align: center;
padding: 12px;
background: #f8f9fa;
color: #007bff;
text-decoration: none;
font-size: 14px;
font-weight: 500;
border-top: 1px solid #e0e0e0;
}
.search-view-all:hover {
background: #e9ecef;
}
.search-loading {
padding: 20px;
text-align: center;
color: #666;
}
.search-no-results {
padding: 20px;
text-align: center;
color: #999;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
}
.search-no-results i {
font-size: 24px;
opacity: 0.5;
}
.search-no-results span {
font-size: 14px;
}
[x-cloak] {
display: none !important;
}
/* Mobile Responsive */
@media (max-width: 991px) {
/* Reset desktop layout overrides so mobile layouts start from a clean base */
.header-inner,
.header-inner.layout-centered,
.header-inner.layout-stacked {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
}
.header-inner.layout-centered .header-logo {
width: auto;
text-align: left;
margin-bottom: 0;
}
.header-logo {
flex: 1;
min-width: 0;
}
.mobile-menu-toggle {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border-radius: 8px;
background: rgba(0,0,0,0.06);
order: 10;
flex-shrink: 0;
}
.header-icons {
order: 9;
gap: 15px;
flex-shrink: 0;
}
.header-icon {
font-size: 18px;
}
.header-nav {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #ffffff;
color: #000000;
padding: 20px;
box-shadow: 0 4px 20px rgba(0,0,0,0.1);
z-index: 1000;
order: 20;
width: 100%;
}
.header-nav .nav-link { color: #000000; }
.header-nav.active {
display: block;
}
.nav-menu {
flex-direction: column;
gap: 0;
}
.nav-item {
width: 100%;
}
.nav-link {
padding: 15px 0;
border-bottom: 1px solid rgba(0,0,0,0.05);
gap: 8px;
}
.nav-link .dropdown-arrow {
margin-left: auto;
}
.nav-item .sf-dropdown {
position: static;
opacity: 1;
visibility: visible;
pointer-events: auto;
background: transparent;
border-top: none;
box-shadow: none;
padding: 0;
display: none;
margin: 0;
min-width: 0;
}
.nav-item.has-dropdown:hover > .nav-link::after,
.nav-item.has-dropdown:hover > .nav-label::after { display: none; }
.nav-item.dropdown-open .sf-dropdown { display: block; }
.sf-dropdown li a {
padding: 11px 8px 11px 20px;
font-size: 14px;
border-left: none;
border-bottom: 1px solid rgba(0,0,0,0.04);
}
.sf-dropdown li a:hover { border-left: none; }
.sf-dropdown-label {
padding: 10px 8px 6px 20px;
font-size: 11px;
}
.sf-dropdown-sub {
position: static !important;
opacity: 1 !important;
visibility: visible !important;
pointer-events: auto !important;
background: rgba(0,0,0,0.02) !important;
border: none !important;
border-top: none !important;
box-shadow: none !important;
padding: 0 !important;
display: none;
margin: 0;
min-width: 0;
}
.sf-has-sub.dropdown-open > .sf-dropdown-sub { display: block; }
.sf-dropdown-sub li a { padding-left: 36px !important; }
.sf-dropdown-l4 li a { padding-left: 52px !important; }
.search-bar-full {
display: none;
}
}
@media (max-width: 576px) {
.header-inner {
padding: 10px 0;
gap: 12px;
}
.header-icons {
gap: 10px;
}
.header-icon {
font-size: 16px;
}
.mobile-menu-toggle {
width: 36px;
height: 36px;
font-size: 20px;
}
}
/* Top Bar - Highlight Style */
.topbar-highlight {
text-align: center;
padding: 8px 20px;
}
.topbar-highlight-inner {
display: inline-flex;
align-items: center;
gap: 10px;
}
.topbar-highlight-icon {
display: inline-flex;
align-items: center;
justify-content: center;
width: 22px;
height: 22px;
background: rgba(255,255,255,0.2);
border-radius: 50%;
font-size: 11px;
animation: topbar-pulse 2s ease-in-out infinite;
}
@keyframes topbar-pulse {
0%, 100% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.15); opacity: 0.8; }
}
.topbar-highlight-text {
font-weight: 600;
letter-spacing: 0.3px;
}
/* Top Bar - Split Info Style */
.topbar-split-info {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 20px;
max-width: 1400px;
margin: 0 auto;
}
.topbar-split-left,
.topbar-split-right {
font-size: 13px;
}
.topbar-split-left {
opacity: 0.9;
}
.topbar-split-right {
font-weight: 500;
}
@media (max-width: 768px) {
.topbar-split-info {
flex-direction: column;
gap: 2px;
padding: 6px 15px;
text-align: center;
}
.topbar-split-left, .topbar-split-right {
font-size: 11px;
}
}
/* Mobile Layout: Logo Center */
@media (max-width: 991px) {
.site-header.mobile-logo_center .header-inner {
position: relative;
}
.site-header.mobile-logo_center .header-logo {
position: absolute;
left: 50%;
transform: translateX(-50%);
flex: none;
min-width: auto;
}
.site-header.mobile-logo_center .mobile-menu-toggle {
order: -1;
}
.site-header.mobile-logo_center .header-icons {
margin-left: auto;
}
}
/* Mobile Layout: Slim */
@media (max-width: 991px) {
.site-header.mobile-slim .header-inner {
padding: 6px 0;
gap: 10px;
}
.site-header.mobile-slim .header-logo img {
max-height: 28px !important;
}
.site-header.mobile-slim .header-logo .logo-text {
font-size: 18px;
}
.site-header.mobile-slim .header-icon {
font-size: 16px;
}
.site-header.mobile-slim .mobile-menu-toggle {
width: 32px;
height: 32px;
font-size: 18px;
}
}
/* Mobile Layout: Two Row (with search) */
.mobile-search-row {
display: none;
position: relative;
}
@media (max-width: 991px) {
.site-header.mobile-two_row .mobile-search-row {
display: block;
}
}
.mobile-search-form {
display: flex;
align-items: center;
position: relative;
background: rgba(128,128,128,0.1);
border-radius: 8px;
margin: 0 15px 10px;
padding: 0 12px;
}
.mobile-search-icon {
font-size: 14px;
opacity: 0.5;
margin-right: 8px;
color: #666;
}
.mobile-search-form input {
flex: 1;
border: none;
background: transparent;
padding: 10px 0;
font-size: 14px;
outline: none;
color: #333333;
}
.mobile-search-form input::placeholder {
color: #999;
}
.mobile-search-row .search-results-dropdown {
left: 0;
right: 0;
z-index: 1200;
}
/* Mobile Layout: Bottom Nav */
.mobile-bottom-nav {
display: none;
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 1050;
justify-content: space-around;
align-items: center;
padding: 6px 0 env(safe-area-inset-bottom, 6px);
box-shadow: 0 -2px 10px rgba(0,0,0,0.1);
}
@media (max-width: 991px) {
.mobile-bottom-nav {
display: flex;
}
.site-header.mobile-bottom_nav .mobile-menu-toggle {
display: none;
}
body:has(.mobile-bottom-nav) {
padding-bottom: 60px;
}
}
.bottom-nav-item {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
text-decoration: none;
font-size: 10px;
font-weight: 500;
opacity: 0.7;
transition: opacity 0.2s;
padding: 4px 10px;
position: relative;
cursor: pointer;
}
.bottom-nav-item:hover,
.bottom-nav-item:active {
opacity: 1;
text-decoration: none;
}
.bottom-nav-item i {
font-size: 18px;
}
.bottom-nav-cart-count {
position: absolute;
top: 0;
right: 4px;
background: #ef4444;
color: #fff;
font-size: 9px;
font-weight: 700;
min-width: 15px;
height: 15px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
/* Off-Canvas Menu (works with any mobile layout) */
@media (max-width: 991px) {
.site-header.mobile-off-canvas .header-nav {
position: fixed;
top: 0;
left: -300px;
width: 280px;
height: 100vh;
background: #ffffff;
box-shadow: 4px 0 20px rgba(0,0,0,0.15);
z-index: 1100;
transition: left 0.3s ease;
padding: 60px 20px 20px;
overflow-y: auto;
display: block;
}
.site-header.mobile-off-canvas .header-nav.active {
left: 0;
}
.site-header.mobile-off-canvas .header-nav::before {
content: '\f00d';
font-family: 'Font Awesome 5 Free';
font-weight: 900;
position: absolute;
top: 15px;
right: 15px;
font-size: 20px;
cursor: pointer;
color: var(--header-text, #333);
width: 36px;
height: 36px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background: rgba(0,0,0,0.05);
}
}
/* Off-canvas overlay */
.offcanvas-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.4);
z-index: 1090;
}
.offcanvas-overlay.active {
display: block;
}
/* ═══ RTL Overrides ═══ */
[dir="rtl"] .header-nav {
padding-left: 0;
padding-right: 24px;
}
[dir="rtl"] .nav-item .sf-dropdown {
left: auto;
right: 0;
}
[dir="rtl"] .sf-dropdown li a {
border-left: none;
border-right: 2px solid transparent;
}
[dir="rtl"] .sf-dropdown li a:hover {
border-left-color: transparent;
border-right-color: var(--primary-color, #111);
}
[dir="rtl"] .sf-has-sub:hover > a {
border-left-color: transparent;
border-right-color: var(--primary-color, #111);
}
[dir="rtl"] .sf-sub-arrow {
margin-left: 0;
margin-right: auto;
padding-left: 0;
padding-right: 12px;
transform: scaleX(-1);
}
[dir="rtl"] .sf-has-sub:hover > a .sf-sub-arrow {
transform: scaleX(-1) translateX(-2px);
}
[dir="rtl"] ul.sf-dropdown.sf-dropdown-sub {
left: auto;
right: 100%;
}
[dir="rtl"] ul.sf-dropdown.sf-dropdown-l4 {
left: auto;
right: 100%;
}
[dir="rtl"] .dropdown-arrow {
margin-left: 0;
margin-right: 6px;
}
[dir="rtl"] .mobile-search-icon {
margin-right: 0;
margin-left: 8px;
}
[dir="rtl"] .bottom-nav-cart-count {
right: auto;
left: 4px;
}
[dir="rtl"] .search-bar-full {
margin-left: 0;
margin-right: auto;
}
@media (max-width: 991px) {
[dir="rtl"] .site-header.mobile-logo_center .header-icons {
margin-left: 0;
margin-right: auto;
}
[dir="rtl"] .sf-dropdown li a {
padding: 11px 20px 11px 8px;
border-right: none;
}
[dir="rtl"] .sf-dropdown-label {
padding: 10px 20px 6px 8px;
}
[dir="rtl"] .sf-dropdown-sub li a { padding-left: 8px !important; padding-right: 36px !important; }
[dir="rtl"] .sf-dropdown-l4 li a { padding-left: 8px !important; padding-right: 52px !important; }
[dir="rtl"] .site-header.mobile-off-canvas .header-nav {
left: auto;
right: -300px;
transition: right 0.3s ease;
box-shadow: -4px 0 20px rgba(0,0,0,0.15);
}
[dir="rtl"] .site-header.mobile-off-canvas .header-nav.active {
left: auto;
right: 0;
}
[dir="rtl"] .site-header.mobile-off-canvas .header-nav::before {
right: auto;
left: 15px;
}
/* RTL mobile menu alignment */
[dir="rtl"] .header-nav {
text-align: right;
}
[dir="rtl"] .nav-link .dropdown-arrow {
margin-left: 0;
margin-right: auto;
}
}
</style>
<script>
if (typeof Alpine === 'undefined') {
document.write('<script src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js" defer><\/script>');
}
</script>
<script>
// AJAX Search Component for Alpine.js
function ajaxSearch() {
return {
query: '',
results: [],
showResults: false,
isLoading: false,
async search() {
if (this.query.length < 2) {
this.results = [];
this.showResults = false;
return;
}
this.isLoading = true;
this.showResults = true;
try {
const response = await fetch('/api/search?q=' + encodeURIComponent(this.query));
if (!response.ok) {
console.error('Search API error:', response.status);
this.results = [];
return;
}
const data = await response.json();
if (data.success && data.products) {
this.results = data.products;
} else {
this.results = [];
}
} catch (error) {
console.error('Search error:', error);
this.results = [];
} finally {
this.isLoading = false;
// Keep showResults true if we have results
if (this.results.length === 0 && !this.isLoading) {
// Don't close immediately, let the "no results" state show briefly
setTimeout(() => {
if (this.results.length === 0) {
this.showResults = false;
}
}, 500);
}
}
},
closeResults() {
this.showResults = false;
},
handleSubmit(e) {
// Allow form to submit normally if there's a query
if (!this.query.trim()) {
e.preventDefault();
}
}
};
}
function toggleMobileMenu() {
const nav = document.getElementById('headerNav');
const isOffCanvas = document.querySelector('.site-header.mobile-off-canvas');
nav.classList.toggle('active');
const isOpen = nav.classList.contains('active');
// Toggle hamburger icon ↔ X
const toggleBtn = document.querySelector('.mobile-menu-toggle i');
if (toggleBtn) {
toggleBtn.classList.toggle('fa-bars', !isOpen);
toggleBtn.classList.toggle('fa-times', isOpen);
}
// Handle off-canvas overlay
if (isOffCanvas) {
let overlay = document.getElementById('offcanvasOverlay');
if (!overlay) {
overlay = document.createElement('div');
overlay.id = 'offcanvasOverlay';
overlay.className = 'offcanvas-overlay';
overlay.onclick = function() { toggleMobileMenu(); };
}
// The overlay MUST live inside the header, not in <body>.
// A sticky header carries z-index:1000, which makes it a stacking
// context — so the off-canvas nav's z-index:1100 is resolved INSIDE
// that context and can never beat an overlay sitting at z-index:1090
// in the root context. The dimmer therefore painted on top of the open
// menu, and every tap on a nav link hit the overlay instead, which just
// closed the menu (its onclick) rather than following the link.
// Keeping both in the same stacking context restores 1100 > 1090.
if (overlay.parentElement !== isOffCanvas) {
isOffCanvas.appendChild(overlay);
}
overlay.classList.toggle('active', isOpen);
}
}
// Close menu when clicking outside
document.addEventListener('click', function(e) {
const nav = document.getElementById('headerNav');
if (!nav || !nav.classList.contains('active')) return;
const toggleBtn = document.querySelector('.mobile-menu-toggle');
// Don't close if clicking inside the menu or on the toggle button
if (nav.contains(e.target) || (toggleBtn && toggleBtn.contains(e.target))) return;
// Don't interfere with off-canvas overlay (it has its own handler)
if (document.querySelector('.site-header.mobile-off-canvas')) return;
toggleMobileMenu();
});
// Off-canvas close button (pseudo-element click)
document.addEventListener('click', function(e) {
const nav = document.getElementById('headerNav');
if (nav && nav.classList.contains('active') && document.querySelector('.site-header.mobile-off-canvas')) {
const rect = nav.getBoundingClientRect();
const isRTL = document.documentElement.dir === 'rtl' || document.body.dir === 'rtl';
const closeX = isRTL ? rect.left + 15 : rect.right - 15 - 36;
const closeY = rect.top + 15;
if (e.clientX >= closeX && e.clientX <= closeX + 36 && e.clientY >= closeY && e.clientY <= closeY + 36) {
toggleMobileMenu();
}
}
});
function toggleSearch() {
const search = document.getElementById('searchExpandable');
if (search) {
search.style.display = search.style.display === 'none' ? 'block' : 'none';
if (search.style.display === 'block') {
search.querySelector('input').focus();
}
}
}
// Mobile dropdown toggle (level 1)
document.querySelectorAll('.nav-item.has-dropdown > .nav-link, .nav-item.has-dropdown > .nav-label').forEach(link => {
link.addEventListener('click', function(e) {
if (window.innerWidth <= 991) {
e.preventDefault();
this.parentElement.classList.toggle('dropdown-open');
}
});
});
// Mobile dropdown toggle (level 2 - sub-menus)
document.querySelectorAll('.sf-has-sub > a, .sf-has-sub > .sf-dropdown-label').forEach(link => {
link.addEventListener('click', function(e) {
if (window.innerWidth <= 991) {
e.preventDefault();
this.parentElement.classList.toggle('dropdown-open');
}
});
});
// Cart count management - server renders the correct count via middleware
// Store server count in localStorage for any AJAX operations that need it
document.addEventListener('DOMContentLoaded', function() {
const cartCountEl = document.getElementById('cart-count');
if (cartCountEl) {
// Save server-rendered count to localStorage (don't override server value!)
localStorage.setItem('cart_count', cartCountEl.textContent);
}
});
// Global function to update cart count (call after add/remove operations)
window.updateCartCount = function(count) {
const cartCountEl = document.getElementById('cart-count');
if (cartCountEl) {
cartCountEl.textContent = count;
localStorage.setItem('cart_count', count);
}
// Sync bottom nav cart count
const bottomCount = document.getElementById('bottom-cart-count');
if (bottomCount) bottomCount.textContent = count;
};
// Increment cart count by amount (for AJAX add to cart)
window.incrementCartCount = function(amount = 1) {
const cartCountEl = document.getElementById('cart-count');
if (cartCountEl) {
const newCount = parseInt(cartCountEl.textContent || 0) + amount;
cartCountEl.textContent = newCount;
localStorage.setItem('cart_count', newCount);
}
};
// Decrement cart count by amount (for AJAX remove from cart)
window.decrementCartCount = function(amount = 1) {
const cartCountEl = document.getElementById('cart-count');
if (cartCountEl) {
const newCount = Math.max(0, parseInt(cartCountEl.textContent || 0) - amount);
cartCountEl.textContent = newCount;
localStorage.setItem('cart_count', newCount);
}
};
</script>
<div class="page-content">
<div class="page-container"
data-sf-container="container-azal-14"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="row mx-0" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12 px-0" >
<div class="az-hero" data-sf-section="section-azal-1" > <section class="hero-banner-section" style="padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px;">
<div class="hero-carousel-container">
<div class="swiper hero-banner-6ab697cbe9c5d" data-banner-id="hero-banner-6ab697cbe9c5d">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="hero-single-full hero-f24a270af8b5" style="background-color: #000000; position: relative; overflow: hidden;">
<picture>
<source media="(max-width: 991px)" srcset="https://soci-t-myriam-diffusion.mallatech.tn/storage/products/gallery/6a928c1ed623a-pack-she-care-1787989022.webp">
<img src="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/gfhgfhg-1788879623.webp" alt="" class="hero-sf-img" style=" width: 100%; height: 500px; display: block; object-fit: cover; object-position: center center; ">
</picture>
<div class="hero-sf-content" style="position: absolute; inset: 0; display: flex; align-items: center; z-index: 2;">
<div class="container position-relative">
<div class="row justify-content-start">
<div class="col-lg-10 text-left">
<div class="hero-content animation-fade-up" style="display: flex; flex-direction: column; --animation-duration: 700ms;">
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.hero-single-full {
position: relative;
overflow: hidden;
}
.hero-heading {
font-size: clamp(2rem, 4.5vw, 3rem);
line-height: 1.2;
}
.hero-subheading {
font-size: 1.5rem;
}
.hero-cta-button {
padding: 12px 32px;
font-size: 1rem;
font-weight: 600;
border-radius: 4px;
}
/* Mobile breakpoint matches Bootstrap col-lg (consistent with other hero layouts) */
@media (max-width: 991px) {
.hero-single-full .hero-sf-img {
min-height: 250px;
}
.hero-heading {
font-size: 1.8rem;
}
.hero-subheading {
font-size: 1.1rem;
}
.hero-description {
font-size: 0.9rem;
}
.hero-cta-button {
padding: 10px 24px;
font-size: 0.9rem;
}
}
</style>
</div>
<div class="swiper-slide">
<div class="hero-single-full hero-42f03ecb7c42" style="background-color: #f6f6f4; position: relative; overflow: hidden;">
<picture>
<source media="(max-width: 991px)" srcset="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/img-3307-1-1790067893.jpg">
<img src="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/capture-decran-2026-08-24-122802-1787571187.webp" alt="" class="hero-sf-img" style=" width: 100%; height: 500px; display: block; object-fit: cover; object-position: center center; ">
</picture>
<div class="hero-sf-content" style="position: absolute; inset: 0; display: flex; align-items: center; z-index: 2;">
<div class="container position-relative">
<div class="row justify-content-start">
<div class="col-lg-10 text-left">
<div class="hero-content animation-fade-up" style="display: flex; flex-direction: column; --animation-duration: 700ms;">
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.hero-single-full {
position: relative;
overflow: hidden;
}
.hero-heading {
font-size: clamp(2rem, 4.5vw, 3rem);
line-height: 1.2;
}
.hero-subheading {
font-size: 1.5rem;
}
.hero-cta-button {
padding: 12px 32px;
font-size: 1rem;
font-weight: 600;
border-radius: 4px;
}
/* Mobile breakpoint matches Bootstrap col-lg (consistent with other hero layouts) */
@media (max-width: 991px) {
.hero-single-full .hero-sf-img {
min-height: 250px;
}
.hero-heading {
font-size: 1.8rem;
}
.hero-subheading {
font-size: 1.1rem;
}
.hero-description {
font-size: 0.9rem;
}
.hero-cta-button {
padding: 10px 24px;
font-size: 0.9rem;
}
}
</style>
</div>
<div class="swiper-slide">
<div class="hero-single-full hero-d9120c200840" style="background-color: #667eea; position: relative; overflow: hidden;">
<picture>
<source media="(max-width: 991px)" srcset="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/img-1017-1790068486.jpg">
<img src="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/capture-decran-2026-08-24-122802-1787571038.webp" alt="" class="hero-sf-img" style=" width: 100%; height: 500px; display: block; object-fit: cover; object-position: center center; ">
</picture>
<div class="hero-sf-content" style="position: absolute; inset: 0; display: flex; align-items: center; z-index: 2;">
<div class="container position-relative">
<div class="row justify-content-center">
<div class="col-lg-10 text-center">
<div class="hero-content animation-fade-up" style="display: flex; flex-direction: column; --animation-duration: 700ms;">
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.hero-single-full {
position: relative;
overflow: hidden;
}
.hero-heading {
font-size: clamp(2rem, 4.5vw, 3rem);
line-height: 1.2;
}
.hero-subheading {
font-size: 1.5rem;
}
.hero-cta-button {
padding: 12px 32px;
font-size: 1rem;
font-weight: 600;
border-radius: 4px;
}
/* Mobile breakpoint matches Bootstrap col-lg (consistent with other hero layouts) */
@media (max-width: 991px) {
.hero-single-full .hero-sf-img {
min-height: 250px;
}
.hero-heading {
font-size: 1.8rem;
}
.hero-subheading {
font-size: 1.1rem;
}
.hero-description {
font-size: 0.9rem;
}
.hero-cta-button {
padding: 10px 24px;
font-size: 0.9rem;
}
}
</style>
</div>
<div class="swiper-slide">
<div class="hero-single-full hero-fd1645c72082" style="background-color: #f6f6f4; position: relative; overflow: hidden;">
<picture>
<source media="(max-width: 991px)" srcset="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/img-2951-1790068332.jpg">
<img src="https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/capture-decran-2026-08-24-122802-1787571549.webp" alt="" class="hero-sf-img" style=" width: 100%; height: 500px; display: block; object-fit: cover; object-position: center center; ">
</picture>
<div class="hero-sf-content" style="position: absolute; inset: 0; display: flex; align-items: center; z-index: 2;">
<div class="container position-relative">
<div class="row justify-content-start">
<div class="col-lg-10 text-left">
<div class="hero-content animation-fade-up" style="display: flex; flex-direction: column; --animation-duration: 700ms;">
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.hero-single-full {
position: relative;
overflow: hidden;
}
.hero-heading {
font-size: clamp(2rem, 4.5vw, 3rem);
line-height: 1.2;
}
.hero-subheading {
font-size: 1.5rem;
}
.hero-cta-button {
padding: 12px 32px;
font-size: 1rem;
font-weight: 600;
border-radius: 4px;
}
/* Mobile breakpoint matches Bootstrap col-lg (consistent with other hero layouts) */
@media (max-width: 991px) {
.hero-single-full .hero-sf-img {
min-height: 250px;
}
.hero-heading {
font-size: 1.8rem;
}
.hero-subheading {
font-size: 1.1rem;
}
.hero-description {
font-size: 0.9rem;
}
.hero-cta-button {
padding: 10px 24px;
font-size: 0.9rem;
}
}
</style>
</div>
</div>
<div class="swiper-button-next hero-nav-btn hero-nav-next"></div>
<div class="swiper-button-prev hero-nav-btn hero-nav-prev"></div>
<div class="swiper-pagination hero-pagination"></div>
</div>
</div>
</section>
</div> </div>
</div>
</div>
<div class="page-container"
data-sf-container="container-azal-18"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12" >
<div class="az-univers" data-sf-section="section-azal-3" > <section class="categories-widget-section" id="categories-widget-6ab697cbece39"
style="padding-top: 84px; padding-bottom: 84px; --accent-color: #1a1a1a; --accent-hover: #1a1a1a;">
<div class="container">
<div class="section-heading-wrapper heading-preset-minimal heading-align-center text-center" style="">
<p class="section-heading-subtitle-top" style="color: #e05a54; font-size: 11px; font-weight: 500;">EXPLORER</p>
<h2 class="section-heading-text" style="color: #4a3b2f; font-size: 26px; font-weight: 600; background-color: transparent; text-align: center; display: inline-block; margin-left: auto; margin-right: auto;">
L'univers azal
</h2>
</div>
<div class="categories-grid categories-grid-grid"
style="display: grid; gap: 14px;">
<div class="category-grid-item animation-fade-up animation-delay-100" style="--animation-duration: 700ms;">
<a href="/collections/maquillage" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/maquillage-1785837672.webp" alt="Maquillage" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Maquillage</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-200" style="--animation-duration: 700ms;">
<a href="/collections/soin" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/soin-1785835894.webp" alt="Soin" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Soin</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-300" style="--animation-duration: 700ms;">
<a href="/collections/cheveux" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/cheveux-1785500791.webp" alt="Cheveux" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Cheveux</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-400" style="--animation-duration: 700ms;">
<a href="/collections/corps" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/corps-1785500866.webp" alt="Corps" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Corps</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-500" style="--animation-duration: 700ms;">
<a href="/collections/parfums" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/parfums-1785837212.webp" alt="Parfums" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Parfums</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-600" style="--animation-duration: 700ms;">
<a href="/collections/accessoires" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/accessoires-1785496652.webp" alt="Accessoires" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Accessoires</h3>
</div>
</div>
</a>
</div>
<div class="category-grid-item animation-fade-up animation-delay-700" style="--animation-duration: 700ms;">
<a href="/collections/azal-home" class="category-card style-overlay">
<div class="category-image-wrapper">
<img src="https://www.azal.tn/storage/categories/azal-home-1785500203.webp" alt="Azal Home" class="category-image" loading="lazy">
<div class="category-overlay">
<h3 class="category-name">Azal Home</h3>
</div>
</div>
</a>
</div>
</div>
</div>
</section>
</div> </div>
</div>
</div> </div>
<div class="page-container"
data-sf-container="container-azal-16"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="row mx-0" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12 px-0" >
</div>
</div>
</div>
<div class="page-container"
data-sf-container="container-azal-20"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12" >
<div class="az-carousel az-new" data-sf-section="section-azal-4" > <section class="product-carousel-section container"
style="padding-top: 0px; padding-bottom: 84px; background-color: #ffffff; --swiper-pagination-color: #c0392b; --swiper-pagination-bullet-inactive-color: #dee2e6;">
<div class="section-heading-wrapper heading-preset-minimal heading-align-left text-left" style="">
<p class="section-heading-subtitle-top" style="color: #999999; font-size: 11px; font-weight: 500;">NEW !</p>
<h2 class="section-heading-text" style="color: #FFFFFF; font-size: 26px; font-weight: 600; background-color: transparent; text-align: left; display: inline-block;">
Nos nouveautés
</h2>
</div>
<div class="product-carousel-wrapper position-relative">
<div class="swiper product-carousel-6ab697cbefa5c"
data-autoplay="false"
data-autoplay-delay="3000"
data-loop="true"
data-slides-desktop="4"
data-slides-tablet="3"
data-slides-mobile="2"
data-space-between="18">
<div class="swiper-wrapper">
<div class="swiper-slide animation-fade-up animation-delay-100" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-14680-7eba">
<div class="clean-img-wrap">
<a href="/product/pack-enfant-routine-cheveux-azal-she-repair">
<img src="/storage/products/product-1788955285.webp" class="clean-img" alt="Pack Enfant Routine Cheveux AZAL – SHE REPAIR" loading="lazy" decoding="async"
srcset="/storage/products/product-1788955285-xl.webp 2000w, /storage/products/product-1788955285-lg.webp 1200w, /storage/products/product-1788955285-md.webp 800w, /storage/products/product-1788955285-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="14680" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="14680"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="14680"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/pack-enfant-routine-cheveux-azal-she-repair" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Pack Enfant Routine Cheveux AZAL – SHE REPAIR
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
86.10 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
<style>
/* ═══════════════ Clean Product Card ═══════════════ */
/* Override master.blade.php global .product-card styles that add border,
shadow, and hover lift. This card has NO container — just bare image + text. */
.product-card.product-card-clean{position:relative;width:100%;background:transparent !important;border:none !important;box-shadow:none !important;border-radius:0 !important;height:auto !important}
.product-card.product-card-clean:hover{background:transparent !important;border:none !important;box-shadow:none !important;transform:none !important}
/* Image — rounded, with hover overlay for ATC */
.clean-img-wrap{position:relative;border-radius:14px;overflow:hidden;background:#f3ede6}
.clean-img-wrap a{display:block;position:relative;padding-bottom:100%}
.clean-img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.product-card-clean:hover .clean-img{transform:scale(1.04)}
/* Badge — red pill, top-left inside image */
.clean-badge{position:absolute;top:12px;left:12px;background:#c0392b;color:#fff;font-size:12px;font-weight:700;padding:4px 10px;border-radius:6px;z-index:3}
.clean-badge-new{background:#10b981}
/* Heart — white circle, top-right inside image */
.clean-heart{position:absolute;top:12px;right:12px;width:36px;height:36px;border-radius:50%;background:#fff;border:none;color:#333;font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:3;box-shadow:0 1px 4px rgba(0,0,0,.1);transition:all .2s}
.clean-heart:hover{color:#c0392b;transform:scale(1.08)}
/* Add to cart — appears on hover only, centered bottom of image */
.clean-hover-atc{position:absolute;bottom:14px;left:14px;right:14px;border:none;padding:10px;font-size:13px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;z-index:3;opacity:0;transform:translateY(8px);transition:opacity .25s ease,transform .25s ease}
.product-card-clean:hover .clean-hover-atc{opacity:1;transform:translateY(0)}
/* Mobile — no hover, hide the ATC overlay entirely */
@media(max-width:767px){
.clean-hover-atc{display:none !important}
}
/* Touch-only circular ATC icon — hidden on hover-capable devices */
.clean-touch-atc{position:absolute;bottom:12px;right:12px;width:36px;height:36px;border-radius:50%;border:none;display:none;align-items:center;justify-content:center;font-size:14px;cursor:pointer;z-index:3;box-shadow:0 2px 8px rgba(0,0,0,.2);transition:filter .25s ease}
@media (hover: none){
.clean-hover-atc{display:none !important}
.clean-touch-atc{display:flex}
}
/* Info underneath — bare text, no container styling */
.clean-info{padding:10px 2px 0}
.clean-title{margin:0 0 4px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.clean-stars{margin-bottom:4px}
.clean-price-row{display:flex;align-items:baseline;gap:8px}
.clean-price{line-height:1.1}
.clean-old{font-size:14px;color:#aaa;text-decoration:line-through;font-weight:400}
</style>
</div>
<div class="swiper-slide animation-fade-up animation-delay-200" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-14628-b926">
<div class="clean-img-wrap">
<a href="/product/pack-routine-cheveux-azal-she-repair">
<img src="/storage/products/pack-routine-cheveux-azal-she-repair-1788857775.webp" class="clean-img" alt="Pack Routine Cheveux AZAL – SHE REPAIR" loading="lazy" decoding="async"
srcset="/storage/products/pack-routine-cheveux-azal-she-repair-1788857775-xl.webp 2000w, /storage/products/pack-routine-cheveux-azal-she-repair-1788857775-lg.webp 1200w, /storage/products/pack-routine-cheveux-azal-she-repair-1788857775-md.webp 800w, /storage/products/pack-routine-cheveux-azal-she-repair-1788857775-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="14628" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="14628"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="14628"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/pack-routine-cheveux-azal-she-repair" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Pack Routine Cheveux AZAL – SHE REPAIR
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
85.10 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-300" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-14627-8421">
<div class="clean-img-wrap">
<a href="/product/pack-routine-cheveux-azal-she-protect">
<img src="/storage/products/pack-routine-cheveux-azal-she-protect-1788854474.webp" class="clean-img" alt="Pack Routine Cheveux AZAL – SHE PROTECT" loading="lazy" decoding="async"
srcset="/storage/products/pack-routine-cheveux-azal-she-protect-1788854474-xl.webp 2000w, /storage/products/pack-routine-cheveux-azal-she-protect-1788854474-lg.webp 1200w, /storage/products/pack-routine-cheveux-azal-she-protect-1788854474-md.webp 800w, /storage/products/pack-routine-cheveux-azal-she-protect-1788854474-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="14627" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="14627"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="14627"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/pack-routine-cheveux-azal-she-protect" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Pack Routine Cheveux AZAL – SHE PROTECT
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
89.10 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-400" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-14626-01bb">
<div class="clean-img-wrap">
<a href="/product/pack-routine-cheveux-azal-she-care">
<img src="/storage/products/pack-routine-cheveux-azal-she-care-1788853535.webp" class="clean-img" alt="Pack Routine Cheveux AZAL – SHE CARE" loading="lazy" decoding="async"
srcset="/storage/products/pack-routine-cheveux-azal-she-care-1788853535-xl.webp 2000w, /storage/products/pack-routine-cheveux-azal-she-care-1788853535-lg.webp 1200w, /storage/products/pack-routine-cheveux-azal-she-care-1788853535-md.webp 800w, /storage/products/pack-routine-cheveux-azal-she-care-1788853535-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="14626" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="14626"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="14626"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/pack-routine-cheveux-azal-she-care" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Pack Routine Cheveux AZAL – SHE CARE
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
85.10 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-500" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7310-0ce9">
<div class="clean-img-wrap">
<a href="/product/shampoing-she-protect-cheveux-colores-et-traites">
<img src="/storage/products/shampoing-she-protect-cheveux-colores-et-traites-1783291204.webp" class="clean-img" alt="Shampoing SHE PROTECT - Cheveux colorés et traités" loading="lazy" decoding="async"
srcset="/storage/products/shampoing-she-protect-cheveux-colores-et-traites-1783291204.webp 2000w, /storage/products/shampoing-she-protect-cheveux-colores-et-traites-1783291204-md.webp 800w, /storage/products/shampoing-she-protect-cheveux-colores-et-traites-1783291204-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="7310" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7310"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7310"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/shampoing-she-protect-cheveux-colores-et-traites" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Shampoing SHE PROTECT - Cheveux colorés et traités
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
27.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-600" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7309-a5be">
<div class="clean-img-wrap">
<a href="/product/shampoing-she-repair-cheveux-secs">
<img src="/storage/products/shampoing-she-repair-cheveux-secs-1783291130.webp" class="clean-img" alt="Shampoing SHE REPAIR - Cheveux secs" loading="lazy" decoding="async"
srcset="/storage/products/shampoing-she-repair-cheveux-secs-1783291130.webp 2000w, /storage/products/shampoing-she-repair-cheveux-secs-1783291130-md.webp 800w, /storage/products/shampoing-she-repair-cheveux-secs-1783291130-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="7309" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7309"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7309"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/shampoing-she-repair-cheveux-secs" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Shampoing SHE REPAIR - Cheveux secs
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
24.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-700" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7308-c999">
<div class="clean-img-wrap">
<a href="/product/shampoing-she-care-cheveux-gras">
<img src="/storage/products/shampoing-she-care-cheveux-gras-1784109756.webp" class="clean-img" alt="Shampoing SHE CARE - Cheveux gras" loading="lazy" decoding="async"
srcset="/storage/products/shampoing-she-care-cheveux-gras-1784109756.webp 2000w, /storage/products/shampoing-she-care-cheveux-gras-1784109756-md.webp 800w, /storage/products/shampoing-she-care-cheveux-gras-1784109756-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="7308" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7308"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7308"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/shampoing-she-care-cheveux-gras" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Shampoing SHE CARE - Cheveux gras
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
24.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-800" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7069-5132">
<div class="clean-img-wrap">
<a href="/product/traitement-she-care-cheveux-gras">
<img src="/storage/products/traitement-she-care-cheveux-gras-1783291333.webp" class="clean-img" alt="Traitement SHE CARE - Cheveux gras" loading="lazy" decoding="async"
srcset="/storage/products/traitement-she-care-cheveux-gras-1783291333.webp 2000w, /storage/products/traitement-she-care-cheveux-gras-1783291333-md.webp 800w, /storage/products/traitement-she-care-cheveux-gras-1783291333-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-heart quick-view-btn" data-product-id="7069" title="Aperçu Rapide">
<i class="far fa-eye"></i>
</button>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7069"
style="background:#c0392b;color:#ffffff;border-radius:8px;">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7069"
style="background:#c0392b;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/traitement-she-care-cheveux-gras" class="text-decoration-none">
<h5 class="clean-title" style="color:#2c2c2c;font-size:14px;font-weight:500;">
Traitement SHE CARE - Cheveux gras
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#000000;font-size:16px;font-weight:700;">
17.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="swiper-button-next carousel-nav-btn"></div>
<div class="swiper-button-prev carousel-nav-btn"></div>
</div>
</div>
</section>
</div> </div>
</div>
</div> </div>
<div class="page-container"
data-sf-container="container-azal-22"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="row mx-0" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12 px-0" >
<div class="az-band az-band-senteurs" data-sf-section="section-azal-5" > <section id="cta-v2-6ab697cbf2f48"
class="cta-v2-section cta-v2-split az-band az-band-senteurs"
style=" min-height: 78px; margin-top: 0px; margin-bottom: 0px; border-radius: 0px; background-image: url('https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/liquid-blush-1-1783338877.jpg'); background-size: cover; background-position: center; background-repeat: no-repeat; position: relative; overflow: hidden; "
>
<div class="cta-v2-overlay" style="background: #1a1214; opacity: 0.01;"></div>
<div class="cta-v2-inner" style="padding-top: 80px; padding-bottom: 80px;">
<div class="container-fluid px-0">
<div class="cta-v2-split">
<div class="cta-v2-split-content" style="text-align: center;">
<h2 class="cta-v2-heading" style="color: #ffffff; font-size: h2px;">
<br>
</h2>
<p class="cta-v2-description" style="color: rgba(255,255,255,.95);">
<br>
</p>
<div class="cta-v2-buttons">
<a href="#" class="cta-v2-btn cta-v2-btn-primary cta-v2-btn-solid">
<span >Get Started Now</span>
</a>
</div>
</div>
<div class="cta-v2-split-image">
</div>
</div>
</div>
</div>
</section>
</div> </div>
</div>
</div>
<div class="page-container"
data-sf-container="container-azal-24"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12" >
<div class="az-carousel az-gloss" data-sf-section="section-azal-6" > <section class="product-carousel-section container"
style="padding-top: 84px; padding-bottom: 6px; background-color: #ffffff; --swiper-pagination-color: #1a1a1a; --swiper-pagination-bullet-inactive-color: #dee2e6;">
<div class="section-heading-wrapper heading-preset-minimal heading-align-left text-left" style="">
<p class="section-heading-subtitle-top" style="color: #999999; font-size: 11px; font-weight: 500;">TOP VENTES</p>
<h2 class="section-heading-text" style="color: #4a3b2f; font-size: 26px; font-weight: 600; background-color: transparent; text-align: left; display: inline-block;">
Nos gloss best-sellers
</h2>
</div>
<div class="product-carousel-wrapper position-relative">
<div class="swiper product-carousel-6ab697cc01389"
data-autoplay="false"
data-autoplay-delay="3000"
data-loop="true"
data-slides-desktop="4"
data-slides-tablet="3"
data-slides-mobile="2"
data-space-between="18">
<div class="swiper-wrapper">
<div class="swiper-slide animation-fade-up animation-delay-100" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-15720-ece7">
<div class="clean-img-wrap">
<a href="/product/matcha-edition">
<img src="/storage/products/make-it-fake-1789999051.webp" class="clean-img" alt="Matcha EDITION" loading="lazy" decoding="async"
srcset="/storage/products/make-it-fake-1789999051.webp 2000w, /storage/products/make-it-fake-1789999051-md.webp 800w, /storage/products/make-it-fake-1789999051-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<span class="clean-badge clean-badge-new">Nouveau</span>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="15720"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="15720"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/matcha-edition" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Matcha EDITION
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
12.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-200" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-10804-6903">
<div class="clean-img-wrap">
<a href="/product/rouge-a-levres-semi-mat">
<img src="/storage/products/rouge-a-levres-semi-mat-1785244531.webp" class="clean-img" alt="Rouge à Lèvres Semi-Mat" loading="lazy" decoding="async"
srcset="/storage/products/rouge-a-levres-semi-mat-1785244531.webp 2000w, /storage/products/rouge-a-levres-semi-mat-1785244531-md.webp 800w, /storage/products/rouge-a-levres-semi-mat-1785244531-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="10804"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="10804"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/rouge-a-levres-semi-mat" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Rouge à Lèvres Semi-Mat
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
13.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-300" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7243-6ed7">
<div class="clean-img-wrap">
<a href="/product/baume-a-levres">
<img src="/storage/products/baume-a-levres-1783170512.webp" class="clean-img" alt="Baume à lévres" loading="lazy" decoding="async"
srcset="/storage/products/baume-a-levres-1783170512.webp 2000w, /storage/products/baume-a-levres-1783170512-md.webp 800w, /storage/products/baume-a-levres-1783170512-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7243"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7243"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/baume-a-levres" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Baume à lévres
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
6.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-400" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7242-cc52">
<div class="clean-img-wrap">
<a href="/product/glitter-attack">
<img src="/storage/products/glitter-attack-1783170159.webp" class="clean-img" alt="Glitter Attack" loading="lazy" decoding="async"
srcset="/storage/products/glitter-attack-1783170159.webp 2000w, /storage/products/glitter-attack-1783170159-md.webp 800w, /storage/products/glitter-attack-1783170159-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7242"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7242"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/glitter-attack" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Glitter Attack
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
13.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-500" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7138-7427">
<div class="clean-img-wrap">
<a href="/product/magic-balm">
<img src="/storage/products/magic-balm-1783074157.png" class="clean-img" alt="Magic Balm" loading="lazy" decoding="async"
srcset="/storage/products/magic-balm-1783074157.png 2000w, /storage/products/magic-balm-1783074157-md.webp 800w, /storage/products/magic-balm-1783074157-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7138"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7138"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/magic-balm" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Magic Balm
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
11.40 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-600" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7136-1404">
<div class="clean-img-wrap">
<a href="/product/lip-oil-glow-therapi">
<img src="/storage/products/lip-oil-glow-therapi-1783073276.png" class="clean-img" alt="Lip Oil GLOW THERAPI" loading="lazy" decoding="async"
srcset="/storage/products/lip-oil-glow-therapi-1783073276.png 2000w, /storage/products/lip-oil-glow-therapi-1783073276-md.webp 800w, /storage/products/lip-oil-glow-therapi-1783073276-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7136"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7136"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/lip-oil-glow-therapi" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Lip Oil GLOW THERAPI
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
14.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-700" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7135-8ebc">
<div class="clean-img-wrap">
<a href="/product/lets-shine-500">
<img src="/storage/products/lets-shine-500-1783072966.webp" class="clean-img" alt="Let's Shine - 500" loading="lazy" decoding="async"
srcset="/storage/products/lets-shine-500-1783072966.webp 2000w, /storage/products/lets-shine-500-1783072966-md.webp 800w, /storage/products/lets-shine-500-1783072966-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7135"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7135"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/lets-shine-500" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Let's Shine - 500
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
10.00 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
<div class="swiper-slide animation-fade-up animation-delay-800" style="--animation-duration: 600ms;">
<div class="product-card product-card-clean" id="cln-7134-c4e7">
<div class="clean-img-wrap">
<a href="/product/make-it-fake">
<img src="/storage/products/make-it-fake-1783072786.png" class="clean-img" alt="Make It Fake" loading="lazy" decoding="async"
srcset="/storage/products/make-it-fake-1783072786.png 2000w, /storage/products/make-it-fake-1783072786-md.webp 800w, /storage/products/make-it-fake-1783072786-sm.webp 400w" sizes="(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 25vw" >
</a>
<button type="button" class="clean-hover-atc add-to-cart-btn" data-product-id="7134"
style="background:#1a1a1a;color:#ffffff;border-radius:var(--sf-btn-radius, 8px);">
<i class="fas fa-shopping-cart"></i> Ajouter au Panier
</button>
<button type="button" class="clean-touch-atc add-to-cart-btn" data-product-id="7134"
style="background:#1a1a1a;color:#ffffff;"
title="Ajouter au Panier">
<i class="fas fa-cart-plus"></i>
</button>
</div>
<div class="clean-info">
<a href="/product/make-it-fake" class="text-decoration-none">
<h5 class="clean-title" style="color:#1a1a1a;font-size:14px;font-weight:500;">
Make It Fake
</h5>
</a>
<div class="clean-price-row">
<span class="clean-price" style="color:#1a1a1a;font-size:16px;font-weight:700;">
12.90 <small style="font-size:11px;font-weight:600;">TND</small>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="swiper-button-next carousel-nav-btn"></div>
<div class="swiper-button-prev carousel-nav-btn"></div>
</div>
</div>
</section>
</div> </div>
</div>
</div> </div>
<div class="page-container"
data-sf-container="container-azal-26"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12" >
<div class="az-gloss-btn" data-sf-section="section-azal-7" > <section class="button-widget-section"
id="button-widget-section-azal-7-section"
style="padding-top: 8px; padding-bottom: 84px; margin-top: 0px; margin-bottom: 0px; text-align: center;">
<div class="container">
<a href="/collections/levres"
target="_self"
id="button-widget-section-azal-7"
class="btn btn-hover-lift"
style=" background-color: #fdf1f3; border: 1px solid #f7c9d0; color: #1a1a1a; border-radius: 999px; padding: 12px 24px; font-family: inherit; font-size: 16px; font-weight: 600; letter-spacing: 0px; text-transform: none; box-shadow: none; transition: all 0.3s ease; display: inline-flex; align-items: center; justify-content: center; text-decoration: none;"
>
<span >Voir tous les gloss</span>
</a>
</div>
</section>
</div> </div>
</div>
</div> </div>
<div class="page-container"
data-sf-container="container-azal-29"
style="padding: 0px 0px 84px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-6" style="padding: 0px 8px 0px 0px;" >
<div class="az-feature-card" data-sf-section="section-azal-8" > <section class="rich-text-section container"
style="background-color: #ffffff; padding-top: 0px; padding-bottom: 0px;">
<div class="row">
<div class="col-12 text-left">
<div class="rich-text-content"
style="color: var(--sf-text-color, #333333); font-size: 16px; line-height: 1.8; font-family: inherit; max-width: 1200px; margin-left: auto; margin-right: auto; ">
<div class="az-fc"><div class="az-fc-body"><h3>Maquillages</h3><ul><li>Teint</li><li>Lèvres</li><li>Yeux</li><li>Ongles</li></ul><p>Découvrez nos essentiels pour un teint parfait, un regard intense, des lèvres sublimées et des ongles impeccables.</p><a class="az-fc-btn" href="/collections/maquillage">Explorez le maquillage</a></div></div>
</div>
</div>
</div>
</section>
</div> </div>
<div class="col-md-6" style="padding: 0px 0px 0px 8px;" >
<div class="az-feature-card" data-sf-section="section-azal-9" > <section class="rich-text-section container"
style="background-color: #ffffff; padding-top: 0px; padding-bottom: 0px;">
<div class="row">
<div class="col-12 text-left">
<div class="rich-text-content"
style="color: var(--sf-text-color, #333333); font-size: 16px; line-height: 1.8; font-family: inherit; max-width: 1200px; margin-left: auto; margin-right: auto; ">
<div class="az-fc"><div class="az-fc-body"><h3>Cheveux</h3><ul><li>Shampoing & masque</li><li>Soins capillaires</li></ul><p>Prenez soin de vos cheveux avec nos routines nourrissantes, réparatrices et protectrices adaptées à chaque besoin.</p><a class="az-fc-btn" href="/collections/cheveux">Explorez nos produits capillaires</a></div></div>
</div>
</div>
</div>
</section>
</div> </div>
</div>
</div> </div>
<div class="page-container"
data-sf-container="container-azal-31"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="row mx-0" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12 px-0" >
<div class="az-band az-band-home" data-sf-section="section-azal-10" > <section id="cta-v2-6ab697cc04f42"
class="cta-v2-section cta-v2-split az-band az-band-home"
style=" min-height: 460px; margin-top: 0px; margin-bottom: 0px; border-radius: 0px; background-image: url('https://soci-t-myriam-diffusion.mallatech.tn/storage/sf-media/969/media/general/chatgpt-image-31-juil-2026-10-38-55-1785490803.webp'); background-size: cover; background-position: center; background-repeat: no-repeat; position: relative; overflow: hidden; "
>
<div class="cta-v2-overlay" style="background: #000000; opacity: 0.3;"></div>
<div class="cta-v2-inner" style="padding-top: 80px; padding-bottom: 80px;">
<div class="container-fluid px-0">
<div class="cta-v2-split">
<div class="cta-v2-split-content" style="text-align: left;">
<div class="section-heading-wrapper heading-preset-minimal heading-align-left text-left" style="">
<p class="section-heading-subtitle-top" style="color: var(--sf-muted-color, #999999); font-size: 11px; font-weight: 500;">AZAL HOME</p>
<h2 class="section-heading-text" style="color: #ffffff; font-size: 28px; font-weight: 600; background-color: transparent; text-align: left; display: inline-block;">
<br>
</h2>
</div>
<div class="cta-v2-buttons">
<a href="/collections/azal-home" class="cta-v2-btn cta-v2-btn-primary cta-v2-btn-solid">
<span >Découvrir AZAL Home</span>
</a>
</div>
</div>
<div class="cta-v2-split-image">
</div>
</div>
</div>
</div>
</section>
</div> </div>
</div>
</div>
<div class="page-container"
data-sf-container="container-azal-33"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #fdf1f3;">
<div class="row mx-0" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12 px-0" >
<div class="az-avis" data-sf-section="section-azal-11" > <section class="tv2-6ab697cc0553a-section az-avis"
id="tv2-6ab697cc0553a"
style="padding-top: 96px; padding-bottom: 96px; margin-top: 0px; margin-bottom: 0px; ">
<div class="container-fluid px-0">
<div class="section-heading-wrapper heading-preset-minimal heading-align-center text-center" style="">
<p class="section-heading-subtitle-top" style="color: #6b7280; font-size: 11px; font-weight: 500;">AVIS CLIENTS</p>
<h2 class="section-heading-text" style="color: #4a3b2f; font-size: 26px; font-weight: 600; background-color: transparent; text-align: center; display: inline-block; margin-left: auto; margin-right: auto;">
Elles adorent azal
</h2>
</div>
<div class="tv2-6ab697cc0553a-carousel" id="tv2-6ab697cc0553a-carousel">
<div class="tv2-6ab697cc0553a-carousel-track" id="tv2-6ab697cc0553a-track">
<div class="tv2-6ab697cc0553a-carousel-slide">
<div class="tv2-6ab697cc0553a-card layout-carousel">
<span class="tv2-6ab697cc0553a-card-quote-icon" aria-hidden="true">“</span>
<div class="tv2-6ab697cc0553a-card-header">
<div class="tv2-6ab697cc0553a-stars">
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
</div>
</div>
<p class="tv2-6ab697cc0553a-card-text">Les gloss sont incroyables 😍 ils ne collent pas et donnent un effet ultra brillant tout en restant confortables toute la journée.</p>
<div class="tv2-6ab697cc0553a-card-footer">
<div class="tv2-6ab697cc0553a-card-avatar"
>
<span class="tv2-6ab697cc0553a-card-avatar-ring">
<span class="tv2-6ab697cc0553a-avatar-fallback tv2-6ab697cc0553a-card-avatar-img" style="background: #3b82f6;">IB</span>
</span>
</div>
<div class="tv2-6ab697cc0553a-card-author-info">
<p class="tv2-6ab697cc0553a-card-name">
<span>Ines B.</span>
</p>
<p class="tv2-6ab697cc0553a-card-role">Tunis</p>
<div class="tv2-6ab697cc0553a-card-meta">
</div>
</div>
</div>
</div>
</div>
<div class="tv2-6ab697cc0553a-carousel-slide">
<div class="tv2-6ab697cc0553a-card layout-carousel">
<span class="tv2-6ab697cc0553a-card-quote-icon" aria-hidden="true">“</span>
<div class="tv2-6ab697cc0553a-card-header">
<div class="tv2-6ab697cc0553a-stars">
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
</div>
</div>
<p class="tv2-6ab697cc0553a-card-text">La brume Magic Dream sent divinement bon et tient vraiment longtemps. Livraison rapide et produits authentiques.</p>
<div class="tv2-6ab697cc0553a-card-footer">
<div class="tv2-6ab697cc0553a-card-avatar"
>
<span class="tv2-6ab697cc0553a-card-avatar-ring">
<span class="tv2-6ab697cc0553a-avatar-fallback tv2-6ab697cc0553a-card-avatar-img" style="background: #eab308;">SK</span>
</span>
</div>
<div class="tv2-6ab697cc0553a-card-author-info">
<p class="tv2-6ab697cc0553a-card-name">
<span>Salma K.</span>
</p>
<p class="tv2-6ab697cc0553a-card-role">Sfax</p>
<div class="tv2-6ab697cc0553a-card-meta">
</div>
</div>
</div>
</div>
</div>
<div class="tv2-6ab697cc0553a-carousel-slide">
<div class="tv2-6ab697cc0553a-card layout-carousel">
<span class="tv2-6ab697cc0553a-card-quote-icon" aria-hidden="true">“</span>
<div class="tv2-6ab697cc0553a-card-header">
<div class="tv2-6ab697cc0553a-stars">
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
<svg class="tv2-6ab697cc0553a-star" viewbox="0 0 20 20" fill="#f59e0b">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"/>
</svg>
</div>
</div>
<p class="tv2-6ab697cc0553a-card-text">Le masque SHE REPAIR a transformé mes cheveux secs. Le packaging est magnifique, on sent la qualité.</p>
<div class="tv2-6ab697cc0553a-card-footer">
<div class="tv2-6ab697cc0553a-card-avatar"
>
<span class="tv2-6ab697cc0553a-card-avatar-ring">
<span class="tv2-6ab697cc0553a-avatar-fallback tv2-6ab697cc0553a-card-avatar-img" style="background: #f97316;">NM</span>
</span>
</div>
<div class="tv2-6ab697cc0553a-card-author-info">
<p class="tv2-6ab697cc0553a-card-name">
<span>Nour M.</span>
</p>
<p class="tv2-6ab697cc0553a-card-role">Sousse</p>
<div class="tv2-6ab697cc0553a-card-meta">
</div>
</div>
</div>
</div>
</div>
</div>
<button class="tv2-6ab697cc0553a-carousel-btn tv2-6ab697cc0553a-carousel-prev" id="tv2-6ab697cc0553a-prev" aria-label="Previous">
<svg width="20" height="20" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>
</button>
<button class="tv2-6ab697cc0553a-carousel-btn tv2-6ab697cc0553a-carousel-next" id="tv2-6ab697cc0553a-next" aria-label="Next">
<svg width="20" height="20" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
</button>
<div class="tv2-6ab697cc0553a-carousel-dots" id="tv2-6ab697cc0553a-dots">
<button class="tv2-6ab697cc0553a-dot active" data-slide="0" aria-label="Go to slide 1"></button>
<button class="tv2-6ab697cc0553a-dot" data-slide="1" aria-label="Go to slide 2"></button>
<button class="tv2-6ab697cc0553a-dot" data-slide="2" aria-label="Go to slide 3"></button>
</div>
</div>
</div>
<div class="tv2-6ab697cc0553a-video-modal" id="tv2-6ab697cc0553a-video-modal">
<div class="tv2-6ab697cc0553a-video-modal-overlay" id="tv2-6ab697cc0553a-video-overlay"></div>
<div class="tv2-6ab697cc0553a-video-modal-content">
<button class="tv2-6ab697cc0553a-video-modal-close" id="tv2-6ab697cc0553a-video-close" aria-label="Close video">
<svg width="24" height="24" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
</button>
<div class="tv2-6ab697cc0553a-video-wrapper">
<iframe id="tv2-6ab697cc0553a-video-iframe" src="" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>
</div>
</div>
</section>
</div> </div>
</div>
</div>
<div class="page-container"
data-sf-container="container-azal-35"
style="padding: 0px 0px 0px 0px;margin: 0px 0px 0px 0px;background-color: #ffffff;">
<div class="container" > <div class="row" style="align-items: stretch; justify-content: flex-start;">
<div class="col-md-12" >
<div class="az-insta" data-sf-section="section-azal-12" > <section class="ig-feed-section az-insta"
id="ig-feed-6ab697cc05db8"
style="padding-top: 84px; padding-bottom: 90px; margin-top: 0px; margin-bottom: 0px;">
<div class="container">
<div class="section-heading-wrapper heading-preset-minimal heading-align-center text-center" style="">
<p class="section-heading-subtitle-top" style="color: #e0aeae; font-size: 19px; font-weight: 500;">@azal</p>
<h2 class="section-heading-text" style="color: #080808; font-size: 25px; font-weight: 600; background-color: transparent; text-align: center; display: inline-block; margin-left: auto; margin-right: auto;">
Inspirez-vous de notre univers
</h2>
</div>
<div class="text-center py-5">
<i class="fab fa-instagram" style="font-size: 3rem; color: #ccc;"></i>
<p class="text-muted mt-3">No Instagram posts to display.</p>
</div>
</div>
</section>
</div> </div>
</div>
</div> </div>
</div>
<style>
/* Base Animation Settings */
.animate-on-scroll {
opacity: 0;
transition-property: opacity, transform;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
.animate-on-scroll.animated {
opacity: 1;
}
/* Animation Preset 1: Fade In */
.animation-fade-in {
opacity: 0;
}
.animation-fade-in.animated {
opacity: 1;
animation: fadeIn var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Animation Preset 2: Fade In Up */
.animation-fade-up {
opacity: 0;
transform: translateY(30px);
}
.animation-fade-up.animated {
opacity: 1;
transform: translateY(0);
animation: fadeInUp var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Animation Preset 3: Fade In Down */
.animation-fade-down {
opacity: 0;
transform: translateY(-30px);
}
.animation-fade-down.animated {
opacity: 1;
transform: translateY(0);
animation: fadeInDown var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translateY(-30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Animation Preset 4: Fade In Left */
.animation-fade-left {
opacity: 0;
transform: translateX(-30px);
}
.animation-fade-left.animated {
opacity: 1;
transform: translateX(0);
animation: fadeInLeft var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes fadeInLeft {
from {
opacity: 0;
transform: translateX(-30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
/* Animation Preset 5: Fade In Right */
.animation-fade-right {
opacity: 0;
transform: translateX(30px);
}
.animation-fade-right.animated {
opacity: 1;
transform: translateX(0);
animation: fadeInRight var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
/* Animation Preset 6: Zoom In */
.animation-zoom-in {
opacity: 0;
transform: scale(0.8);
}
.animation-zoom-in.animated {
opacity: 1;
transform: scale(1);
animation: zoomIn var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes zoomIn {
from {
opacity: 0;
transform: scale(0.8);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Animation Preset 7: Zoom Out */
.animation-zoom-out {
opacity: 0;
transform: scale(1.2);
}
.animation-zoom-out.animated {
opacity: 1;
transform: scale(1);
animation: zoomOut var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes zoomOut {
from {
opacity: 0;
transform: scale(1.2);
}
to {
opacity: 1;
transform: scale(1);
}
}
/* Animation Preset 8: Slide Up */
.animation-slide-up {
opacity: 0;
transform: translateY(50px);
}
.animation-slide-up.animated {
opacity: 1;
transform: translateY(0);
animation: slideUp var(--animation-duration, 0.8s) ease-out forwards;
}
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(50px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Animation Delays for Stagger Effect */
.animation-delay-100 { animation-delay: 0.1s !important; }
.animation-delay-200 { animation-delay: 0.2s !important; }
.animation-delay-300 { animation-delay: 0.3s !important; }
.animation-delay-400 { animation-delay: 0.4s !important; }
.animation-delay-500 { animation-delay: 0.5s !important; }
.animation-delay-600 { animation-delay: 0.6s !important; }
.animation-delay-700 { animation-delay: 0.7s !important; }
.animation-delay-800 { animation-delay: 0.8s !important; }
</style>
<script>
// Animation Observer - Triggers animations when elements enter viewport
document.addEventListener('DOMContentLoaded', function() {
const animationObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animated');
// Optional: Stop observing after animation
animationObserver.unobserve(entry.target);
}
});
}, {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
});
// Observe all elements with animation classes
document.querySelectorAll('[class*="animation-"]').forEach(el => {
// Don't observe if already animated or if it's inside the page builder editor
if (!el.classList.contains('animated') && !document.querySelector('.page-builder-container')) {
animationObserver.observe(el);
}
});
});
</script>
<footer class="site-footer" style="background-color: #efeeec; color: #1a1a1a; font-family: 'Inter', -apple-system, sans-serif; border-top: 1px solid rgba(255,255,255,0.1);">
<div class="footer-main py-5">
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-6 mb-4">
<div class="footer-logo mb-3">
<img src="https://www.azal.tn/storage/storefronts/969/q9t3oft8HnMGyjXBWsufnhbtgdm997jUTZPh0KFf.png" alt="AZAL" style="max-height: 200px;">
</div>
<div class="footer-description mb-3" style="opacity: 0.8; line-height: 1.6;">
AZAL est une marque beauté tunisienne dédiée à sublimer votre quotidien avec des produits sensoriels, modernes et accessibles.
</div>
<div class="social-links mt-3">
<a href="https://www.facebook.com/azalTunisie/" target="_blank" class="social-link" style="color: #1a1a1a;">
<i class="fab fa-facebook"></i>
</a>
<a href="https://www.instagram.com/azal_official1/" target="_blank" class="social-link" style="color: #1a1a1a;">
<i class="fab fa-instagram"></i>
</a>
<a href="https://www.tiktok.com/@azalofficiel?is_from_webapp=1&sender_device=pc" target="_blank" class="social-link" style="color: #1a1a1a;">
<i class="fab fa-tiktok"></i>
</a>
<a href="#" target="_blank" class="social-link" style="color: #1a1a1a;">
<i class="fab fa-youtube"></i>
</a>
</div>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<h6 class="footer-title mb-3" style="color: #1a1a1a;">Liens Rapides</h6>
<ul class="footer-links list-unstyled">
<li class="mb-2">
<a href="/collections/maquillage" style="color: #1a1a1a; opacity: 0.8;">
Maquillage
</a>
</li>
<li class="mb-2">
<a href="/collections/soin" style="color: #1a1a1a; opacity: 0.8;">
Soin
</a>
</li>
<li class="mb-2">
<a href="/collections/cheveux" style="color: #1a1a1a; opacity: 0.8;">
Cheveux
</a>
</li>
<li class="mb-2">
<a href="/collections/corps" style="color: #1a1a1a; opacity: 0.8;">
Corps
</a>
</li>
<li class="mb-2">
<a href="/collections/parfums" style="color: #1a1a1a; opacity: 0.8;">
Parfums
</a>
</li>
<li class="mb-2">
<a href="/collections/accessoires" style="color: #1a1a1a; opacity: 0.8;">
Accessoires
</a>
</li>
</ul>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<h6 class="footer-title mb-3" style="color: #1a1a1a;">Contact</h6>
<ul class="footer-contact list-unstyled">
<li class="mb-2 d-flex align-items-start">
<i class="fas fa-envelope me-2 mt-1" style="color: #e05a54; width: 16px;"></i>
<a href="/cdn-cgi/l/email-protection#fe9d91908a9f9d8abe9f849f92d08a90" style="color: #1a1a1a; opacity: 0.8;"><span class="__cf_email__" data-cfemail="761519180217150236170c171a580218">[email protected]</span></a>
</li>
<li class="mb-2 d-flex align-items-start">
<i class="fas fa-phone me-2 mt-1" style="color: #e05a54; width: 16px;"></i>
<a href="tel:+216 95 405 060" style="color: #1a1a1a; opacity: 0.8;">+216 95 405 060</a>
</li>
<li class="mb-2 d-flex align-items-start">
<i class="fab fa-whatsapp me-2 mt-1" style="color: #25D366; width: 16px;"></i>
<a href="https://wa.me/21695405060" target="_blank" style="color: #1a1a1a; opacity: 0.8;">+216 95 405 060</a>
</li>
<li class="mb-2 d-flex align-items-start">
<i class="fas fa-map-marker-alt me-2 mt-1" style="color: #e05a54; width: 16px;"></i>
<span style="color: #1a1a1a; opacity: 0.8;">Sidi Rezig , Megrine</span>
</li>
</ul>
</div>
<div class="col-lg-3 col-md-6 mb-4">
<h6 class="footer-title mb-3" style="color: #1a1a1a;">Abonnez-vous à notre newsletter</h6>
<p class="small mb-3" style="opacity: 0.7;">Nouveautés, offres et conseils beauté — directement dans votre boîte mail.</p>
<form class="newsletter-form">
<div class="mb-2">
<input type="email" class="form-control form-control-sm" placeholder="Votre adresse e-mail" style="background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); color: #1a1a1a;">
</div>
<button type="submit" class="btn btn-sm w-100" style="background: #e05a54; color: #fff;">S'abonner</button>
</form>
</div>
</div>
</div>
</div>
<div class="footer-bottom py-3" style="border-top: 1px solid rgba(255,255,255,0.1);">
<div class="container">
<div class="row align-items-center">
<div class="col-md-4 text-center text-md-start mb-2 mb-md-0">
<p class="mb-0 small" style="opacity: 0.7;">
© 2026 AZAL — Tous droits réservés.
</p>
</div>
<div class="col-md-4 text-center mb-2 mb-md-0">
<div class="payment-icons">
<i class="fab fa-cc-visa fa-lg me-2" style="opacity: 0.6;"></i>
<i class="fab fa-cc-mastercard fa-lg me-2" style="opacity: 0.6;"></i>
<i class="fab fa-cc-paypal fa-lg me-2" style="opacity: 0.6;"></i>
<i class="fab fa-cc-amex fa-lg" style="opacity: 0.6;"></i>
</div>
</div>
<div class="col-md-4 text-center text-md-end">
<p class="mb-0 small" style="opacity: 0.6;">
Créé par <a href="https://mallatech.tn" target="_blank" style="color: #e05a54; text-decoration: none;">Mallatech</a>
</p>
</div>
</div>
</div>
</div>
</footer>
<style>
/* Footer Styles */
.site-footer {
font-size: 14px;
}
.site-footer a {
text-decoration: none;
transition: opacity 0.2s, color 0.2s;
}
.site-footer a:hover {
opacity: 1 !important;
}
.footer-title {
font-size: 14px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 1rem;
}
.footer-description {
font-size: 14px;
line-height: 1.7;
}
.footer-links a {
font-size: 14px;
display: inline-block;
transition: transform 0.2s;
}
.footer-links a:hover {
transform: translateX(3px);
}
.footer-contact a {
font-size: 14px;
}
.social-links {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
.social-link {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background: rgba(255,255,255,0.1);
transition: all 0.2s;
font-size: 16px;
}
.social-link:hover {
background: rgba(255,255,255,0.2);
transform: translateY(-3px);
}
.newsletter-form .form-control {
font-size: 14px;
}
.newsletter-form .form-control::placeholder {
color: rgba(255,255,255,0.5);
}
.newsletter-form .form-control:focus {
background: rgba(255,255,255,0.15);
border-color: #e05a54;
box-shadow: none;
color: #1a1a1a;
}
.newsletter-form .btn:hover {
filter: brightness(1.1);
}
.payment-icons {
display: inline-flex;
gap: 5px;
}
/* Mobile Responsive */
@media (max-width: 767px) {
.site-footer .row > div {
text-align: center !important;
}
.social-links {
justify-content: center;
}
.footer-links {
display: inline-block;
text-align: center;
}
.footer-contact {
text-align: left;
display: inline-block;
}
.newsletter-form {
flex-direction: column;
}
.newsletter-form .form-control {
max-width: 100% !important;
}
}
</style>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://www.azal.tn/vendor/bootstrap/js/bootstrap5.bundle.min.js?v=5.3.2" defer></script>
<div class="modal fade" id="globalVariationModal" tabindex="-1" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" style="max-width: 420px;">
<div class="modal-content" style="border-radius: 20px; overflow: hidden; box-shadow: 0 25px 50px rgba(0,0,0,0.15);">
<div class="modal-header border-0 pb-0" style="padding: 20px 24px 0;">
<h5 class="modal-title fw-bold" id="variationModalTitle" style="font-size: 18px;">Sélectionnez les options</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body" id="variationModalBody" style="padding: 20px 24px;">
<div class="text-center py-4" id="variationModalLoading">
<div class="spinner-border text-primary" role="status" style="width: 2rem; height: 2rem;"></div>
<p class="mt-2 text-muted small">Loading...</p>
</div>
<div id="variationModalContent" style="display: none;">
<div class="d-flex gap-3 mb-4 pb-3" style="border-bottom: 1px solid #f0f0f0;">
<img id="variationModalImage" src="" alt="" style="width: 80px; height: 80px; object-fit: cover; border-radius: 12px; background: #f8f9fa;">
<div class="d-flex flex-column justify-content-center">
<h6 id="variationModalProductName" class="mb-1" style="font-size: 15px; font-weight: 600; line-height: 1.3;"></h6>
<div id="variationModalPrice" class="fw-bold" style="color: #10b981; font-size: 18px;"></div>
</div>
</div>
<div class="mb-2" id="variationModalChooseLabel" style="font-size: 13px; font-weight: 600; color: #6b7280; text-transform: uppercase; letter-spacing: 0.5px;">Choisir une option</div>
<div id="variationModalOptions"></div>
<div id="variationModalError" class="mt-3" style="display: none; color: #ef4444; font-size: 13px; background: #fef2f2; padding: 10px 14px; border-radius: 8px;">
<i class="fas fa-exclamation-circle me-1"></i>Veuillez sélectionner une option
</div>
</div>
</div>
<div class="modal-footer border-0" style="padding: 0 24px 24px; gap: 10px;">
<button type="button" class="btn btn-light flex-grow-1" data-bs-dismiss="modal" style="border-radius: 12px; padding: 12px; font-weight: 500;">Cancel</button>
<button type="button" class="btn btn-primary flex-grow-1" id="variationModalSubmit" style="border-radius: 12px; padding: 12px; font-weight: 600;">
<i class="fas fa-shopping-cart me-2"></i>Add to Cart
</button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Use StorefrontUrl helper for proper URL generation (handles custom domains automatically)
const cartAddUrl = '/cart/add';
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.content || 'ktudKocFqWiDBm5noPBhi1XvWCZkFIzx0owxUNkY';
let variationModal = null;
let currentProductData = null;
let modalPicker = null;
let isBuyNow = false;
// Initialize modal
const modalEl = document.getElementById('globalVariationModal');
if (modalEl && typeof bootstrap !== 'undefined') {
variationModal = new bootstrap.Modal(modalEl);
}
// Function to submit cart form
function submitCartForm(productId, variationId, quantity, buyNow) {
// Track AddToCart event before form submission
if (currentProductData) {
var productData = {
id: productId,
name: currentProductData.name || '',
price: variationId && currentProductData.variations
? (currentProductData.variations.find(v => v.id == variationId)?.price || currentProductData.price)
: currentProductData.price,
category: currentProductData.category || '',
currency: currentProductData.currency || 'TND'
};
// Facebook Pixel - AddToCart
if (typeof fbTrack !== 'undefined' && fbTrack.addToCart) {
fbTrack.addToCart(productData, quantity || 1);
}
// Google Analytics 4 - add_to_cart
if (typeof ga4Track !== 'undefined' && ga4Track.addToCart) {
ga4Track.addToCart(productData, quantity || 1);
}
}
// Drawer mode: add via AJAX and open the cart drawer instead of a full
// page redirect. Buy Now always keeps the native redirect (to checkout).
var behavior = document.body.getAttribute('data-cart-behavior') || 'drawer';
if (!buyNow && behavior === 'drawer' && typeof window.__mtkCartDrawerAdd === 'function') {
return window.__mtkCartDrawerAdd(productId, variationId || null, quantity || 1)
.then(function (res) {
if (res && res.ok === false && res.error) {
if (typeof showToast === 'function') showToast(res.error, 'error');
else alert(res.error);
}
return res;
})
.catch(function () { return classicCartSubmit(productId, variationId, quantity, buyNow); });
}
return classicCartSubmit(productId, variationId, quantity, buyNow);
}
// Classic full-page add: builds a hidden form and submits it (redirect to
// /cart, or /checkout for Buy Now). Used for Buy Now, non-drawer stores, or
// as a fallback when the drawer AJAX path fails. Returns a never-resolving
// promise since the page navigates away.
function classicCartSubmit(productId, variationId, quantity, buyNow) {
const form = document.createElement('form');
form.method = 'POST';
form.action = cartAddUrl;
form.style.display = 'none';
let html = `
<input type="hidden" name="_token" value="${csrfToken}">
<input type="hidden" name="product_id" value="${productId}">
<input type="hidden" name="quantity" value="${quantity || 1}">
`;
if (variationId) {
html += `<input type="hidden" name="variation_id" value="${variationId}">`;
}
if (buyNow) {
html += `<input type="hidden" name="buy_now" value="1">`;
}
form.innerHTML = html;
document.body.appendChild(form);
form.submit();
return new Promise(function () {});
}
// Function to show variation modal
function showVariationModal(productId, btn, buyNowMode) {
if (!variationModal) return;
isBuyNow = buyNowMode;
currentProductData = null;
modalPicker = null;
// Update submit button text
const submitBtn = document.getElementById('variationModalSubmit');
submitBtn.innerHTML = buyNowMode
? '<i class="fas fa-bolt me-2"></i>Buy Now'
: '<i class="fas fa-shopping-cart me-2"></i>Add to Cart';
// Show loading state
document.getElementById('variationModalLoading').style.display = 'block';
document.getElementById('variationModalContent').style.display = 'none';
document.getElementById('variationModalError').style.display = 'none';
variationModal.show();
// Fetch product data
fetch('/api/product/' + productId + '/quick-view', {
headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }
})
.then(res => res.json())
.then(data => {
if (!data.success) throw new Error(data.error || 'Failed to load product');
currentProductData = data;
// Update modal content
document.getElementById('variationModalTitle').textContent = 'Sélectionnez les options';
document.getElementById('variationModalProductName').textContent = data.name;
document.getElementById('variationModalPrice').textContent = parseFloat(data.price).toFixed(2) + ' ' + (data.currency || 'TND');
const imgEl = document.getElementById('variationModalImage');
if (data.image) {
imgEl.src = data.image;
imgEl.style.display = 'block';
} else {
imgEl.style.display = 'none';
}
// Build variation options
const optionsEl = document.getElementById('variationModalOptions');
optionsEl.innerHTML = '';
optionsEl.dataset.selectedVariationId = '';
// The picker owns the labels (one per axis), so the single
// legacy label would only duplicate the first one.
const chooseLabel = document.getElementById('variationModalChooseLabel');
if (chooseLabel) chooseLabel.style.display = 'none';
if (data.variations && data.variations.length > 0) {
// Shared renderer — one chip per value per axis, both axes
// drawn, impossible pairs greyed. See
// partials/variation-picker.blade.php.
modalPicker = window.mtkVariationPicker(optionsEl, data, {
onChange: function (v) {
const varPrice = (v && v.price) || data.price;
document.getElementById('variationModalPrice').textContent =
parseFloat(varPrice).toFixed(2) + ' ' + (data.currency || 'TND');
if (v) document.getElementById('variationModalError').style.display = 'none';
}
});
}
// Show content
document.getElementById('variationModalLoading').style.display = 'none';
document.getElementById('variationModalContent').style.display = 'block';
// Reset button state
if (btn) {
btn.innerHTML = btn.dataset.originalContent || '<i class="fas fa-shopping-cart"></i>';
btn.disabled = false;
}
})
.catch(err => {
console.error('Error loading product:', err);
variationModal.hide();
if (btn) {
btn.innerHTML = btn.dataset.originalContent || '<i class="fas fa-shopping-cart"></i>';
btn.disabled = false;
}
});
}
// Modal submit handler
document.getElementById('variationModalSubmit')?.addEventListener('click', function() {
if (!currentProductData) return;
const optionsEl = document.getElementById('variationModalOptions');
const variationId = optionsEl.dataset.selectedVariationId;
// Check if variation is required
if (currentProductData.is_variable && !variationId) {
document.getElementById('variationModalError').style.display = 'block';
return;
}
this.innerHTML = '<i class="fas fa-spinner fa-spin me-2"></i>Adding...';
this.disabled = true;
var modalSubmitBtn = this;
submitCartForm(currentProductData.id, variationId, 1, isBuyNow).then(function () {
// Only reached in drawer mode (classic redirect navigates away). The
// cart drawer is now open, so close the variation modal behind it.
modalSubmitBtn.innerHTML = isBuyNow
? '<i class="fas fa-bolt me-2"></i>Buy Now'
: '<i class="fas fa-shopping-cart me-2"></i>Add to Cart';
modalSubmitBtn.disabled = false;
if (variationModal) variationModal.hide();
});
});
// Global Add to Cart Button Handler (for buttons not in forms)
document.addEventListener('click', function(e) {
const btn = e.target.closest('.add-to-cart-btn');
if (!btn) return;
// Skip if button is inside a form (let form handle it)
if (btn.closest('form')) return;
e.preventDefault();
e.stopPropagation();
const productId = btn.dataset.productId;
if (!productId) return;
btn.dataset.originalContent = btn.innerHTML;
btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
btn.disabled = true;
// Check if product has variations via quick API call
fetch('/api/product/' + productId + '/quick-view', {
headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }
})
.then(res => res.json())
.then(data => {
if (data.success && !data.is_variable && data.in_stock === false) {
// Out of stock - show notification
btn.innerHTML = btn.dataset.originalContent || '<i class="fas fa-shopping-cart"></i>';
btn.disabled = false;
var outOfStockMsg = 'Ce produit est actuellement en rupture de stock. Veuillez revenir plus tard.';
if (typeof showToast === 'function') {
showToast(outOfStockMsg, 'error');
} else {
alert(outOfStockMsg);
}
return;
}
if (data.success && data.is_variable && data.variations && data.variations.length > 0) {
// Show variation modal
currentProductData = data;
showVariationModal(productId, btn, false);
} else {
// Simple product - add directly
submitCartForm(productId, null, 1, false).then(function () {
// Drawer mode only — restore the button (page didn't reload).
btn.innerHTML = btn.dataset.originalContent || '<i class="fas fa-shopping-cart"></i>';
btn.disabled = false;
});
}
})
.catch(err => {
// On error, try to add anyway
submitCartForm(productId, null, 1, false).then(function () {
btn.innerHTML = btn.dataset.originalContent || '<i class="fas fa-shopping-cart"></i>';
btn.disabled = false;
});
});
});
// Global Buy Now Button Handler (for buttons not in forms)
document.addEventListener('click', function(e) {
const btn = e.target.closest('.buy-now-btn');
if (!btn) return;
// Skip if button is inside a form (let form handle it)
if (btn.closest('form')) return;
e.preventDefault();
e.stopPropagation();
const productId = btn.dataset.productId;
if (!productId) return;
btn.dataset.originalContent = btn.innerHTML;
btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
btn.disabled = true;
// Check if product has variations via quick API call
fetch('/api/product/' + productId + '/quick-view', {
headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }
})
.then(res => res.json())
.then(data => {
if (data.success && data.is_variable && data.variations && data.variations.length > 0) {
// Show variation modal for Buy Now
currentProductData = data;
showVariationModal(productId, btn, true);
} else {
// Simple product - buy directly
submitCartForm(productId, null, 1, true);
}
})
.catch(err => {
// On error, try to buy anyway
submitCartForm(productId, null, 1, true);
});
});
// Global Quick View Button Handler
document.addEventListener('click', function(e) {
const btn = e.target.closest('.quick-view-btn');
if (!btn) return;
e.preventDefault();
e.stopPropagation();
const productId = btn.dataset.productId;
if (!productId) return;
// Show the variation modal in quick-view mode
showVariationModal(productId, btn, false);
});
});
</script>
<script id="global-custom-js">
(function(){function P(e,o){for(var k in o)e.style.setProperty(k,o[k],'important');}function az(){/* product cards: box + persistent ATC (partial uses !important, so JS wins) */document.querySelectorAll('.az-carousel .product-card-clean').forEach(function(c){P(c,{'border':'1px solid #e9e6e3','border-radius':'20px','background':'#fff','padding':'12px 12px 18px'});var b=c.querySelector('.clean-hover-atc');if(b){if(b.parentElement!==c)c.appendChild(b);var mob=window.matchMedia('(max-width:767.98px)').matches;P(b,{'position':'static','opacity':'1','transform':'none','display':'flex','margin':mob?'10px 2px 0':'12px 4px 0','background':'transparent','border':'1.5px solid #1a1a1a','color':'#1a1a1a','border-radius':'999px','font-size':mob?'10px':'13px','font-weight':'600','padding':mob?'8px 4px':'11px 14px','letter-spacing':mob?'.01em':'.02em','text-transform':'none','white-space':'nowrap','overflow':'hidden'});var ic=b.querySelector('i');if(ic){ic.style.setProperty('display',mob?'none':'inline-block','important');}b.onmouseenter=function(){P(b,{'background':'#f9d8dc','border':'1.5px solid #f0b9c3','color':'#1a1a1a'});};b.onmouseleave=function(){P(b,{'background':'transparent','border':'1.5px solid #1a1a1a','color':'#1a1a1a'});};}var t=c.querySelector('.clean-touch-atc');if(t)t.style.setProperty('display','none','important');var p=c.querySelector('.clean-price');if(p&&!p.dataset.azFmt){var v=parseFloat(p.textContent.replace(/[^0-9.]/g,''));if(!isNaN(v)){p.textContent=v.toFixed(3).replace('.',',')+' DT';p.dataset.azFmt='1';}}});/* hero: pill CTA (inline radius beats css) */document.querySelectorAll('.az-hero .hero-cta-button').forEach(function(b){b.style.setProperty('border-radius','999px','important');});/* hero: brand-pink strong words in the description */document.querySelectorAll('.az-hero .hero-description').forEach(function(d){if(d.dataset.azPink)return;d.dataset.azPink='1';['Brumes corps','brumes cheveux','laits pour le corps','brumes et laits corps'].forEach(function(w){d.innerHTML=d.innerHTML.replace(w,'<strong class="az-pink">'+w+'</strong>');});});/* senteurs band: dark left scrim over the photo */document.querySelectorAll('.az-band-senteurs .cta-v2-overlay').forEach(function(o){P(o,{'background':'linear-gradient(90deg, rgba(24,16,18,.78) 0%, rgba(24,16,18,.5) 45%, rgba(24,16,18,.18) 100%)','opacity':'1'});});/* trust strip: strip any card boxes */document.querySelectorAll('.az-trust [class*=feature]').forEach(function(e){P(e,{'background':'transparent','box-shadow':'none','border':'none'});});/* universe grid: mockup 4/3 unequal rows (widget uses an #id selector, so JS) */var g=document.querySelector('.az-univers .categories-grid');var tiles=document.querySelectorAll('.az-univers .category-grid-item');if(g){if(window.matchMedia('(min-width:992px)').matches){g.style.setProperty('grid-template-columns','repeat(12,1fr)','important');tiles.forEach(function(el,i){el.style.setProperty('grid-column',i<4?'span 3':'span 4','important');if(i>=4){el.querySelectorAll('img').forEach(function(im){im.style.setProperty('height','250px','important');});}});}else{g.style.removeProperty('grid-template-columns');tiles.forEach(function(el){el.style.removeProperty('grid-column');});}}/* VOIR TOUT links on the left-aligned carousels */[['az-new','/collections'],['az-gloss','/collections/levres']].forEach(function(cfg){document.querySelectorAll('.'+cfg[0]+' .section-heading-wrapper').forEach(function(w){if(w.querySelector('.az-voir-tout'))return;w.style.position='relative';var a=document.createElement('a');a.className='az-voir-tout';a.href=cfg[1];a.innerHTML='Voir tout →';w.appendChild(a);});});/* mobile clamps: unified heading scale, hero-sized band buttons,
feature-card column alignment, full-width review slides */
var MOB=window.matchMedia('(max-width:767.98px)').matches;
if(MOB){document.querySelectorAll('.az-univers .section-heading-text,.az-carousel .section-heading-text,.az-avis .section-heading-text,.az-insta .section-heading-text').forEach(function(h){h.style.setProperty('font-size','18px','important');});}
if(MOB){document.querySelectorAll('.az-band .section-heading-text').forEach(function(h){h.style.setProperty('font-size','20px','important');});}
document.querySelectorAll('.az-univers .section-heading-subtitle-top,.az-carousel .section-heading-subtitle-top,.az-avis .section-heading-subtitle-top,.az-insta .section-heading-subtitle-top,.az-band .section-heading-subtitle-top').forEach(function(t){if(MOB){t.style.setProperty('font-size','10px','important');}});
if(MOB){document.querySelectorAll('.az-band .cta-v2-btn').forEach(function(a){P(a,{'font-size':'13px','padding':'0.8rem 1.7rem'});});}
if(MOB){document.querySelectorAll('.az-feature-card').forEach(function(fc){var col=fc.closest('[class*=col-]');if(col){col.style.setProperty('padding','0','important');}var card=fc.querySelector('.az-fc');if(card){card.style.setProperty('margin-bottom','16px','important');}});}
if(MOB){document.querySelectorAll('.az-avis [class*="-carousel-slide"]').forEach(function(sl){sl.style.setProperty('width','100%','important');sl.style.setProperty('min-width','100%','important');});}
/* reviews: white square card, thin ink border, centered content */document.querySelectorAll('.az-avis [class*="-carousel-slide"] > div, .az-avis [class*="-carousel-slide"] > article').forEach(function(card){P(card,{'border':'1px solid #1a1a1a','border-radius':'0','text-align':'center','background':'#fff','box-shadow':'none'});card.querySelectorAll('*').forEach(function(e){var cs=window.getComputedStyle(e);if(cs.display==='flex'){P(e,{'justify-content':'center'});}});});/* product page: express form card — dashed blush border */document.querySelectorAll('.express-checkout-inline .card').forEach(function(cd){P(cd,{'border':'2px dashed #f5c3cc','border-radius':'20px','box-shadow':'0 6px 24px rgba(247,201,208,.25)'});});/* product page: express CTA — blush pill, STRUCTURALLY two lines (label / price) */document.querySelectorAll('.express-checkout-inline .express-order-btn').forEach(function(b){var mb=window.matchMedia('(max-width:767.98px)').matches;P(b,{'border-radius':'14px','font-size':mb?'10.5px':'14px','letter-spacing':mb?'.01em':'.06em','font-weight':'700','padding':mb?'11px 6px':'11px 12px','background':'#f7c9d0','color':'#1a1a1a','line-height':'1.35','white-space':'normal'});var pr=b.querySelector('.express-btn-price');var line=b.querySelector('.az-xline');if(!line){line=document.createElement('span');line.className='az-xline';while(b.firstChild&&b.firstChild!==pr){line.appendChild(b.firstChild);}if(pr){b.insertBefore(line,pr);}else{b.appendChild(line);}}P(line,{'display':'block','white-space':'nowrap','overflow':'hidden','text-overflow':'ellipsis','max-width':'100%'});var ic=line.querySelector('i');if(ic&&mb){ic.style.setProperty('display','none','important');}if(pr){P(pr,{'display':'block','font-size':mb?'11.5px':'12.5px','font-weight':'600','letter-spacing':'.02em','opacity':'.8','margin-top':'2px','white-space':'nowrap'});}b.onmouseenter=function(){P(b,{'background':'#f0b9c3','color':'#1a1a1a'});};b.onmouseleave=function(){P(b,{'background':'#f7c9d0','color':'#1a1a1a'});};});/* product page: price in the client millime format (like the cards) */document.querySelectorAll('#price-display-container .current-price').forEach(function(p){if(p.dataset.azFmt)return;var m=p.childNodes[0];if(!m||m.nodeType!==3)return;var v=parseFloat(m.textContent.replace(/[^0-9.]/g,''));if(!isNaN(v)){m.textContent=v.toFixed(3).replace('.',',')+' ';p.dataset.azFmt='1';}});/* instagram follow pill */document.querySelectorAll('.ig-feed-follow__btn').forEach(function(a){P(a,{'background':'transparent','border':'1.5px solid #1a1a1a','color':'#1a1a1a','border-radius':'999px','box-shadow':'none','text-transform':'none','letter-spacing':'.02em','font-size':'13px','font-weight':'600'});});}document.addEventListener('DOMContentLoaded',function(){az();setTimeout(az,600);setTimeout(az,1800);});window.addEventListener('resize',function(){az();});})();
</script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
(function() {
function initSwiper_hero_banner_6ab697cbe9c5d() {
if (typeof Swiper === 'undefined') return;
const swiperContainer = document.querySelector('.hero-banner-6ab697cbe9c5d');
if (!swiperContainer) return;
const slides = swiperContainer.querySelectorAll('.swiper-slide');
if (slides.length === 0) return;
const settings = {
autoplay: true,
autoplayDelay: 5500,
showNavigation: true,
showPagination: true
};
const swiperConfig = {
loop: true,
slidesPerView: 1,
effect: 'fade',
fadeEffect: {
crossFade: true
},
speed: 800,
grabCursor: true,
keyboard: {
enabled: true,
},
};
if (settings.autoplay) {
swiperConfig.autoplay = {
delay: settings.autoplayDelay,
disableOnInteraction: false,
pauseOnMouseEnter: true,
};
}
// Only add navigation if elements exist (they won't exist if showNavigation is false)
const nextBtn = swiperContainer.querySelector('.swiper-button-next');
const prevBtn = swiperContainer.querySelector('.swiper-button-prev');
if (nextBtn && prevBtn) {
swiperConfig.navigation = {
nextEl: '.hero-banner-6ab697cbe9c5d .swiper-button-next',
prevEl: '.hero-banner-6ab697cbe9c5d .swiper-button-prev',
};
}
// Only add pagination if element exists (it won't exist if showPagination is false)
const pagination = swiperContainer.querySelector('.swiper-pagination');
if (pagination) {
swiperConfig.pagination = {
el: '.hero-banner-6ab697cbe9c5d .swiper-pagination',
clickable: true,
dynamicBullets: true,
};
}
try {
new Swiper('.hero-banner-6ab697cbe9c5d', swiperConfig);
} catch (error) {
// Silent fail
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initSwiper_hero_banner_6ab697cbe9c5d);
} else {
setTimeout(initSwiper_hero_banner_6ab697cbe9c5d, 100);
}
})();
</script>
<script>
(function() {
if (typeof IntersectionObserver === 'undefined') {
// Fallback: just make everything visible
document.querySelectorAll('[class*="animation-"]').forEach(function(el) { el.classList.add('animate-visible'); });
return;
}
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.classList.add('animate-visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1, rootMargin: '0px 0px -30px 0px' });
function observeAnimations() {
document.querySelectorAll('.animation-fade-in, .animation-fade-up, .animation-fade-down, .animation-slide-left, .animation-slide-right, .animation-zoom-in').forEach(function(el) {
if (!el.classList.contains('animate-visible')) observer.observe(el);
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', observeAnimations);
} else {
observeAnimations();
}
})();
</script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize categories carousel if present
const carouselEl = document.querySelector('.categories-swiper-categories-widget-6ab697cbece39');
if (carouselEl) {
const autoplay = carouselEl.dataset.autoplay === 'true';
const autoplayDelay = parseInt(carouselEl.dataset.autoplayDelay) || 4000;
const loop = carouselEl.dataset.loop === 'true';
const slidesDesktop = parseInt(carouselEl.dataset.slidesDesktop) || 4;
const slidesTablet = parseInt(carouselEl.dataset.slidesTablet) || 3;
const slidesMobile = parseInt(carouselEl.dataset.slidesMobile) || 2;
const spaceBetween = parseInt(carouselEl.dataset.spaceBetween) || 20;
new Swiper(carouselEl, {
slidesPerView: slidesMobile,
spaceBetween: spaceBetween,
loop: loop,
autoplay: autoplay ? {
delay: autoplayDelay,
disableOnInteraction: false,
pauseOnMouseEnter: true,
} : false,
navigation: {
nextEl: carouselEl.querySelector('.swiper-button-next'),
prevEl: carouselEl.querySelector('.swiper-button-prev'),
},
pagination: {
el: carouselEl.querySelector('.swiper-pagination'),
clickable: true,
},
breakpoints: {
640: {
slidesPerView: slidesMobile,
},
768: {
slidesPerView: slidesTablet,
},
1024: {
slidesPerView: slidesDesktop,
},
},
});
}
});
</script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize all product carousels on the page
document.querySelectorAll('.product-carousel-6ab697cbefa5c').forEach(function(carouselEl) {
const autoplay = carouselEl.dataset.autoplay === 'true';
const autoplayDelay = parseInt(carouselEl.dataset.autoplayDelay) || 3000;
const loop = carouselEl.dataset.loop === 'true';
const slidesDesktop = parseInt(carouselEl.dataset.slidesDesktop) || 4;
const slidesTablet = parseInt(carouselEl.dataset.slidesTablet) || 3;
const slidesMobile = parseInt(carouselEl.dataset.slidesMobile) || 2;
const spaceBetween = parseInt(carouselEl.dataset.spaceBetween) || 20;
new Swiper(carouselEl, {
slidesPerView: slidesMobile,
spaceBetween: spaceBetween,
loop: loop,
autoplay: autoplay ? {
delay: autoplayDelay,
disableOnInteraction: false,
pauseOnMouseEnter: true,
} : false,
navigation: {
nextEl: carouselEl.querySelector('.swiper-button-next'),
prevEl: carouselEl.querySelector('.swiper-button-prev'),
},
pagination: {
el: carouselEl.querySelector('.swiper-pagination'),
clickable: true,
},
breakpoints: {
640: {
slidesPerView: slidesMobile,
},
768: {
slidesPerView: slidesTablet,
},
1024: {
slidesPerView: slidesDesktop,
},
},
});
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var section = document.getElementById('cta-v2-6ab697cbf2f48');
if (!section) return;
// Intersection observer for entrance animation
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.classList.add('cta-v2-visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.15 });
observer.observe(section);
});
</script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize all product carousels on the page
document.querySelectorAll('.product-carousel-6ab697cc01389').forEach(function(carouselEl) {
const autoplay = carouselEl.dataset.autoplay === 'true';
const autoplayDelay = parseInt(carouselEl.dataset.autoplayDelay) || 3000;
const loop = carouselEl.dataset.loop === 'true';
const slidesDesktop = parseInt(carouselEl.dataset.slidesDesktop) || 4;
const slidesTablet = parseInt(carouselEl.dataset.slidesTablet) || 3;
const slidesMobile = parseInt(carouselEl.dataset.slidesMobile) || 2;
const spaceBetween = parseInt(carouselEl.dataset.spaceBetween) || 20;
new Swiper(carouselEl, {
slidesPerView: slidesMobile,
spaceBetween: spaceBetween,
loop: loop,
autoplay: autoplay ? {
delay: autoplayDelay,
disableOnInteraction: false,
pauseOnMouseEnter: true,
} : false,
navigation: {
nextEl: carouselEl.querySelector('.swiper-button-next'),
prevEl: carouselEl.querySelector('.swiper-button-prev'),
},
pagination: {
el: carouselEl.querySelector('.swiper-pagination'),
clickable: true,
},
breakpoints: {
640: {
slidesPerView: slidesMobile,
},
768: {
slidesPerView: slidesTablet,
},
1024: {
slidesPerView: slidesDesktop,
},
},
});
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var section = document.getElementById('cta-v2-6ab697cc04f42');
if (!section) return;
// Intersection observer for entrance animation
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
entry.target.classList.add('cta-v2-visible');
observer.unobserve(entry.target);
}
});
}, { threshold: 0.15 });
observer.observe(section);
});
</script>
<script>
(function() {
var uid = "tv2-6ab697cc0553a";
var style = "carousel";
var autoplay = true;
var autoplaySpeed = 5000;
var totalSlides = 3;
// --- Staggered fade-in on scroll ---
function initScrollAnimation() {
var items = document.querySelectorAll('.' + uid + '-animate-item');
if (!items.length) return;
if ('IntersectionObserver' in window) {
var observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
var idx = parseInt(entry.target.getAttribute('data-index')) || 0;
setTimeout(function() {
entry.target.classList.add('is-visible');
}, idx * 100);
observer.unobserve(entry.target);
}
});
}, { threshold: 0.1, rootMargin: '0px 0px -40px 0px' });
items.forEach(function(item) { observer.observe(item); });
} else {
items.forEach(function(item) { item.classList.add('is-visible'); });
}
}
// --- Carousel Logic ---
function initCarousel() {
if (style !== 'carousel' || totalSlides <= 1) return;
var track = document.getElementById(uid + '-track');
var prevBtn = document.getElementById(uid + '-prev');
var nextBtn = document.getElementById(uid + '-next');
var dots = document.querySelectorAll('.' + uid + '-dot');
if (!track) return;
var current = 0;
var autoplayTimer = null;
function getVisibleSlides() {
var w = window.innerWidth;
if (w <= 640) return 1;
if (w <= 1024) return 1;
return 1;
}
function getMaxSlide() {
return Math.max(0, totalSlides - getVisibleSlides());
}
function goTo(index) {
var maxSlide = getMaxSlide();
if (index < 0) index = maxSlide;
if (index > maxSlide) index = 0;
current = index;
var slide = track.children[0];
if (!slide) return;
var gap = 24;
var slideWidth = slide.offsetWidth + gap;
track.style.transform = 'translateX(-' + (current * slideWidth) + 'px)';
dots.forEach(function(d, i) {
d.classList.toggle('active', i === current);
});
}
if (prevBtn) prevBtn.addEventListener('click', function() { goTo(current - 1); resetAutoplay(); });
if (nextBtn) nextBtn.addEventListener('click', function() { goTo(current + 1); resetAutoplay(); });
dots.forEach(function(dot) {
dot.addEventListener('click', function() {
goTo(parseInt(this.getAttribute('data-slide')));
resetAutoplay();
});
});
function startAutoplay() {
if (autoplay && autoplaySpeed > 0) {
autoplayTimer = setInterval(function() { goTo(current + 1); }, autoplaySpeed);
}
}
function resetAutoplay() {
if (autoplayTimer) clearInterval(autoplayTimer);
startAutoplay();
}
startAutoplay();
window.addEventListener('resize', function() { goTo(Math.min(current, getMaxSlide())); });
}
// --- Video modal ---
function initVideoModal() {
var modal = document.getElementById(uid + '-video-modal');
var overlay = document.getElementById(uid + '-video-overlay');
var closeBtn = document.getElementById(uid + '-video-close');
var iframe = document.getElementById(uid + '-video-iframe');
if (!modal || !iframe) return;
var section = document.getElementById(uid);
if (!section) return;
section.querySelectorAll('[data-video-url]').forEach(function(el) {
el.addEventListener('click', function(e) {
e.preventDefault();
var url = this.getAttribute('data-video-url');
if (!url) return;
// Convert YouTube URLs
if (url.indexOf('youtube.com/watch') !== -1) {
var vid = url.split('v=')[1];
if (vid) { var amp = vid.indexOf('&'); if (amp !== -1) vid = vid.substring(0, amp); }
url = 'https://www.youtube.com/embed/' + vid + '?autoplay=1';
} else if (url.indexOf('youtu.be/') !== -1) {
var vid = url.split('youtu.be/')[1];
if (vid) { var q = vid.indexOf('?'); if (q !== -1) vid = vid.substring(0, q); }
url = 'https://www.youtube.com/embed/' + vid + '?autoplay=1';
} else if (url.indexOf('vimeo.com/') !== -1) {
var vid = url.split('vimeo.com/')[1];
if (vid) { var q = vid.indexOf('?'); if (q !== -1) vid = vid.substring(0, q); }
url = 'https://player.vimeo.com/video/' + vid + '?autoplay=1';
}
iframe.src = url;
modal.classList.add('is-open');
document.body.style.overflow = 'hidden';
});
});
function closeModal() {
modal.classList.remove('is-open');
iframe.src = '';
document.body.style.overflow = '';
}
if (overlay) overlay.addEventListener('click', closeModal);
if (closeBtn) closeBtn.addEventListener('click', closeModal);
document.addEventListener('keydown', function(e) { if (e.key === 'Escape') closeModal(); });
}
document.addEventListener('DOMContentLoaded', function() {
initScrollAnimation();
initCarousel();
initVideoModal();
});
})();
</script>
<script>
</script>
<script>
(function() {
function initMarquee(wrapper) {
var track = wrapper.querySelector('.marquee-track');
if (!track || track.dataset.mqInit) return;
track.dataset.mqInit = '1';
var firstSet = track.querySelector('.marquee-set');
if (!firstSet) return;
// Ensure we have exactly 2 sets
var sets = track.querySelectorAll('.marquee-set');
if (sets.length < 2) {
var clone = firstSet.cloneNode(true);
clone.setAttribute('aria-hidden', 'true');
track.appendChild(clone);
}
var isRight = track.classList.contains('right');
var speed = parseFloat(track.style.animationDuration || track.dataset.speed || 20);
function measure() {
var setWidth = firstSet.offsetWidth;
if (setWidth < 1) return;
// Remove old animation
track.style.animation = 'none';
track.getClientRects(); // force reflow
// Create dynamic keyframes
var name = 'mq-' + Math.random().toString(36).substr(2, 6);
var from = isRight ? -setWidth : 0;
var to = isRight ? 0 : -setWidth;
var style = document.createElement('style');
style.textContent = '@keyframes ' + name + '{from{transform:translateX(' + from + 'px)}to{transform:translateX(' + to + 'px)}}';
document.head.appendChild(style);
track.style.animation = name + ' ' + speed + 's linear infinite';
}
measure();
// Re-measure on resize (debounced)
var resizeTimer;
window.addEventListener('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(measure, 200);
});
}
function initAll() {
document.querySelectorAll('.marquee-wrapper').forEach(initMarquee);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initAll);
} else {
initAll();
}
})();
</script>
<div class="offcanvas offcanvas-end mtk-cart-drawer"
tabindex="-1" id="mtkCartDrawer" aria-labelledby="mtkCartDrawerLabel">
<div class="offcanvas-header mtk-cart-drawer__header">
<h5 class="offcanvas-title mtk-cart-drawer__title" id="mtkCartDrawerLabel">
Votre Panier
</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas"
aria-label="Fermer"></button>
</div>
<div class="offcanvas-body mtk-cart-drawer__body" id="mtkCartDrawerBody">
<div class="mtk-cart-drawer__loading">
<i class="fas fa-spinner fa-spin" aria-hidden="true"></i>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
// Behavior toggle: only enhance when the store is in "drawer" mode. Otherwise
// add-to-cart submits natively and redirects to /cart (previous behavior).
var behavior = document.body.getAttribute('data-cart-behavior') || 'drawer';
if (behavior !== 'drawer') return;
// Bootstrap bundle is deferred, so it has executed by DOMContentLoaded. If it's
// somehow missing, do nothing (forms fall back to native submit/redirect).
if (typeof window.bootstrap === 'undefined' || !window.bootstrap.Offcanvas) return;
var drawerEl = document.getElementById('mtkCartDrawer');
var bodyEl = document.getElementById('mtkCartDrawerBody');
if (!drawerEl || !bodyEl) return;
var csrfMeta = document.querySelector('meta[name="csrf-token"]');
var csrf = csrfMeta ? csrfMeta.getAttribute('content') : '';
var COUNT_SELECTORS = '#cart-count, .cart-count, .cart-count-bottom, #cart-count-bottom, #bottom-cart-count, .bottom-nav-cart-count, .js-cart-count';
function updateCounts(n) {
document.querySelectorAll(COUNT_SELECTORS).forEach(function (el) { el.textContent = n; });
try { localStorage.setItem('cart_count', n); } catch (e) {}
}
function loadDrawerBody() {
return fetch('/cart/drawer', {
headers: { 'X-Requested-With': 'XMLHttpRequest' },
credentials: 'same-origin'
})
.then(function (r) { return r.text(); })
.then(function (html) {
bodyEl.innerHTML = html;
var marker = bodyEl.querySelector('[data-cart-count]');
if (marker) updateCounts(marker.getAttribute('data-cart-count'));
});
}
function openDrawer() {
window.bootstrap.Offcanvas.getOrCreateInstance(drawerEl).show();
}
function showFormError(form, msg) {
var box = form.querySelector('.mtk-add-error');
if (!box) {
box = document.createElement('div');
box.className = 'mtk-add-error';
form.appendChild(box);
}
box.textContent = msg;
}
// Single source of truth for every add-to-cart POST. Refreshes the drawer body
// and opens it. Returns a promise: resolves { ok:true } on success, or
// { ok:false, error } on a clean 422 (choose a variation / out of stock), and
// REJECTS on anything else so the caller can fall back to a native submit.
function doAdd(formData, url) {
return fetch(url || '/cart/add', {
method: 'POST',
body: formData,
credentials: 'same-origin',
headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json', 'X-CSRF-TOKEN': csrf }
})
.then(function (r) {
return r.json().then(function (j) { return { status: r.status, ok: r.ok, body: j }; })
.catch(function () { return { status: r.status, ok: r.ok, body: null }; });
})
.then(function (res) {
if (res.ok && res.body && res.body.success) {
if (res.body.cart_count != null) updateCounts(res.body.cart_count);
return loadDrawerBody().then(openDrawer).then(function () { return { ok: true }; });
}
if (res.status === 422 && res.body && res.body.message) {
return { ok: false, error: res.body.message };
}
throw new Error('cart-add-failed');
});
}
// Public API for JS-driven add-to-cart (widget product cards in the grid /
// carousel / category templates, and quick-view modals) that do NOT submit a
// real <form>, so the submit listener below never sees them. Only defined in
// drawer mode — callers feature-detect it and fall back to their native
// redirect when it is absent (non-drawer stores, missing bootstrap, etc.).
window.__mtkCartDrawerAdd = function (productId, variationId, quantity) {
var fd = new FormData();
fd.append('_token', csrf);
fd.append('product_id', productId);
fd.append('quantity', quantity || 1);
if (variationId) fd.append('variation_id', variationId);
return doAdd(fd);
};
// Add-to-cart / add-bundle interception. e.target of a submit event is always the
// <form>; do NOT use closest() on a class (themes put the class on a wrapper div).
document.addEventListener('submit', function (e) {
var form = e.target;
if (!form || form.tagName !== 'FORM') return;
// Gate on the form action (template-independent). Covers /cart/add and
// /cart/add-bundle (both contain "/cart/add").
var action = form.getAttribute('action') || '';
if (action.indexOf('/cart/add') === -1) return;
// Skip Buy Now and quantity-offer tiers — they keep native behavior.
var buyNow = form.querySelector('[name="buy_now"]');
if (buyNow && (buyNow.value === '1' || buyNow.value === 'true')) return;
var qo = form.querySelector('[name="quantity_offer_tier_id"]');
if (qo && qo.value) return;
e.preventDefault();
var btn = form.querySelector('[type="submit"]');
if (btn) btn.disabled = true;
doAdd(new FormData(form), action)
.then(function (res) {
// A genuine validation error (choose a variation, out of stock…) comes
// back as 422 with a clean, user-facing message — show it under the button.
if (res && res.ok === false && res.error) showFormError(form, res.error);
if (btn) btn.disabled = false;
})
.catch(function () {
// Session not primed → 404, 5xx, unexpected — recover by submitting
// natively. The full-page POST re-primes state and still adds the item.
form.submit();
});
});
// In-drawer controls: remove item, adjust quantity. Delegated on the drawer body
// (which is replaced on each refresh, so per-element listeners wouldn't survive).
var busy = false;
function mutateCart(url, body) {
if (busy) return;
busy = true;
bodyEl.setAttribute('aria-busy', 'true');
fetch(url, {
method: 'POST',
body: body || new FormData(),
credentials: 'same-origin',
headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json', 'X-CSRF-TOKEN': csrf }
})
// Always re-fetch the fragment afterwards — it carries the authoritative items,
// totals and count, so we never reconstruct state client-side.
.then(function () { return loadDrawerBody(); })
.catch(function () { return loadDrawerBody(); })
.finally(function () { busy = false; bodyEl.removeAttribute('aria-busy'); });
}
bodyEl.addEventListener('click', function (e) {
var removeBtn = e.target.closest ? e.target.closest('.mtk-cart-drawer__remove') : null;
if (removeBtn) {
mutateCart('/cart/remove/' + removeBtn.getAttribute('data-item-id'));
return;
}
var qtyBtn = e.target.closest ? e.target.closest('.mtk-cart-drawer__qty-btn') : null;
if (qtyBtn) {
var wrap = qtyBtn.closest('.mtk-cart-drawer__qty');
var itemId = wrap.getAttribute('data-item-id');
var valEl = wrap.querySelector('.mtk-cart-drawer__qty-val');
var cur = parseInt(valEl.textContent, 10) || 1;
var next = qtyBtn.getAttribute('data-qty') === 'inc' ? cur + 1 : cur - 1;
if (next < 1) { // decrementing below 1 removes the item
mutateCart('/cart/remove/' + itemId);
return;
}
var fd = new FormData();
fd.append('quantity', next);
mutateCart('/cart/update/' + itemId, fd);
}
});
});
</script>
<div id="bundleVarModal" class="bvm-overlay" aria-hidden="true">
<div class="bvm-dialog" role="dialog" aria-modal="true" aria-labelledby="bvmTitle">
<button type="button" class="bvm-close" data-bvm-close aria-label="Close">
<svg viewbox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><path d="M18 6 6 18M6 6l12 12"/></svg>
</button>
<div class="bvm-head">
<h3 class="bvm-title" id="bvmTitle">Choisissez vos options</h3>
<p class="bvm-subtitle">Ce pack contient des produits avec des options à sélectionner.</p>
</div>
<div class="bvm-body" id="bvmBody"></div>
<button type="button" class="bvm-confirm" id="bvmConfirm" disabled>
<span class="bvm-confirm-label">Ajouter le pack au panier</span>
</button>
</div>
</div>
<style>
#bundleVarModal{
--bvm-primary:#3b82f6; --bvm-btn:#111827; --bvm-btn-text:#fff; --bvm-radius:12px;
}
.bvm-overlay{position:fixed;inset:0;background:rgba(15,23,42,.6);backdrop-filter:blur(3px);
display:none;align-items:center;justify-content:center;z-index:2147483000;padding:16px;
opacity:0;transition:opacity .22s ease;}
.bvm-overlay.is-open{display:flex;opacity:1;}
.bvm-dialog{background:#fff;border-radius:22px;max-width:460px;width:100%;max-height:92vh;
overflow:auto;position:relative;box-shadow:0 30px 80px rgba(2,6,23,.35);
transform:translateY(14px) scale(.98);transition:transform .26s cubic-bezier(.2,.8,.2,1);
-webkit-overflow-scrolling:touch;}
.bvm-overlay.is-open .bvm-dialog{transform:none;}
.bvm-close{position:absolute;top:14px;right:14px;width:34px;height:34px;display:flex;
align-items:center;justify-content:center;border:none;border-radius:50%;
background:#f1f5f9;color:#64748b;cursor:pointer;transition:background .15s,color .15s;z-index:2;}
.bvm-close:hover{background:#e2e8f0;color:#0f172a;}
.bvm-head{padding:26px 26px 10px;}
.bvm-title{font-size:20px;font-weight:800;color:#0f172a;margin:0 30px 4px 0;letter-spacing:-.01em;}
.bvm-subtitle{font-size:13.5px;color:#64748b;margin:0;line-height:1.5;}
.bvm-body{padding:8px 26px 4px;}
.bvm-item{display:flex;gap:14px;padding:16px 0;border-top:1px solid #f1f5f9;}
.bvm-item:first-child{border-top:none;}
.bvm-thumb{width:56px;height:56px;flex:0 0 56px;border-radius:14px;object-fit:cover;
background:#f8fafc;border:1px solid #eef2f7;}
.bvm-thumb-ph{display:flex;align-items:center;justify-content:center;color:#cbd5e1;}
.bvm-item-main{flex:1;min-width:0;}
.bvm-item-name{font-size:14.5px;font-weight:700;color:#0f172a;margin:2px 0 10px;line-height:1.3;}
.bvm-pills{display:flex;flex-wrap:wrap;gap:8px;}
.bvm-pill{position:relative;padding:8px 14px;font-size:13px;font-weight:600;color:#374151;
background:#fff;border:1.5px solid #e5e7eb;border-radius:999px;cursor:pointer;
transition:all .16s ease;user-select:none;line-height:1.2;}
.bvm-pill:hover{border-color:var(--bvm-primary);transform:translateY(-1px);
box-shadow:0 3px 10px rgba(2,6,23,.07);}
.bvm-pill.is-selected{border-color:var(--bvm-primary);border-width:2px;padding:7px 13px;
color:var(--bvm-primary);background:color-mix(in srgb,var(--bvm-primary) 8%,#fff);
box-shadow:0 0 0 3px color-mix(in srgb,var(--bvm-primary) 15%,transparent);}
.bvm-pill.is-oos{color:#cbd5e1;border-color:#eef2f7;cursor:not-allowed;text-decoration:line-through;
background:#f8fafc;}
.bvm-pill.is-oos:hover{transform:none;box-shadow:none;border-color:#eef2f7;}
.bvm-pill-price{margin-left:6px;font-weight:500;opacity:.65;font-size:12px;}
.bvm-confirm{display:block;width:calc(100% - 52px);margin:14px 26px 26px;padding:15px;
border:none;border-radius:var(--bvm-radius);background:var(--bvm-btn);color:var(--bvm-btn-text);
font-weight:700;font-size:15.5px;cursor:pointer;transition:transform .12s ease,opacity .15s ease;}
.bvm-confirm:not(:disabled):hover{transform:translateY(-1px);}
.bvm-confirm:not(:disabled):active{transform:translateY(0);}
.bvm-confirm.is-outline{background:#fff;color:var(--bvm-btn);border:1.5px solid var(--bvm-btn);}
.bvm-confirm:disabled{opacity:.45;cursor:not-allowed;}
@media (max-width:480px){
.bvm-dialog{border-radius:20px 20px 0 0;max-height:94vh;align-self:flex-end;}
.bvm-overlay{align-items:flex-end;padding:0;}
.bvm-head{padding:22px 20px 8px;}
.bvm-body{padding:6px 20px 4px;}
.bvm-confirm{width:calc(100% - 40px);margin:12px 20px 20px;}
}
</style>
<script>
(function () {
var modal = document.getElementById('bundleVarModal');
if (!modal) return;
var dialog = modal.querySelector('.bvm-dialog');
var body = document.getElementById('bvmBody');
var confirmBtn = document.getElementById('bvmConfirm');
var i18nOos = "Rupture de stock";
var pendingForm = null;
var selections = {}; // item_id -> variation_id
// Apply the store's add-to-cart button theme (set by the product template).
var theme = window.__bundleModalTheme || {};
if (theme.primary) modal.style.setProperty('--bvm-primary', theme.primary);
if (theme.btnColor) modal.style.setProperty('--bvm-btn', theme.btnColor);
if (theme.btnTextColor) modal.style.setProperty('--bvm-btn-text', theme.btnTextColor);
if (theme.btnRadius) modal.style.setProperty('--bvm-radius', /^\d+$/.test(String(theme.btnRadius)) ? theme.btnRadius + 'px' : theme.btnRadius);
if (theme.btnStyle === 'outline') confirmBtn.classList.add('is-outline');
function esc(s) { var d = document.createElement('div'); d.textContent = (s == null ? '' : s); return d.innerHTML; }
function refreshConfirm() {
confirmBtn.disabled = pendingForm
? [].some.call(body.querySelectorAll('.bvm-item'), function (el) { return !selections[el.getAttribute('data-item-id')]; })
: true;
}
var PH = '<svg class="bvm-thumb bvm-thumb-ph" viewBox="0 0 24 24" width="56" height="56" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="3" y="3" width="18" height="18" rx="3"/><path d="m3 15 5-5 4 4 3-3 6 6"/><circle cx="9" cy="9" r="1.4"/></svg>';
function openModal(form, items) {
pendingForm = form;
selections = {};
var html = '';
items.forEach(function (it) {
var thumb = it.image
? '<img class="bvm-thumb" src="' + esc(it.image) + '" alt="' + esc(it.product) + '" loading="lazy">'
: PH;
html += '<div class="bvm-item" data-item-id="' + it.item_id + '">' + thumb +
'<div class="bvm-item-main"><div class="bvm-item-name">' + esc(it.product) + '</div><div class="bvm-pills">';
(it.variations || []).forEach(function (v) {
var price = v.price ? '<span class="bvm-pill-price">' + esc(v.price) + '</span>' : '';
html += '<button type="button" class="bvm-pill' + (v.oos ? ' is-oos' : '') + '"'
+ (v.oos ? ' disabled aria-disabled="true" title="' + esc(i18nOos) + '"' : ' data-vid="' + v.id + '"')
+ '>' + esc(v.name) + price + '</button>';
});
html += '</div></div></div>';
});
body.innerHTML = html;
refreshConfirm();
modal.classList.add('is-open');
modal.setAttribute('aria-hidden', 'false');
document.body.style.overflow = 'hidden';
}
function closeModal() {
modal.classList.remove('is-open');
modal.setAttribute('aria-hidden', 'true');
document.body.style.overflow = '';
pendingForm = null;
}
// Pill selection (delegated).
body.addEventListener('click', function (e) {
var pill = e.target.closest('.bvm-pill');
if (!pill || pill.classList.contains('is-oos')) return;
var item = pill.closest('.bvm-item');
var itemId = item.getAttribute('data-item-id');
item.querySelectorAll('.bvm-pill').forEach(function (p) { p.classList.remove('is-selected'); });
pill.classList.add('is-selected');
selections[itemId] = pill.getAttribute('data-vid');
refreshConfirm();
});
modal.addEventListener('click', function (e) {
if (e.target === modal || (e.target.closest && e.target.closest('[data-bvm-close]'))) closeModal();
});
document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal.classList.contains('is-open')) closeModal(); });
confirmBtn.addEventListener('click', function () {
if (!pendingForm || confirmBtn.disabled) return;
var form = pendingForm;
form.querySelectorAll('input[data-bvm-injected]').forEach(function (n) { n.remove(); });
Object.keys(selections).forEach(function (itemId) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'variations[' + itemId + ']';
input.value = selections[itemId];
input.setAttribute('data-bvm-injected', '1');
form.appendChild(input);
});
form.setAttribute('data-choices-resolved', '1');
closeModal();
if (form.requestSubmit) { form.requestSubmit(); }
else { form.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true })); }
});
// Capture phase: runs BEFORE cart-drawer's bubble-phase /cart/add handler,
// so we can divert a choice-needing pack into the modal first.
document.addEventListener('submit', function (e) {
var form = e.target;
if (!form || form.tagName !== 'FORM') return;
if ((form.getAttribute('action') || '').indexOf('/cart/add-bundle') === -1) return;
if (form.hasAttribute('data-choices-resolved')) return; // choices already made → let it through
var cfg = form.getAttribute('data-bundle-config');
if (!cfg) return;
var items;
try { items = JSON.parse(cfg); } catch (_) { return; }
if (!items || !items.length) return; // nothing to choose → normal add
e.preventDefault();
e.stopPropagation();
openModal(form, items);
}, true);
})();
</script>
<style>
.mtk-vp{--mtk-vp-accent:#3b82f6;}
.mtk-vp-group{margin-bottom:16px;}
.mtk-vp-group:last-of-type{margin-bottom:0;}
.mtk-vp-label{display:flex;align-items:baseline;gap:8px;font-size:13px;font-weight:700;
color:#374151;margin-bottom:9px;letter-spacing:.01em;}
.mtk-vp-chosen{font-weight:500;color:#64748b;font-size:12.5px;}
.mtk-vp-pills{display:flex;flex-wrap:wrap;gap:8px;}
.mtk-vp-pill{position:relative;padding:8px 16px;font-size:13px;font-weight:600;color:#374151;
background:#fff;border:1.5px solid #e5e7eb;border-radius:999px;cursor:pointer;
transition:all .16s ease;user-select:none;line-height:1.2;font-family:inherit;}
.mtk-vp-pill:hover:not(.is-disabled){border-color:var(--mtk-vp-accent);transform:translateY(-1px);
box-shadow:0 3px 10px rgba(2,6,23,.07);}
.mtk-vp-pill.is-selected{border-color:var(--mtk-vp-accent);border-width:2px;padding:7px 15px;
color:var(--mtk-vp-accent);background:color-mix(in srgb,var(--mtk-vp-accent) 8%,#fff);
box-shadow:0 0 0 3px color-mix(in srgb,var(--mtk-vp-accent) 15%,transparent);}
/* Greyed = not available with the current pick on the other axis, but still
clickable so the shopper can switch. Dead = never available at all. */
.mtk-vp-pill.is-disabled{color:#94a3b8;border-color:#eef2f7;background:#f8fafc;
text-decoration:line-through;}
.mtk-vp-pill.is-disabled:hover{transform:none;box-shadow:none;border-color:#e2e8f0;}
.mtk-vp-pill.is-dead{color:#cbd5e1;cursor:not-allowed;}
.mtk-vp-note{margin-top:10px;font-size:12.5px;color:#ef4444;display:none;}
.mtk-vp-note.is-visible{display:block;}
[dir="rtl"] .mtk-vp-label{letter-spacing:0;}
</style>
<script>
(function () {
if (window.mtkVariationPicker) return;
var T = {
out_of_stock: "Rupture de Stock",
select_option: "S\u00e9lectionnez une option",
choose_option: "Choisir une option",
unavailable: "Indisponible" };
function esc(s) {
var d = document.createElement('div');
d.textContent = (s == null ? '' : s);
return d.innerHTML;
}
// Distinct values in first-seen order. One chip per VALUE — the bug this
// whole file exists to prevent was one chip per combination.
function uniqueValues(list) {
var out = [], seen = Object.create(null);
list.forEach(function (raw) {
if (raw == null || raw === '') return;
var key = String(raw);
if (!seen[key]) { seen[key] = 1; out.push(key); }
});
return out;
}
window.mtkVariationPicker = function (container, data, opts) {
if (!container) return null;
opts = opts || {};
var variations = (data && data.variations) || [];
var onChange = opts.onChange || function () {};
var trackStock = !!(data && data.track_stock);
// A second axis exists whenever any variation carries value_2 — we do not
// require template2_name, which is read from the first variation only and
// can be null on older rows. Missing name falls back to a generic label
// rather than silently collapsing the axis (that was the original bug).
var hasAxis2 = variations.some(function (v) { return v.value_2 != null && v.value_2 !== ''; });
var values1 = uniqueValues(variations.map(function (v) { return v.value; }));
var values2 = hasAxis2 ? uniqueValues(variations.map(function (v) { return v.value_2; })) : [];
var sel1 = null, sel2 = null;
container.classList.add('mtk-vp');
if (opts.accent) container.style.setProperty('--mtk-vp-accent', opts.accent);
container.innerHTML = '';
container.dataset.selectedVariationId = '';
function inStock(v) { return !trackStock || (parseInt(v.stock, 10) || 0) > 0; }
function match(v1, v2) {
for (var i = 0; i < variations.length; i++) {
var v = variations[i];
if (String(v.value) !== String(v1)) continue;
if (hasAxis2 && String(v.value_2) !== String(v2)) continue;
return v;
}
return null;
}
function poolFor(axis, value, respectOther) {
return variations.filter(function (v) {
if (axis === 1) {
if (String(v.value) !== String(value)) return false;
return !respectOther || !hasAxis2 || sel2 === null || String(v.value_2) === String(sel2);
}
if (String(v.value_2) !== String(value)) return false;
return !respectOther || sel1 === null || String(v.value) === String(sel1);
});
}
// Two different questions, and conflating them deadlocks the picker:
//
// canEverBuy — is this value buyable in ANY combination? If not the
// chip is dead (size 45 made only in a sold-out colour).
// availableNow — is it buyable with what's picked on the OTHER axis?
// If not we grey it, but it stays clickable: the shopper
// must be able to switch colour while a size is picked,
// which is impossible if each axis disables the other.
function canEverBuy(axis, value) {
return poolFor(axis, value, false).some(inStock);
}
function availableNow(axis, value) {
return poolFor(axis, value, true).some(inStock);
}
function currentVariation() {
if (sel1 === null) return null;
if (hasAxis2 && sel2 === null) return null;
var v = match(sel1, sel2);
return (v && inStock(v)) ? v : null;
}
var groups = [];
function buildGroup(axis, label, values) {
var wrap = document.createElement('div');
wrap.className = 'mtk-vp-group';
wrap.dataset.axis = String(axis);
var lbl = document.createElement('div');
lbl.className = 'mtk-vp-label';
lbl.innerHTML = '<span>' + esc(label) + '</span><span class="mtk-vp-chosen"></span>';
wrap.appendChild(lbl);
var pills = document.createElement('div');
pills.className = 'mtk-vp-pills';
pills.setAttribute('role', 'group');
pills.setAttribute('aria-label', label);
values.forEach(function (val) {
var pill = document.createElement('button');
pill.type = 'button';
pill.className = 'mtk-vp-pill';
pill.textContent = val;
pill.dataset.value = val;
pill.setAttribute('aria-pressed', 'false');
pill.addEventListener('click', function () {
if (pill.classList.contains('is-dead')) return;
var already = (axis === 1 ? sel1 : sel2) === val;
if (axis === 1) { sel1 = already ? null : val; }
else { sel2 = already ? null : val; }
// The click just made is authoritative. If the other axis'
// pick no longer pairs with it, drop that one — never hold
// an impossible pair, and never refuse the click.
if (sel1 !== null && sel2 !== null) {
var pair = match(sel1, sel2);
if (!pair || !inStock(pair)) {
if (axis === 1) { sel2 = null; } else { sel1 = null; }
}
}
hideNote();
refresh();
});
pills.appendChild(pill);
});
wrap.appendChild(pills);
groups.push({ axis: axis, el: wrap, pills: pills, chosen: lbl.querySelector('.mtk-vp-chosen') });
return wrap;
}
container.appendChild(buildGroup(1, data.template1_name || T.select_option, values1));
if (hasAxis2) {
container.appendChild(buildGroup(2, data.template2_name || T.choose_option, values2));
}
var note = document.createElement('div');
note.className = 'mtk-vp-note';
container.appendChild(note);
function hideNote() { note.classList.remove('is-visible'); }
function refresh() {
groups.forEach(function (g) {
var sel = g.axis === 1 ? sel1 : sel2;
g.chosen.textContent = sel === null ? '' : sel;
g.pills.querySelectorAll('.mtk-vp-pill').forEach(function (pill) {
var val = pill.dataset.value;
var dead = !canEverBuy(g.axis, val);
var greyed = dead || !availableNow(g.axis, val);
pill.classList.toggle('is-dead', dead);
pill.classList.toggle('is-disabled', greyed);
pill.classList.toggle('is-selected', sel === val);
pill.setAttribute('aria-pressed', sel === val ? 'true' : 'false');
pill.setAttribute('aria-disabled', dead ? 'true' : 'false');
pill.title = greyed ? (poolFor(g.axis, val, true).length ? T.out_of_stock : T.unavailable) : '';
});
});
var v = currentVariation();
container.dataset.selectedVariationId = v ? v.id : '';
onChange(v);
}
// Nothing to choose on an axis with a single value — preselect it so the
// shopper isn't asked to confirm the only possibility.
if (values1.length === 1 && canEverBuy(1, values1[0])) sel1 = values1[0];
if (hasAxis2 && values2.length === 1 && canEverBuy(2, values2[0])) sel2 = values2[0];
refresh();
return {
selected: currentVariation,
isComplete: function () { return currentVariation() !== null; },
showRequiredNote: function (msg) {
note.textContent = msg;
note.classList.add('is-visible');
},
hideRequiredNote: function () { note.classList.remove('is-visible'); }
};
};
})();
</script>
<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"14995b2271e44fa0af63c81b9c41578f","spa":2}' crossorigin="anonymous"></script>
</body>
</html>