{"title":"Compagnons à 4 pattes","description":"","products":[{"product_id":"duckfeeder-pro™-smart-ball-offerte","title":"DuckFeeder Pro™ + Smart Ball OFFERTE","description":"\u003cstyle\u003e\n  \/* Removed universal reset to prevent CSS conflicts with store *\/\n  \/* Only apply styles to duck-specific elements *\/\n  .duck-product-description {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto,\n      \"Helvetica Neue\", Arial, sans-serif;\n    color: #333;\n    background: transparent;\n    box-sizing: border-box;\n    \/* Make the product description full-bleed across the viewport *\/\n    width: 100vw;\n    max-width: none;\n    margin-left: calc(50% - 50vw);\n    margin-right: calc(50% - 50vw);\n    padding: 20px;\n  }\n\n  \/* Added missing modal styles for popup visibility *\/\n  .duck-video-modal {\n    display: none;\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: rgba(0, 0, 0, 0.95);\n    z-index: 99999;\n    align-items: center;\n    justify-content: center;\n    padding: 20px;\n  }\n\n  .duck-video-modal.active {\n    display: flex;\n  }\n\n  \/* Modal square 1:1 responsive *\/\n  .duck-modal-content {\n    position: relative;\n    \/* Use viewport-relative sizing but cap at a sensible max for desktop *\/\n    width: min(80vw, 700px);\n    max-height: 80vh;\n    aspect-ratio: 1 \/ 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 8px;\n    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.45);\n    border-radius: 12px;\n    background: #000;\n  }\n\n  \/* Video covers the modal content *\/\n  .duck-modal-video {\n    width: 100%;\n    height: 100%;\n    border-radius: 12px;\n    background: black;\n    object-fit: cover;\n    display: block;\n  }\n\n  .duck-modal-close {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    background: white;\n    border: none;\n    width: 40px;\n    height: 40px;\n    border-radius: 50%;\n    cursor: pointer;\n    font-size: 28px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: all 0.3s ease;\n    color: #333;\n    padding: 0;\n    z-index: 5;\n  }\n\n  .duck-modal-close:hover {\n    background: #f0f0f0;\n    transform: scale(1.1);\n  }\n\n  \/* Offer hero block *\/\n  \/* Offer block now uses same styles as other content blocks *\/\n  .duck-offer-hero {\n    margin-bottom: 20px;\n  }\n  .duck-offer-title { margin: 0 0 6px 0; }\n  .duck-offer-sub { margin: 0; }\n\n  \/* Don't use universal selector, only target duck elements *\/\n  .duck-section {\n    margin: 40px auto;\n    width: 100%;\n    padding: 0 20px;\n  }\n\n  .duck-section-title {\n    font-size: 32px;\n    font-weight: 700;\n    text-align: center;\n    margin-bottom: 40px;\n    color: #1a1a1a;\n    letter-spacing: -0.5px;\n  }\n\n  .duck-carousel-container {\n    position: relative;\n    overflow: hidden;\n    border-radius: 16px;\n    background: transparent;\n    width: 100%;\n    \/* Let the carousel expand vertically as needed but keep a pleasant default ratio *\/\n    aspect-ratio: 16\/9;\n    max-height: 70vh;\n    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);\n  }\n\n  .duck-carousel-track {\n    display: flex;\n    transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);\n    height: 100%;\n  }\n\n  .duck-carousel-slide {\n    min-width: 100%;\n    width: 100%;\n    height: 100%;\n    position: relative;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .duck-carousel-slide video {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    border-radius: 16px;\n    pointer-events: none;\n    display: block;\n  }\n\n  .duck-play-overlay {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(0, 0, 0, 0.3);\n    transition: background 0.3s ease;\n  }\n\n  .duck-carousel-slide:hover .duck-play-overlay {\n    background: rgba(0, 0, 0, 0.5);\n  }\n\n  .duck-play-button {\n    width: 80px;\n    height: 80px;\n    border-radius: 50%;\n    background: rgba(255, 107, 107, 0.9);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: all 0.3s ease;\n    box-shadow: 0 8px 20px rgba(255, 107, 107, 0.4);\n  }\n\n  .duck-carousel-slide:hover .duck-play-button {\n    background: rgba(255, 107, 107, 1);\n    transform: scale(1.15);\n    box-shadow: 0 12px 30px rgba(255, 107, 107, 0.6);\n  }\n\n  .duck-play-icon {\n    border-left: 28px solid white;\n    border-top: 18px solid transparent;\n    border-bottom: 18px solid transparent;\n    margin-left: 6px;\n  }\n\n  .duck-carousel-nav {\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n    width: 50px;\n    height: 50px;\n    background: rgba(255, 107, 107, 0.8);\n    border: none;\n    color: white;\n    cursor: pointer;\n    font-size: 24px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: all 0.3s ease;\n    z-index: 10;\n  }\n\n  .duck-carousel-nav:hover {\n    background: rgba(255, 107, 107, 1);\n    transform: translateY(-50%) scale(1.1);\n  }\n\n  .duck-carousel-nav.prev {\n    left: 20px;\n  }\n\n  .duck-carousel-nav.next {\n    right: 20px;\n  }\n\n  .duck-carousel-dots {\n    display: flex;\n    justify-content: center;\n    gap: 10px;\n    margin-top: 25px;\n    flex-wrap: wrap;\n  }\n\n  .duck-carousel-dot {\n    width: 12px;\n    height: 12px;\n    border-radius: 50%;\n    background: #ddd;\n    border: none;\n    cursor: pointer;\n    transition: all 0.3s ease;\n  }\n\n  .duck-carousel-dot.active {\n    background: #ff6b6b;\n    width: 32px;\n    border-radius: 6px;\n  }\n\n  .duck-carousel-dot:hover {\n    background: #ff8787;\n  }\n\n  \/* Remove max-width to fill Shopify container *\/\n  .duck-blocks-grid {\n    display: grid;\n    \/* Force vertical stack (one column) to ensure blocks are vertical *\/\n    grid-template-columns: 1fr;\n    gap: 20px;\n    width: 100%;\n  }\n\n  .duck-content-block {\n    display: flex;\n    flex-direction: column;\n    width: 100%;\n  }\n\n  \/* Blocks media now 100% width *\/\n  .duck-block-media {\n    border-radius: 12px;\n    overflow: hidden;\n    width: 100%;\n    aspect-ratio: 16\/9;\n    background: #f0f0f0;\n  }\n\n  .duck-block-media video,\n  .duck-block-media img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n  }\n\n  \/* Text always below media *\/\n  .duck-block-content {\n    width: 100%;\n    padding: 20px 0;\n  }\n\n  .duck-block-content h3 {\n    font-size: 22px;\n    font-weight: 700;\n    color: #1a1a1a;\n    margin: 0 0 12px 0;\n    line-height: 1.3;\n  }\n\n  .duck-block-content p {\n    font-size: 16px;\n    color: #555;\n    line-height: 1.6;\n    margin: 0;\n  }\n\n  \/* FAQ layout - accordion below image *\/\n  .duck-faq-container {\n    display: flex;\n    flex-direction: column;\n    gap: 30px;\n    width: 100%;\n  }\n\n  .duck-faq-image {\n    border-radius: 12px;\n    overflow: hidden;\n    width: 100%;\n  }\n\n  .duck-faq-image img {\n    width: 100%;\n    height: auto;\n    display: block;\n  }\n\n  .duck-accordion-item {\n    background: white;\n    border-radius: 8px;\n    margin-bottom: 10px;\n    overflow: hidden;\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n    transition: box-shadow 0.3s ease;\n  }\n\n  .duck-accordion-item:hover {\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n  }\n\n  .duck-accordion-header {\n    width: 100%;\n    padding: 20px 20px;\n    background: white;\n    border: none;\n    text-align: left;\n    cursor: pointer;\n    font-size: 16px;\n    font-weight: 600;\n    color: #2c3e50;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    transition: background 0.3s;\n  }\n\n  .duck-accordion-header:hover {\n    background: #fafafa;\n  }\n\n  \/* Accordion icon + and - instead of arrow *\/\n  .duck-accordion-icon {\n    transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\n    font-size: 24px;\n    color: #ff6b6b;\n    font-weight: bold;\n    flex-shrink: 0;\n    margin-left: 15px;\n    width: 24px;\n    height: 24px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  .duck-accordion-item.active .duck-accordion-icon {\n    transform: rotate(0deg);\n  }\n\n  .duck-accordion-content {\n    max-height: 0;\n    overflow: hidden;\n    transition: max-height 0.3s ease;\n  }\n\n  .duck-accordion-content-inner {\n    padding: 0 20px 20px 20px;\n    color: #555;\n    line-height: 1.6;\n    font-size: 15px;\n  }\n\n  @media (max-width: 767px) {\n    .duck-section-title {\n      font-size: 24px;\n      margin-bottom: 30px;\n    }\n\n    .duck-carousel-container {\n      border-radius: 12px;\n    }\n\n    .duck-carousel-dots {\n      margin-top: 20px;\n      gap: 8px;\n    }\n\n    .duck-carousel-nav {\n      width: 40px;\n      height: 40px;\n      font-size: 20px;\n    }\n\n    .duck-carousel-nav.prev {\n      left: 10px;\n    }\n\n    .duck-carousel-nav.next {\n      right: 10px;\n    }\n\n    .duck-play-button {\n      width: 70px;\n      height: 70px;\n    }\n\n    .duck-play-icon {\n      border-left: 22px solid white;\n      border-top: 14px solid transparent;\n      border-bottom: 14px solid transparent;\n      margin-left: 4px;\n      display: block;\n    }\n\n    .duck-block-content h3 {\n      font-size: 20px;\n    }\n\n    .duck-block-content p {\n      font-size: 15px;\n    }\n    .duck-offer-hero {\n      flex-direction: column;\n      gap: 12px;\n      align-items: flex-start;\n    }\n    .duck-offer-image img { max-width: 100%; width: 160px; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"duck-product-description\"\u003e\n  \u003c!-- Modal popup for videos --\u003e\n  \u003cdiv class=\"duck-video-modal\" id=\"duckVideoModal\"\u003e\n    \u003cdiv class=\"duck-modal-content\"\u003e\n      \u003cbutton class=\"duck-modal-close\" onclick=\"duckCloseModal()\"\u003e✕\u003c\/button\u003e\n      \u003c!-- Controls with only play\/pause, no timeline --\u003e\n      \u003cvideo class=\"duck-modal-video\" id=\"duckModalVideo\" controls controlslist=\"nodownload\"\u003e\n        \u003csource id=\"duckModalSource\" src=\"\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Offre en tête: utilise la même structure que les autres blocs (image → texte) --\u003e\n  \u003cdiv class=\"duck-offer-hero\" role=\"region\" aria-label=\"Offre DuckFeeder Pro\"\u003e\n    \u003cdiv class=\"duck-content-block\"\u003e\n      \u003ch3 class=\"duck-offer-title\"\u003eOffre spéciale\u003c\/h3\u003e\n      \u003cdiv class=\"duck-block-media\"\u003e\n        \u003cimg loading=\"lazy\" src=\"https:\/\/sweethome-store.tn\/cdn\/shop\/files\/ball_gif.gif?v=1766978479\u0026amp;width=3840\" alt=\"Smart Ball gratuit\"\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"duck-block-content\"\u003e\n        \u003cp class=\"duck-offer-sub\"\u003eRecevez une \u003cstrong\u003eSmart Ball\u003c\/strong\u003e GRATUITE pour toute commande du DuckFeeder Pro. Offre valable jusqu'à épuisement des stocks — profitez d'un jouet connecté et interactif qui stimule l'activité de votre animal, augmente le temps de jeu et prolonge son bien-être au quotidien.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ... existing carousel section ... --\u003e\n  \u003cdiv class=\"duck-section\"\u003e\n    \u003ch2 class=\"duck-section-title\"\u003eDécouvrez le DuckFeeder Pro en action 🤩\u003c\/h2\u003e\n    \u003cdiv class=\"duck-carousel-container\"\u003e\n      \u003cdiv class=\"duck-carousel-track\" id=\"duckCarouselTrack\"\u003e\n        \u003cdiv class=\"duck-carousel-slide\" onclick=\"duckOpenVideo(0)\"\u003e\n          \u003cvideo preload=\"metadata\"\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/bd927e484ce04be2905590d0bc37d649\/bd927e484ce04be2905590d0bc37d649.HD-1080p-7.2Mbps-58753519.mp4?v=0#t=0.1\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n          \u003cdiv class=\"duck-play-overlay\"\u003e\n            \u003cdiv class=\"duck-play-button\"\u003e\n              \u003cdiv class=\"duck-play-icon\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-carousel-slide\" onclick=\"duckOpenVideo(1)\"\u003e\n          \u003cvideo preload=\"metadata\"\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/f923fa7cd39440369f047f73e9400a3e\/f923fa7cd39440369f047f73e9400a3e.HD-1080p-7.2Mbps-58753509.mp4?v=0#t=0.1\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n          \u003cdiv class=\"duck-play-overlay\"\u003e\n            \u003cdiv class=\"duck-play-button\"\u003e\n              \u003cdiv class=\"duck-play-icon\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-carousel-slide\" onclick=\"duckOpenVideo(2)\"\u003e\n          \u003cvideo preload=\"metadata\"\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/973d7f1554f84837b92af56159517bf1\/973d7f1554f84837b92af56159517bf1.HD-720p-1.6Mbps-58753496.mp4?v=0#t=0.1\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n          \u003cdiv class=\"duck-play-overlay\"\u003e\n            \u003cdiv class=\"duck-play-button\"\u003e\n              \u003cdiv class=\"duck-play-icon\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-carousel-slide\" onclick=\"duckOpenVideo(3)\"\u003e\n          \u003cvideo preload=\"metadata\"\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/caf96956dc4941d8ae6ce27c26f6167c\/caf96956dc4941d8ae6ce27c26f6167c.HD-1080p-2.5Mbps-58753571.mp4?v=0#t=0.1\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n          \u003cdiv class=\"duck-play-overlay\"\u003e\n            \u003cdiv class=\"duck-play-button\"\u003e\n              \u003cdiv class=\"duck-play-icon\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cbutton class=\"duck-carousel-nav prev\" onclick=\"duckMoveCarousel(-1)\"\u003e\n        ‹\n      \u003c\/button\u003e\n      \u003cbutton class=\"duck-carousel-nav next\" onclick=\"duckMoveCarousel(1)\"\u003e\n        ›\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"duck-carousel-dots\" id=\"duckCarouselDots\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ... existing blocks section ... --\u003e\n  \u003cdiv class=\"duck-section\"\u003e\n    \u003ch2 class=\"duck-section-title\"\u003e\n      Dites adieu à l'ennui et aux destructions !\n    \u003c\/h2\u003e\n    \u003cdiv class=\"duck-blocks-grid\"\u003e\n      \u003cdiv class=\"duck-content-block\"\u003e\n        \u003cdiv class=\"duck-block-media\"\u003e\n          \u003cvideo autoplay muted loop playsinline\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/070963fe5ee6400d901d64e66ffdd8e8\/070963fe5ee6400d901d64e66ffdd8e8.HD-1080p-3.3Mbps-58781574.mp4?v=0\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-block-content\"\u003e\n          \u003ch3\u003e\n            Quand l'anxiété et l'ennui prennent le dessus sur son bien-être...\n          \u003c\/h3\u003e\n          \u003cp\u003e\n            Le DuckFeeder transforme cette énergie négative en moments de jeu\n            stimulants. En occupant son esprit et en le récompensant par des\n            friandises, il canalise son attention, apaise son stress et réduit\n            naturellement les comportements destructeurs. Résultat : un animal\n            plus calme, équilibré et heureux au quotidien.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"duck-content-block\"\u003e\n        \u003cdiv class=\"duck-block-media\"\u003e\n          \u003cimg src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/files\/Capture_d_ecran_2025-10-01_a_23.36.06.png?v=1759354594\u0026amp;width=750\" alt=\"Animal occupé\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-block-content\"\u003e\n          \u003ch3\u003eVotre animal occupé, votre maison préservée\u003c\/h3\u003e\n          \u003cp\u003e\n            Le DuckFeeder occupe votre compagnon pendant des heures,\n            transformant son agitation en concentration apaisante. Chaque\n            session de jeu libère son esprit de l'anxiété et de l'ennui, lui\n            offrant des moments de satisfaction et de bien-être. Résultat : un\n            animal détendu qui retrouve son équilibre naturel.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"duck-content-block\"\u003e\n        \u003cdiv class=\"duck-block-media\"\u003e\n          \u003cvideo autoplay muted loop playsinline\u003e\n            \u003csource data-src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/videos\/c\/vp\/022c8418051d4faab08d0da3e98cdf77\/022c8418051d4faab08d0da3e98cdf77.HD-1080p-3.3Mbps-58682413.mp4?v=0\" type=\"video\/mp4\"\u003e\u003c\/video\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-block-content\"\u003e\n          \u003ch3\u003eMême les plus indépendants succombent au jeu !\u003c\/h3\u003e\n          \u003cp\u003e\n            Votre chat s'ennuie habituellement ? Le DuckFeeder éveille son\n            instinct de chasseur et le garde captivé pendant des heures. Chaque\n            pression, chaque friandise gagnée devient une victoire qui stimule\n            son esprit et combat l'ennui. Résultat : un félin actif, épanoui et\n            moins destructeur.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"duck-content-block\"\u003e\n        \u003cdiv class=\"duck-block-media\"\u003e\n          \u003cimg src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/files\/Capture_d_ecran_2025-10-03_a_00.15.11.png?v=1759443337\u0026amp;width=1070\" alt=\"Notre promesse\"\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"duck-block-content\"\u003e\n          \u003ch3\u003eNotre promesse\u003c\/h3\u003e\n          \u003cp\u003e\n            Vous bénéficiez de notre garantie \"Conforme ou remboursé\" 30 jours :\n            si l'article reçu n'est pas conforme à la description ou présente un\n            défaut, nous vous proposons un remplacement ou un remboursement intégral.\n          \u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ... existing FAQ section ... --\u003e\n  \u003cdiv class=\"duck-section\"\u003e\n    \u003cdiv class=\"duck-faq-container\"\u003e\n      \u003cdiv class=\"duck-faq-image\"\u003e\n        \u003cimg src=\"https:\/\/pattesetpattounes.fr\/cdn\/shop\/files\/FAQs-Dog-Pic-570x372.jpg?v=1743348721\u0026amp;width=1070\" alt=\"FAQ image\"\u003e\n      \u003c\/div\u003e\n      \u003ch2 class=\"duck-section-title\"\u003eRéponses à vos questions 🤔\u003c\/h2\u003e\n      \u003cdiv class=\"duck-accordion-wrapper\"\u003e\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Est-ce que le DuckFeeder convient à tous les animaux ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Oui ! Le DuckFeeder est conçu pour les chiens et chats de petite à\n              moyenne taille. Grâce à ses 3 compartiments ajustables (12mm,\n              16mm, 20mm), il s'adapte à différentes tailles de friandises et\n              convient à la plupart des races.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Mon animal va-t-il comprendre comment l'utiliser ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Absolument. Le mécanisme est intuitif : une simple pression sur la\n              queue libère les friandises. Un court apprentissage de quelques\n              minutes suffit pour que votre compagnon comprenne le principe et\n              s'amuse pendant des heures.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Combien de temps mon animal peut-il jouer avec ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Cela dépend du nombre de friandises que vous y mettez. En moyenne,\n              une session dure entre 15 et 45 minutes, parfait pour l'occuper\n              pendant vos absences ou vos moments de tranquillité.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Est-ce vraiment efficace contre l'anxiété et les comportements\n            destructeurs ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Oui. En stimulant mentalement votre animal et en le gardant\n              occupé, le DuckFeeder canalise son énergie négative vers une\n              activité positive. Les propriétaires constatent une réduction\n              significative des destructions et de l'agitation après quelques\n              utilisations.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Le DuckFeeder est-il sûr pour mon animal ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Totalement. Fabriqué en ABS non-toxique et durable, il est conçu\n              sans pièces détachables dangereuses. Sa base antidérapante assure\n              une utilisation stable et sécurisée.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Comment nettoyer le DuckFeeder ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Très facilement ! Il est entièrement démontable et lavable. Vous\n              pouvez le rincer à l'eau ou le passer au lave-vaisselle pour un\n              nettoyage optimal.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"duck-accordion-item\"\u003e\n          \u003cbutton class=\"duck-accordion-header\" onclick=\"duckToggleAccordion(this)\"\u003e\n            Le DuckFeeder nécessite-t-il des piles ou un branchement ?\n            \u003c!-- Changed from arrow to + icon --\u003e\n            \u003cspan class=\"duck-accordion-icon\"\u003e+\u003c\/span\u003e\n          \u003c\/button\u003e\n          \u003cdiv class=\"duck-accordion-content\"\u003e\n            \u003cdiv class=\"duck-accordion-content-inner\"\u003e\n              Non, aucune pile ni électricité nécessaire. C'est un jouet 100%\n              mécanique, simple d'utilisation et toujours prêt à l'emploi.\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/\/ Carousel functionality\n  let duckCurrentIndex = 0;\n  const duckCarouselTrack = document.getElementById(\"duckCarouselTrack\");\n  const duckCarouselDots = document.getElementById(\"duckCarouselDots\");\n  const duckCarouselSlides = document.querySelectorAll(\".duck-carousel-slide\");\n  const duckTotalSlides = duckCarouselSlides.length;\n\n  \/\/ Initialize dots\n  for (let i = 0; i \u003c duckTotalSlides; i++) {\n    const dot = document.createElement(\"button\");\n    dot.className = `duck-carousel-dot ${i === 0 ? \"active\" : \"\"}`;\n    dot.onclick = () =\u003e duckGoToSlide(i);\n    duckCarouselDots.appendChild(dot);\n  }\n\n  function duckGoToSlide(index) {\n    duckCurrentIndex = (index + duckTotalSlides) % duckTotalSlides;\n    duckCarouselTrack.style.transform = `translateX(-${\n      duckCurrentIndex * 100\n    }%)`;\n    updateDots();\n  }\n\n  function duckMoveCarousel(direction) {\n    duckGoToSlide(duckCurrentIndex + direction);\n  }\n\n  function updateDots() {\n    document.querySelectorAll(\".duck-carousel-dot\").forEach((dot, index) =\u003e {\n      dot.classList.toggle(\"active\", index === duckCurrentIndex);\n    });\n  }\n\n  \/\/ Lazy-load videos for performance: set \u003csource\u003e.src from data-src when needed\n  function setupLazyVideos() {\n    const videos = document.querySelectorAll(\".duck-product-description video\");\n    const loadVideo = (video) =\u003e {\n      const srcEl = video.querySelector(\"source\");\n      const dataSrc =\n        srcEl \u0026\u0026 (srcEl.dataset.src || srcEl.getAttribute(\"data-src\"));\n      if (!dataSrc) return;\n      if (srcEl.src \u0026\u0026 srcEl.src.length) return; \/\/ already loaded\n      srcEl.src = dataSrc;\n      video.load();\n      if (video.autoplay || video.hasAttribute(\"autoplay\")) {\n        video.play().catch(() =\u003e {});\n      }\n    };\n\n    if (\"IntersectionObserver\" in window) {\n      const io = new IntersectionObserver(\n        (entries, obs) =\u003e {\n          entries.forEach((entry) =\u003e {\n            if (entry.isIntersecting) {\n              loadVideo(entry.target);\n              obs.unobserve(entry.target);\n            }\n          });\n        },\n        { rootMargin: \"250px\" }\n      );\n\n      videos.forEach((v) =\u003e {\n        if (v.closest(\".duck-video-modal\")) return; \/\/ skip modal\n        io.observe(v);\n      });\n    } else {\n      \/\/ Fallback: load all after short delay\n      videos.forEach((v) =\u003e {\n        if (v.closest(\".duck-video-modal\")) return;\n        setTimeout(() =\u003e loadVideo(v), 1000);\n      });\n    }\n  }\n\n  if (\"requestIdleCallback\" in window) {\n    requestIdleCallback(setupLazyVideos, { timeout: 2000 });\n  } else {\n    window.addEventListener(\"load\", () =\u003e setTimeout(setupLazyVideos, 600));\n  }\n\n  \/\/ Modal functionality\n  const duckVideoModal = document.getElementById(\"duckVideoModal\");\n  const duckModalVideo = document.getElementById(\"duckModalVideo\");\n  const duckModalSource = document.getElementById(\"duckModalSource\");\n\n  function duckOpenVideo(videoIndex) {\n    const srcEl = duckCarouselSlides[videoIndex].querySelector(\"video source\");\n    const videoSource =\n      (srcEl \u0026\u0026 (srcEl.dataset.src || srcEl.getAttribute(\"data-src\"))) ||\n      (srcEl \u0026\u0026 srcEl.src) ||\n      \"\";\n    \/\/ Set the \u003csource\u003e and reload the video element to ensure correct playback\n    duckModalSource.src = videoSource;\n    duckModalVideo.load();\n    duckVideoModal.classList.add(\"active\");\n    document.body.style.overflow = \"hidden\";\n    \/\/ small timeout to allow modal to settle before playing\n    setTimeout(() =\u003e {\n      duckModalVideo.play().catch(() =\u003e {});\n    }, 120);\n  }\n\n  function duckCloseModal() {\n    duckVideoModal.classList.remove(\"active\");\n    try {\n      duckModalVideo.pause();\n      duckModalVideo.currentTime = 0;\n    } catch (e) {}\n    \/\/ clear source to stop network usage\n    duckModalSource.src = \"\";\n    duckModalVideo.load();\n    document.body.style.overflow = \"auto\";\n  }\n\n  \/\/ Click outside modal to close\n  duckVideoModal.addEventListener(\"click\", (e) =\u003e {\n    if (e.target === duckVideoModal) {\n      duckCloseModal();\n    }\n  });\n\n  \/\/ Accordion functionality\n  function duckToggleAccordion(button) {\n    const item = button.parentElement;\n    const content = item.querySelector(\".duck-accordion-content\");\n    const icon = button.querySelector(\".duck-accordion-icon\");\n\n    \/\/ Close all other items\n    document.querySelectorAll(\".duck-accordion-item\").forEach((otherItem) =\u003e {\n      if (otherItem !== item) {\n        otherItem.classList.remove(\"active\");\n        const otherContent = otherItem.querySelector(\".duck-accordion-content\");\n        otherContent.style.maxHeight = \"0\";\n        const otherIcon = otherItem.querySelector(\".duck-accordion-icon\");\n        otherIcon.textContent = \"+\";\n      }\n    });\n\n    \/\/ Toggle current item\n    item.classList.toggle(\"active\");\n    if (item.classList.contains(\"active\")) {\n      content.style.maxHeight = content.scrollHeight + \"px\";\n      icon.textContent = \"-\";\n    } else {\n      content.style.maxHeight = \"0\";\n      icon.textContent = \"+\";\n    }\n  }\n\u003c\/script\u003e\n","brand":"Sweet Home Déco \u0026 Famille","offers":[{"title":"Default Title","offer_id":45150864539692,"sku":null,"price":59.0,"currency_code":"TND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0710\/5970\/1804\/files\/Grey_And_White_Modern_Pet_Care_Instagram_Post.png?v=1766978057"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0710\/5970\/1804\/collections\/Image_202512142134.jpg?v=1766979989","url":"https:\/\/sweethome-store.tn\/collections\/compagnons-a-4-pattes.oembed","provider":"Sweet Home Déco \u0026 Famille","version":"1.0","type":"link"}