{"product_id":"handmade-horse-shoe-animal-wind-chime-collection","title":"🎄 Handmade Horse Shoe Animal Wind Chime Collection❤️","description":"\n\u003c!--\nALASJOY | HORSESHOE ANIMAL WIND CHIMES\nRustic Farmhouse Landing Page\nPure HTML + CSS + JavaScript\nNo Liquid syntax\n\nPlace in a Custom Liquid section\nBELOW the original Main Product section.\n\nKeep original product images, GIFs,\nvariants, prices and checkout intact.\n--\u003e\n\n\u003cstyle\u003e\n#aj-horseshoe-chimes{\n  --forest:#293e34;\n  --forest2:#395746;\n  --brass:#b48a56;\n  --cream:#faf7ef;\n  --paper:#fffefa;\n  --linen:#eee5d8;\n  --ink:#303b34;\n  --muted:#6a756d;\n  --line:#e5ddd0;\n\n  display:block;\n  width:100%;\n  max-width:1160px;\n  margin:0 auto;\n  overflow:hidden;\n  border-radius:14px;\n  background:var(--cream);\n  color:var(--ink);\n  font:15px\/1.7 Arial,Helvetica,sans-serif;\n  container-type:inline-size;\n  isolation:isolate;\n}\n\n#aj-horseshoe-chimes,\n#aj-horseshoe-chimes *,\n#aj-horseshoe-chimes *:before,\n#aj-horseshoe-chimes *:after{\n  box-sizing:border-box;\n}\n\n#aj-horseshoe-chimes h2,\n#aj-horseshoe-chimes h3,\n#aj-horseshoe-chimes p,\n#aj-horseshoe-chimes figure{\n  margin:0;\n  padding:0;\n  letter-spacing:normal;\n  text-transform:none;\n}\n\n#aj-horseshoe-chimes h2{\n  color:var(--forest);\n  font:700 clamp(29px,4.3vw,47px)\/1.15 Georgia,serif;\n}\n\n#aj-horseshoe-chimes h3{\n  color:var(--forest);\n  font:700 20px\/1.32 Georgia,serif;\n}\n\n#aj-horseshoe-chimes p{\n  color:var(--muted);\n  font-size:14px;\n  line-height:1.8;\n}\n\n#aj-horseshoe-chimes img,\n#aj-horseshoe-chimes video{\n  display:block;\n  width:100%;\n  height:auto;\n  max-width:100%;\n}\n\n#aj-horseshoe-chimes .hw-section{\n  padding:43px 20px;\n}\n\n#aj-horseshoe-chimes .hw-center{\n  text-align:center;\n}\n\n#aj-horseshoe-chimes .hw-kicker{\n  display:block;\n  margin-bottom:12px;\n  color:#a47e52;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:1.5px;\n  line-height:1.5;\n  text-transform:uppercase;\n}\n\n#aj-horseshoe-chimes .hw-intro{\n  max-width:650px;\n  margin:13px auto 0;\n}\n\n#aj-horseshoe-chimes .hw-rule{\n  width:55px;\n  height:2px;\n  margin:18px auto;\n  background:var(--brass);\n}\n\n\/* HERO *\/\n\n#aj-horseshoe-chimes .hw-hero{\n  display:grid;\n  grid-template-columns:minmax(0,1fr);\n  align-items:center;\n  gap:26px;\n  padding:29px 19px 39px;\n  background:\n    radial-gradient(\n      ellipse at 10% 0%,\n      #d6e0ca,\n      transparent 65%\n    ),\n    #f9f7f0;\n}\n\n#aj-horseshoe-chimes .hw-photo{\n  display:none;\n  min-width:0;\n  padding:10px;\n  border:1px solid #d9c9b1;\n  border-radius:11px;\n  background:white;\n  box-shadow:0 15px 30px #293a2717;\n}\n\n#aj-horseshoe-chimes .hw-photo.ready{\n  display:block;\n}\n\n#aj-horseshoe-chimes .hw-photo img{\n  aspect-ratio:1\/1;\n  object-fit:contain;\n  border-radius:6px;\n  background:#f8f5ee;\n}\n\n#aj-horseshoe-chimes .hw-photo figcaption{\n  padding:10px 3px 3px;\n  color:#837258;\n  text-align:center;\n  font-size:12px;\n  font-weight:700;\n}\n\n#aj-horseshoe-chimes .hw-hero-copy{\n  min-width:0;\n}\n\n#aj-horseshoe-chimes .hw-hero h2{\n  font-size:clamp(35px,4.8vw,55px);\n}\n\n#aj-horseshoe-chimes .hw-hero h2 em{\n  color:#a57b4e;\n  font-style:normal;\n}\n\n#aj-horseshoe-chimes .hw-hero p{\n  margin-top:16px;\n  font-size:15px;\n}\n\n#aj-horseshoe-chimes .hw-tags{\n  display:flex;\n  flex-wrap:wrap;\n  gap:8px;\n  margin-top:22px;\n}\n\n#aj-horseshoe-chimes .hw-tags span{\n  padding:8px 12px;\n  border:1px solid #d8d9c8;\n  border-radius:30px;\n  background:#fff;\n  color:#596c57;\n  font-size:12px;\n  font-weight:700;\n}\n\n\/* HIGHLIGHT BAR *\/\n\n#aj-horseshoe-chimes .hw-strip{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:9px;\n  padding:19px 10px;\n  background:#e8decf;\n}\n\n#aj-horseshoe-chimes .hw-strip div{\n  text-align:center;\n  color:#69543b;\n  font-size:12px;\n  font-weight:800;\n  line-height:1.5;\n}\n\n#aj-horseshoe-chimes .hw-strip span{\n  display:block;\n  margin-bottom:5px;\n  font-size:23px;\n}\n\n\/* ORIGINAL ANIMATION *\/\n\n#aj-horseshoe-chimes .hw-motion{\n  display:none;\n  background:#fffdfa;\n  text-align:center;\n}\n\n#aj-horseshoe-chimes .hw-motion.ready{\n  display:block;\n}\n\n#aj-horseshoe-chimes .hw-motion-frame{\n  max-width:720px;\n  margin:24px auto 0;\n  padding:9px;\n  border:1px solid #ddd5c7;\n  border-radius:11px;\n  background:#f7f4ee;\n}\n\n#aj-horseshoe-chimes .hw-motion-frame img,\n#aj-horseshoe-chimes .hw-motion-frame video{\n  display:block;\n  width:100%;\n  height:auto;\n  max-height:650px;\n  object-fit:contain;\n  border-radius:6px;\n}\n\n#aj-horseshoe-chimes .hw-motion-note{\n  margin-top:13px;\n  font-size:12px;\n}\n\n\/* IMAGE \/ TEXT STORY *\/\n\n#aj-horseshoe-chimes .hw-story{\n  display:grid;\n  grid-template-columns:minmax(0,1fr);\n  align-items:center;\n  background:#fffdfa;\n}\n\n#aj-horseshoe-chimes .hw-story.alt{\n  background:#f1eadd;\n}\n\n#aj-horseshoe-chimes .hw-story-image{\n  display:none;\n  padding:13px;\n  min-width:0;\n}\n\n#aj-horseshoe-chimes .hw-story-image.ready{\n  display:block;\n}\n\n#aj-horseshoe-chimes .hw-story-image img{\n  aspect-ratio:1\/1;\n  object-fit:contain;\n  border:1px solid var(--line);\n  border-radius:10px;\n  background:white;\n}\n\n#aj-horseshoe-chimes .hw-story-copy{\n  padding:35px 23px;\n  min-width:0;\n}\n\n#aj-horseshoe-chimes .hw-story-copy p{\n  margin-top:15px;\n}\n\n#aj-horseshoe-chimes .hw-quote{\n  margin-top:19px;\n  padding:16px 18px;\n  border-left:3px solid #bb9463;\n  background:#f7efe3;\n  color:#957044;\n  font:italic 19px\/1.55 Georgia,serif;\n}\n\n\/* THREE DISTINCT DETAILS *\/\n\n#aj-horseshoe-chimes .hw-details{\n  background:#f7f3eb;\n}\n\n#aj-horseshoe-chimes .hw-detail-grid{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:14px;\n  margin-top:26px;\n}\n\n#aj-horseshoe-chimes .hw-detail{\n  padding:23px 21px;\n  border:1px solid #dfd5c5;\n  border-top:3px solid var(--brass);\n  border-radius:10px;\n  background:white;\n}\n\n#aj-horseshoe-chimes .hw-detail .number{\n  display:block;\n  margin-bottom:13px;\n  color:#a77e4e;\n  font-size:11px;\n  font-weight:800;\n  letter-spacing:1.2px;\n}\n\n#aj-horseshoe-chimes .hw-detail p{\n  margin-top:11px;\n}\n\n\/* ACTUAL PRODUCT IMAGES *\/\n\n#aj-horseshoe-chimes .hw-gallery{\n  display:none;\n  background:#eae3d7;\n}\n\n#aj-horseshoe-chimes .hw-gallery.ready{\n  display:block;\n}\n\n#aj-horseshoe-chimes .hw-gallery-grid{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:11px;\n  margin-top:25px;\n}\n\n#aj-horseshoe-chimes .hw-gallery-item{\n  padding:7px;\n  min-width:0;\n  background:#fffdfa;\n  border:1px solid #ddd2c0;\n  border-radius:10px;\n}\n\n#aj-horseshoe-chimes .hw-gallery-item img{\n  aspect-ratio:1\/1;\n  object-fit:contain;\n  border-radius:6px;\n}\n\n#aj-horseshoe-chimes .hw-gallery-item figcaption{\n  padding:9px 3px 3px;\n  color:#796950;\n  text-align:center;\n  font-size:12px;\n  font-weight:700;\n}\n\n\/* REAL AVAILABLE VARIANTS *\/\n\n#aj-horseshoe-chimes .hw-variants{\n  display:none;\n  background:#fffdfa;\n  text-align:center;\n}\n\n#aj-horseshoe-chimes .hw-variants.ready{\n  display:block;\n}\n\n#aj-horseshoe-chimes .hw-variant-grid{\n  display:flex;\n  flex-wrap:wrap;\n  justify-content:center;\n  gap:10px;\n  margin-top:22px;\n}\n\n#aj-horseshoe-chimes .hw-variant{\n  padding:10px 15px;\n  border:1px solid #dbd0bf;\n  border-radius:30px;\n  background:#f7f3ea;\n  color:#5b654f;\n  font-size:13px;\n  font-weight:700;\n}\n\n\/* DISPLAY LOCATIONS *\/\n\n#aj-horseshoe-chimes .hw-places{\n  background:#293f34;\n}\n\n#aj-horseshoe-chimes .hw-places h2{\n  color:#fff8e9;\n}\n\n#aj-horseshoe-chimes .hw-places .hw-kicker{\n  color:#e7ca9a;\n}\n\n#aj-horseshoe-chimes .hw-places .hw-intro{\n  color:#e0e9dd;\n}\n\n#aj-horseshoe-chimes .hw-place-grid{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:13px;\n  margin-top:25px;\n}\n\n#aj-horseshoe-chimes .hw-place{\n  padding:22px 20px;\n  border:1px solid #d3c6a65a;\n  border-radius:10px;\n  background:#ffffff0b;\n}\n\n#aj-horseshoe-chimes .hw-place span{\n  display:block;\n  margin-bottom:10px;\n  font-size:27px;\n}\n\n#aj-horseshoe-chimes .hw-place h3{\n  color:#fff3de;\n}\n\n#aj-horseshoe-chimes .hw-place p{\n  margin-top:10px;\n  color:#dce7dc;\n}\n\n\/* HOW TO *\/\n\n#aj-horseshoe-chimes .hw-how{\n  background:#fffdfa;\n}\n\n#aj-horseshoe-chimes .hw-steps{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:13px;\n  margin-top:26px;\n}\n\n#aj-horseshoe-chimes .hw-step{\n  padding:22px 20px;\n  border:1px solid #e2d9cb;\n  border-radius:10px;\n  background:#f8f5ee;\n}\n\n#aj-horseshoe-chimes .hw-step .number{\n  display:block;\n  margin-bottom:11px;\n  color:#b18752;\n  font:700 22px\/1 Georgia,serif;\n}\n\n#aj-horseshoe-chimes .hw-step p{\n  margin-top:10px;\n}\n\n#aj-horseshoe-chimes .hw-note{\n  max-width:800px;\n  margin:20px auto 0;\n  padding:15px 18px;\n  border:1px solid #dfdfd3;\n  border-radius:9px;\n  background:#f2f3eb;\n  color:#697265;\n  font-size:13px;\n  line-height:1.8;\n}\n\n\/* GIFT *\/\n\n#aj-horseshoe-chimes .hw-gift{\n  padding:49px 21px;\n  text-align:center;\n  background:\n    radial-gradient(\n      ellipse at 50% 0%,\n      #e4d1ac8a,\n      transparent 68%\n    ),\n    #faf5e9;\n}\n\n#aj-horseshoe-chimes .hw-gift p{\n  max-width:650px;\n  margin:16px auto 0;\n}\n\n#aj-horseshoe-chimes .hw-gift-quote{\n  display:block;\n  margin-top:22px;\n  color:#9d7849;\n  font:italic clamp(20px,2.8vw,27px)\/1.5 Georgia,serif;\n}\n\n\/* FAQ *\/\n\n#aj-horseshoe-chimes .hw-faq{\n  background:#fffdfa;\n}\n\n#aj-horseshoe-chimes .hw-faq-list{\n  max-width:780px;\n  margin:24px auto 0;\n}\n\n#aj-horseshoe-chimes .hw-faq-list details{\n  border-bottom:1px solid var(--line);\n}\n\n#aj-horseshoe-chimes .hw-faq-list summary{\n  display:list-item;\n  padding:17px 4px;\n  color:#365444;\n  font-size:15px;\n  font-weight:700;\n  cursor:pointer;\n}\n\n#aj-horseshoe-chimes .hw-faq-list p{\n  padding:0 4px 18px;\n}\n\n\/* FINAL BUTTON *\/\n\n#aj-horseshoe-chimes .hw-final{\n  padding:50px 20px;\n  text-align:center;\n  background:#1b352a;\n}\n\n#aj-horseshoe-chimes .hw-final h2{\n  color:#fff7e6;\n}\n\n#aj-horseshoe-chimes .hw-final .hw-kicker{\n  color:#e6c996;\n}\n\n#aj-horseshoe-chimes .hw-final p{\n  max-width:630px;\n  margin:15px auto 0;\n  color:#e3e9df;\n}\n\n#aj-horseshoe-chimes .hw-top{\n  display:inline-block;\n  width:100%;\n  max-width:365px;\n  margin-top:24px;\n  padding:17px 20px;\n  border:1px solid #edd4a9;\n  border-radius:8px;\n  background:#e9c994;\n  color:#344332;\n  text-align:center;\n  text-decoration:none;\n  font:800 15px\/1.5 Arial,sans-serif;\n}\n\n#aj-horseshoe-chimes .hw-top:hover{\n  background:#fff0d3;\n  color:#344332;\n}\n\n\/* DESKTOP *\/\n\n@container (min-width:780px){\n\n  #aj-horseshoe-chimes .hw-hero.has-photo{\n    grid-template-columns:\n      minmax(0,1fr) minmax(0,1fr);\n    gap:38px;\n    padding:42px;\n  }\n\n  #aj-horseshoe-chimes .hw-section{\n    padding:47px 40px;\n  }\n\n  #aj-horseshoe-chimes .hw-story.has-photo{\n    grid-template-columns:\n      minmax(0,1fr) minmax(0,1fr);\n  }\n\n  #aj-horseshoe-chimes .hw-story-copy{\n    padding:43px;\n  }\n\n  #aj-horseshoe-chimes .hw-detail-grid,\n  #aj-horseshoe-chimes .hw-place-grid,\n  #aj-horseshoe-chimes .hw-steps{\n    grid-template-columns:\n      repeat(3,minmax(0,1fr));\n  }\n\n  #aj-horseshoe-chimes .hw-gallery-grid{\n    grid-template-columns:\n      repeat(3,minmax(0,1fr));\n  }\n}\n\n\/* MOBILE *\/\n\n@container (max-width:470px){\n\n  #aj-horseshoe-chimes .hw-hero{\n    padding:25px 16px 34px;\n  }\n\n  #aj-horseshoe-chimes .hw-section{\n    padding:35px 16px;\n  }\n\n  #aj-horseshoe-chimes .hw-story-copy{\n    padding:28px 19px;\n  }\n\n  #aj-horseshoe-chimes .hw-gallery-grid{\n    gap:8px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  #aj-horseshoe-chimes *{\n    animation:none!important;\n    transition:none!important;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv id=\"aj-horseshoe-chimes\"\u003e\n\n  \u003c!-- 01 HERO --\u003e\n\n  \u003csection class=\"hw-hero\" data-hw-layout\u003e\n\n    \u003cfigure class=\"hw-photo\" data-hw-photo=\"0\"\u003e\n      \u003cfigcaption\u003e\n        A little luck,\n        a little country charm.\n      \u003c\/figcaption\u003e\n    \u003c\/figure\u003e\n\n    \u003cdiv class=\"hw-hero-copy\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        RUSTIC CHARM FOR THE PLACES YOU LOVE\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        A Little Luck\n        in \u003cem\u003eEvery Breeze.\u003c\/em\u003e\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        There's something\n        special about\n        a quiet morning\n        on the porch.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        A warm cup of coffee,\n        a gentle breeze,\n        and the familiar\n        sound of a wind chime\n        nearby.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        Combining\n        horseshoe-inspired charm\n        with playful animal\n        details, this\n        decorative collection\n        brings an old-fashioned\n        country feeling\n        to your favorite\n        outdoor corner.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        A lovely little\n        reminder to slow down\n        and enjoy the\n        simple moments.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"hw-tags\"\u003e\n\n        \u003cspan\u003e🐴 Rustic Country Charm\u003c\/span\u003e\n\n        \u003cspan\u003e🍃 Breeze-Inspired Sound\u003c\/span\u003e\n\n        \u003cspan\u003e❤️ Animal-Lover Gift\u003c\/span\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 02 MAIN HIGHLIGHTS --\u003e\n\n  \u003cdiv class=\"hw-strip\"\u003e\n\n    \u003cdiv\u003e\n      \u003cspan\u003e🐎\u003c\/span\u003e\n      Horseshoe-Inspired Style\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003cspan\u003e🔔\u003c\/span\u003e\n      Hanging Chime Details\n    \u003c\/div\u003e\n\n    \u003cdiv\u003e\n      \u003cspan\u003e🎁\u003c\/span\u003e\n      Meaningful Gift Idea\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n  \u003c!-- 03 ORIGINAL GIF \/ VIDEO --\u003e\n\n  \u003csection class=\"hw-section hw-motion\" data-hw-motion\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        SEE IT SWAY IN THE BREEZE\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        A Little Movement.\n        A Peaceful Moment.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"hw-intro\"\u003e\n        See the original\n        product animation\n        or demonstration\n        in motion.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-motion-frame\" data-hw-motion-frame\u003e\u003c\/div\u003e\n\n    \u003cp class=\"hw-motion-note\"\u003e\n      Original product GIF\/video,\n      shown when available.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 04 FIRST IMAGE STORY --\u003e\n\n  \u003csection class=\"hw-story\" data-hw-layout\u003e\n\n    \u003cfigure class=\"hw-story-image\" data-hw-photo=\"1\"\u003e\u003c\/figure\u003e\n\n    \u003cdiv class=\"hw-story-copy\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        THE CHARM OF SIMPLE COUNTRY LIVING\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Bring a Little\n        Country Soul\n        to Your Porch.\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        A beautiful porch\n        doesn't have\n        to be filled\n        with expensive\n        decorations.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        Sometimes one\n        thoughtful hanging\n        accent is enough\n        to make a space\n        feel more personal.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        The animal-inspired\n        design adds character,\n        while the dangling\n        chime elements\n        create an inviting\n        sense of movement.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        Pair it with\n        a wooden porch chair,\n        greenery, and\n        a rustic lantern\n        for a cozy\n        farmhouse look.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"hw-quote\"\u003e\n        The sweetest moments\n        often happen\n        when life slows down.\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 05 PRODUCT DETAILS --\u003e\n\n  \u003csection class=\"hw-section hw-details\"\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        WHAT MAKES THIS DESIGN SPECIAL\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Rustic Details\n        Worth a Closer Look.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"hw-intro\"\u003e\n        More than an ordinary\n        hanging decoration,\n        the design brings\n        together traditional\n        horseshoe imagery\n        and the personality\n        of the animal world.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"hw-rule\"\u003e\u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-detail-grid\"\u003e\n\n      \u003carticle class=\"hw-detail\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          01 \/ HORSESHOE DESIGN\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          A Classic Symbol\n          of Good Luck\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Horseshoes have\n          long been associated\n          with luck and\n          welcoming homes\n          in country traditions.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          This familiar shape\n          adds a nostalgic\n          Western-inspired touch\n          to the collection.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n      \u003carticle class=\"hw-detail\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          02 \/ ANIMAL CHARACTER\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          A Design\n          That Feels Personal\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Animal-inspired accents\n          give each selected\n          style its own\n          distinct character.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Choose a design\n          that reflects your\n          love of animals,\n          nature, or country\n          living.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n      \u003carticle class=\"hw-detail\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          03 \/ HANGING CHIMES\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          A Gentle Reminder\n          to Slow Down\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          The hanging elements\n          are designed to\n          respond to moving air.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Their sound and\n          movement will vary\n          with the breeze,\n          making the\n          experience different\n          from moment to moment.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 06 REAL PRODUCT IMAGE GALLERY --\u003e\n\n  \u003csection class=\"hw-section hw-gallery\" data-hw-gallery\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        EXPLORE THE ACTUAL COLLECTION\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Every Angle\n        Has Its Own Charm.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"hw-intro\"\u003e\n        Explore the genuine\n        Shopify product photos\n        and compare the\n        available designs.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-gallery-grid\" data-hw-gallery-grid\u003e\u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 07 AVAILABLE VARIANTS --\u003e\n\n  \u003csection class=\"hw-section hw-variants\" data-hw-variants\u003e\n\n    \u003cspan class=\"hw-kicker\"\u003e\n      FIND THE ONE THAT FEELS LIKE YOU\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      Which Little Character\n      Would You Choose?\n    \u003c\/h2\u003e\n\n    \u003cp class=\"hw-intro\"\u003e\n      Explore the actual\n      available designs\n      and select your\n      favorite at the\n      top of this page.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"hw-variant-grid\" data-hw-variant-grid\u003e\u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 08 SECOND IMAGE STORY --\u003e\n\n  \u003csection class=\"hw-story alt\" data-hw-layout\u003e\n\n    \u003cdiv class=\"hw-story-copy\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        EVERYDAY MOMENTS, A LITTLE MORE BEAUTIFUL\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Make Your Favorite\n        Outdoor Corner\n        Feel Like Home.\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        Imagine sitting\n        on the porch\n        as the morning\n        sun filters\n        through the trees.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        A soft breeze\n        moves the hanging\n        decoration nearby,\n        bringing a simple\n        country feeling\n        to the moment.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        It's a lovely\n        finishing touch\n        for someone who\n        enjoys farmhouse\n        styling and\n        peaceful outdoor spaces.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"hw-quote\"\u003e\n        A little movement.\n        A little music.\n        A lot of charm.\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cfigure class=\"hw-story-image\" data-hw-photo=\"2\"\u003e\u003c\/figure\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 09 DISPLAY LOCATIONS --\u003e\n\n  \u003csection class=\"hw-section hw-places\"\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        FIND ITS PERFECT PLACE\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        A Little Country Charm\n        for Your Favorite Spaces.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"hw-intro\"\u003e\n        Display it where\n        the gentle movement\n        of the air can\n        become part\n        of your everyday\n        surroundings.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-place-grid\"\u003e\n\n      \u003cdiv class=\"hw-place\"\u003e\n\n        \u003cspan\u003e🏡\u003c\/span\u003e\n\n        \u003ch3\u003e\n          Covered Front Porch\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Add a welcoming\n          accent near a\n          rocking chair,\n          flower basket,\n          or farmhouse-style\n          entryway.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Choose a sheltered\n          hanging location\n          that suits the\n          product's care\n          requirements.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"hw-place\"\u003e\n\n        \u003cspan\u003e🌿\u003c\/span\u003e\n\n        \u003ch3\u003e\n          Patio or Garden Nook\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Bring personality\n          to a quiet\n          seating area\n          surrounded by\n          greenery and\n          country-inspired\n          decorations.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Avoid strong winds\n          or harsh exposure\n          unless the product\n          specifications\n          permit them.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"hw-place\"\u003e\n\n        \u003cspan\u003e🪟\u003c\/span\u003e\n\n        \u003ch3\u003e\n          Near a Favorite Window\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          A charming\n          decorative accent\n          near an appropriate\n          window or covered\n          area where\n          air can move.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Always allow\n          enough space\n          for the hanging\n          elements to\n          move freely.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 10 HANGING GUIDE --\u003e\n\n  \u003csection class=\"hw-section hw-how\"\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        A FEW THINGS TO CONSIDER\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Find the Right Spot\n        to Enjoy the Breeze.\n      \u003c\/h2\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-steps\"\u003e\n\n      \u003cdiv class=\"hw-step\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          01\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          Choose Your Location\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Look for a suitable\n          hanging point\n          with adequate\n          clearance below\n          and around the\n          chime elements.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"hw-step\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          02\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          Secure the Hanging Point\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Use an appropriate\n          support and follow\n          any mounting\n          guidance included\n          with the product.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Keep it away\n          from walkways\n          where it might\n          be bumped.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"hw-step\"\u003e\n\n        \u003cspan class=\"number\"\u003e\n          03\n        \u003c\/span\u003e\n\n        \u003ch3\u003e\n          Let the Breeze\n          Do Its Thing\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Allow the\n          decorative pieces\n          to move naturally.\n        \u003c\/p\u003e\n\n        \u003cp\u003e\n          Chime volume\n          and frequency\n          depend on the\n          wind conditions\n          and selected design.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-note\"\u003e\n      \u003cstrong\u003eBefore ordering:\u003c\/strong\u003e\n      Please review the selected style's\n      dimensions, material, finish,\n      mounting details, weather suitability,\n      and package contents.\n      Outdoor durability and exact sound\n      characteristics have not been\n      independently verified.\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 11 GIFT SECTION --\u003e\n\n  \u003csection class=\"hw-gift\"\u003e\n\n    \u003cspan class=\"hw-kicker\"\u003e\n      A GIFT WITH HEART AND COUNTRY CHARM\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      A Thoughtful Little Gift\n      for Someone Who\n      Loves the Outdoors.\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      For the horse lover\n      who feels most\n      at home in\n      the countryside.\n    \u003c\/p\u003e\n\n    \u003cp\u003e\n      For the mom\n      who loves decorating\n      her front porch\n      with meaningful\n      little finds.\n    \u003c\/p\u003e\n\n    \u003cp\u003e\n      For a friend\n      who enjoys animals,\n      nature, and\n      the simple comfort\n      of time spent outdoors.\n    \u003c\/p\u003e\n\n    \u003cp\u003e\n      A charming idea\n      for birthdays,\n      housewarmings,\n      holidays, or\n      just because.\n    \u003c\/p\u003e\n\n    \u003cspan class=\"hw-gift-quote\"\u003e\n      \"May every gentle breeze\n      bring a little peace\n      and happiness.\" ❤️\n    \u003c\/span\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 12 FAQ --\u003e\n\n  \u003csection class=\"hw-section hw-faq\"\u003e\n\n    \u003cdiv class=\"hw-center\"\u003e\n\n      \u003cspan class=\"hw-kicker\"\u003e\n        BEFORE YOU CHOOSE\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Frequently Asked Questions.\n      \u003c\/h2\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"hw-faq-list\"\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Which animal designs are available?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Please check the\n          current product\n          options above\n          to see the\n          animal styles\n          available to order.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Does the wind chime make sound?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          The hanging chime\n          elements are intended\n          to respond to\n          moving air.\n          The exact tone,\n          volume, and frequency\n          depend on the\n          design and breeze.\n          Refer to the\n          original video\n          demonstration for\n          a closer look.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Is it made from real horseshoes?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          The collection is\n          described as featuring\n          horseshoe-inspired\n          animal designs.\n          Please check the\n          selected product's\n          material and\n          construction details\n          to confirm whether\n          actual horseshoes\n          are used.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Can I hang it outdoors?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          A sheltered\n          porch or patio\n          may be suitable,\n          depending on\n          the actual material\n          and product\n          care requirements.\n          Weather resistance\n          should not be\n          assumed without\n          confirmation.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          What are the dimensions?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Review the\n          exact measurements\n          of the selected\n          style in the\n          product specifications,\n          including the\n          total hanging length.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Is it a good gift?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Its animal theme,\n          rustic style,\n          and wind-chime\n          design make it\n          a thoughtful gift\n          idea for people\n          who enjoy country\n          decor and nature.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 13 ONLY BOTTOM CTA --\u003e\n\n  \u003csection class=\"hw-final\"\u003e\n\n    \u003cspan class=\"hw-kicker\"\u003e\n      A LITTLE CHARM ON THE BREEZE\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      Bring a Little Luck\n      to Your Favorite Place.\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      An animal-inspired\n      design, rustic\n      horseshoe charm,\n      and the quiet\n      beauty of the\n      passing breeze.\n    \u003c\/p\u003e\n\n    \u003ca href=\"#\" class=\"hw-top\"\u003e\n      Choose Your Favorite Style ↑\n    \u003c\/a\u003e\n\n    \u003cp style=\"\n      margin-top:11px;\n      font-size:12px;\n      color:#dfe8d9;\n    \"\u003e\n      Back to the top\n      to see product options.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  \"use strict\";\n\n  var HANDLE =\n    \"🎄-handmade-horse-shoe-animal-\" +\n    \"wind-chime-collection❤️\";\n\n  \/*\n    OPTIONAL DIRECT SHOPIFY CDN IMAGES\n\n    If automatic loading is unavailable,\n    paste real images from this product.\n\n    Example:\n    var DIRECT_IMAGES = [\n      \"https:\/\/cdn.shopify.com\/...\",\n      \"https:\/\/cdn.shopify.com\/...\"\n    ];\n  *\/\n\n  var DIRECT_IMAGES = [];\n\n  \/*\n    OPTIONAL ORIGINAL ANIMATION\n\n    Paste the original GIF or MP4 CDN URL\n    here if you have it.\n\n    GIF files remain GIFs and will\n    continue moving naturally.\n  *\/\n\n  var ORIGINAL_ANIMATION_URL = \"\";\n\n  function initialize(){\n\n    var root=document.getElementById(\n      \"aj-horseshoe-chimes\"\n    );\n\n    if(\n      !root ||\n      root.dataset.initialized===\"1\"\n    ){\n      return;\n    }\n\n    root.dataset.initialized=\"1\";\n\n    function absolute(value){\n\n      if(value \u0026\u0026 typeof value===\"object\"){\n\n        value=\n          value.src ||\n          value.url ||\n          value.contentUrl ||\n          \"\";\n      }\n\n      if(\n        typeof value!==\"string\" ||\n        !value.trim()\n      ){\n        return \"\";\n      }\n\n      try{\n\n        var u=new URL(\n          value,\n          window.location.origin\n        );\n\n        return \/^https?:$\/.test(u.protocol)\n          ? u.href\n          : \"\";\n\n      }catch(e){\n        return \"\";\n      }\n    }\n\n    function shopifyMedia(src){\n\n      return (\n        \/cdn\\.shopify\\.com\/i.test(src) ||\n        \/\\\/cdn\\\/shop\\\/\/i.test(src) ||\n        \/\\\/s\\\/files\\\/\/i.test(src)\n      );\n    }\n\n    function gifFile(src){\n\n      return \/\\.gif(?:[?#]|$)\/i.test(src);\n    }\n\n    function videoFile(src){\n\n      return \/\\.(mp4|webm|m4v)(?:[?#]|$)\/i\n        .test(src);\n    }\n\n    function animated(src){\n\n      return gifFile(src) ||\n        videoFile(src);\n    }\n\n    function unique(values){\n\n      var seen={};\n\n      return values\n        .map(absolute)\n        .filter(function(src){\n\n          if(!src || !shopifyMedia(src)){\n            return false;\n          }\n\n          var key=src.split(\"?\")[0];\n\n          if(seen[key]){\n            return false;\n          }\n\n          seen[key]=true;\n          return true;\n        });\n    }\n\n    \/*\n      EXTRACT ACTUAL MEDIA FROM HTML\n    *\/\n\n    function fromHTML(html){\n\n      var result={\n        images:[],\n        animations:[]\n      };\n\n      if(!html){\n        return result;\n      }\n\n      var page=new DOMParser()\n        .parseFromString(\n          html,\n          \"text\/html\"\n        );\n\n      page.querySelectorAll(\n        \"img,video,source\"\n      ).forEach(function(element){\n\n        var src=absolute(\n          element.getAttribute(\"data-src\") ||\n          element.getAttribute(\"src\") ||\n          element.getAttribute(\"data-original\") ||\n          \"\"\n        );\n\n        if(!src || !shopifyMedia(src)){\n          return;\n        }\n\n        if(animated(src)){\n\n          result.animations.push(src);\n\n        }else if(\n          element.tagName===\"IMG\"\n        ){\n\n          result.images.push(src);\n        }\n      });\n\n      result.images=unique(result.images);\n\n      result.animations=unique(\n        result.animations\n      );\n\n      return result;\n    }\n\n    \/*\n      GET IMAGES FROM THE ORIGINAL\n      SHOPIFY PRODUCT GALLERY\n    *\/\n\n    function originalGallery(){\n\n      var result={\n        images:[],\n        animations:[]\n      };\n\n      var selectors=[\n        \"media-gallery\",\n        \"product-media-gallery\",\n        \".product__media-list\",\n        \".product__media-wrapper\",\n        \".product-gallery\",\n        \".product-single__photos\",\n        \"[data-product-gallery]\",\n        \".product__description\",\n        \".product-single__description\"\n      ];\n\n      document.querySelectorAll(\n        selectors.join(\",\")\n      ).forEach(function(container){\n\n        if(root.contains(container)){\n          return;\n        }\n\n        container.querySelectorAll(\n          \"img\"\n        ).forEach(function(img){\n\n          var candidates=[];\n\n          [\n            \"data-zoom-image\",\n            \"data-full-size\",\n            \"data-src\",\n            \"data-original\"\n          ].forEach(function(key){\n\n            var value=img.getAttribute(key);\n\n            if(value){\n              candidates.push(value);\n            }\n          });\n\n          var srcset=img.getAttribute(\n            \"srcset\"\n          );\n\n          if(srcset){\n\n            var entries=srcset.split(\",\");\n\n            entries.sort(function(a,b){\n\n              var aw=parseInt(\n                (a.match(\/(\\d+)w\/)||[])[1]||0,\n                10\n              );\n\n              var bw=parseInt(\n                (b.match(\/(\\d+)w\/)||[])[1]||0,\n                10\n              );\n\n              return bw-aw;\n            });\n\n            entries.forEach(function(entry){\n\n              var src=entry.trim()\n                .split(\/\\s+\/)[0];\n\n              if(src){\n                candidates.push(src);\n              }\n            });\n          }\n\n          candidates.push(\n            img.currentSrc || \"\",\n            img.getAttribute(\"src\") || \"\"\n          );\n\n          for(\n            var i=0;\n            i\u003ccandidates.length;\n            i++\n          ){\n\n            var source=absolute(\n              candidates[i]\n            );\n\n            if(\n              !source ||\n              !shopifyMedia(source)\n            ){\n              continue;\n            }\n\n            if(animated(source)){\n\n              result.animations.push(source);\n\n            }else{\n\n              result.images.push(source);\n            }\n\n            break;\n          }\n        });\n\n        container.querySelectorAll(\n          \"video,video source\"\n        ).forEach(function(media){\n\n          var src=absolute(\n            media.currentSrc ||\n            media.getAttribute(\"src\") ||\n            \"\"\n          );\n\n          if(\n            src \u0026\u0026\n            shopifyMedia(src) \u0026\u0026\n            videoFile(src)\n          ){\n\n            result.animations.push(src);\n          }\n        });\n      });\n\n      result.images=unique(result.images);\n\n      result.animations=unique(\n        result.animations\n      );\n\n      return result;\n    }\n\n    \/*\n      READ CURRENT PRODUCT'S JSON\n    *\/\n\n    async function getProduct(){\n\n      var endpoints=[];\n\n      var currentPath=\n        window.location.pathname;\n\n      var decodedPath=\"\";\n\n      try{\n        decodedPath=decodeURIComponent(\n          currentPath\n        );\n      }catch(e){}\n\n      if(\n        decodedPath.indexOf(\n          \"handmade-horse-shoe-animal-\" +\n          \"wind-chime-collection\"\n        )!==-1\n      ){\n\n        endpoints.push(\n          currentPath.replace(\/\\\/$\/,\"\")+\n          \".js\"\n        );\n      }\n\n      endpoints.push(\n        \"\/products\/\"+\n        encodeURIComponent(HANDLE)+\n        \".js\"\n      );\n\n      var seen={};\n\n      for(\n        var i=0;\n        i\u003cendpoints.length;\n        i++\n      ){\n\n        var endpoint=endpoints[i];\n\n        if(seen[endpoint]){\n          continue;\n        }\n\n        seen[endpoint]=true;\n\n        try{\n\n          var response=await fetch(\n            endpoint,\n            {credentials:\"same-origin\"}\n          );\n\n          if(!response.ok){\n            continue;\n          }\n\n          var product=await response.json();\n\n          if(\n            !product ||\n            !product.handle ||\n            product.handle.indexOf(\n              \"handmade-horse-shoe-animal-\" +\n              \"wind-chime-collection\"\n            )===-1\n          ){\n            continue;\n          }\n\n          return product;\n\n        }catch(e){\n          \/* Try the next product endpoint *\/\n        }\n      }\n\n      return null;\n    }\n\n    \/*\n      VERIFY IMAGE BEFORE DISPLAY\n    *\/\n\n    function checkImage(src){\n\n      return new Promise(function(resolve){\n\n        var img=new Image();\n\n        img.onload=function(){\n\n          resolve(\n            img.naturalWidth\u003e0\n              ? src\n              : null\n          );\n        };\n\n        img.onerror=function(){\n          resolve(null);\n        };\n\n        img.src=src;\n      });\n    }\n\n    function insertImage(holder,src,index){\n\n      if(!holder || !src){\n        return;\n      }\n\n      var img=document.createElement(\n        \"img\"\n      );\n\n      img.src=src;\n\n      img.alt=\n        \"Horseshoe animal wind chime product\";\n\n      img.loading=index===0\n        ? \"eager\"\n        : \"lazy\";\n\n      img.decoding=\"async\";\n\n      holder.insertBefore(\n        img,\n        holder.firstChild\n      );\n\n      holder.classList.add(\"ready\");\n\n      var layout=holder.closest(\n        \"[data-hw-layout]\"\n      );\n\n      if(layout){\n        layout.classList.add(\"has-photo\");\n      }\n    }\n\n    \/*\n      RENDER THE REAL PRODUCT PHOTOS\n    *\/\n\n    function displayImages(images){\n\n      if(!images.length){\n        return;\n      }\n\n      for(var index=0;index\u003c3;index++){\n\n        var holder=root.querySelector(\n          '[data-hw-photo=\"'+index+'\"]'\n        );\n\n        if(images[index]){\n          insertImage(\n            holder,\n            images[index],\n            index\n          );\n        }\n      }\n\n      var galleryImages=images.slice(3,9);\n\n      if(!galleryImages.length){\n        return;\n      }\n\n      var gallery=root.querySelector(\n        \"[data-hw-gallery]\"\n      );\n\n      var grid=root.querySelector(\n        \"[data-hw-gallery-grid]\"\n      );\n\n      galleryImages.forEach(\n        function(src,index){\n\n          var figure=document.createElement(\n            \"figure\"\n          );\n\n          figure.className=\"hw-gallery-item\";\n\n          var image=document.createElement(\n            \"img\"\n          );\n\n          image.src=src;\n\n          image.alt=\n            \"Horseshoe animal wind chime \" +\n            \"product view\";\n\n          image.loading=\"lazy\";\n          image.decoding=\"async\";\n\n          var caption=document.createElement(\n            \"figcaption\"\n          );\n\n          caption.textContent=\n            \"Product View \"+(index+4);\n\n          figure.appendChild(image);\n          figure.appendChild(caption);\n\n          grid.appendChild(figure);\n        }\n      );\n\n      gallery.classList.add(\"ready\");\n    }\n\n    \/*\n      DISPLAY THE ORIGINAL GIF OR VIDEO\n      WITHOUT CONVERTING IT TO A PHOTO\n    *\/\n\n    function displayAnimation(src){\n\n      if(!src){\n        return;\n      }\n\n      var section=root.querySelector(\n        \"[data-hw-motion]\"\n      );\n\n      var frame=root.querySelector(\n        \"[data-hw-motion-frame]\"\n      );\n\n      if(!section || !frame){\n        return;\n      }\n\n      if(videoFile(src)){\n\n        var video=document.createElement(\n          \"video\"\n        );\n\n        video.src=src;\n\n        video.autoplay=true;\n        video.muted=true;\n        video.loop=true;\n        video.playsInline=true;\n        video.controls=true;\n        video.preload=\"metadata\";\n\n        video.addEventListener(\n          \"loadedmetadata\",\n          function(){\n\n            section.classList.add(\"ready\");\n\n            video.play().catch(function(){});\n          },\n          {once:true}\n        );\n\n        frame.appendChild(video);\n\n      }else if(gifFile(src)){\n\n        var image=new Image();\n\n        image.alt=\n          \"Original animated wind chime demonstration\";\n\n        image.onload=function(){\n\n          section.classList.add(\"ready\");\n        };\n\n        image.src=src;\n\n        frame.appendChild(image);\n      }\n    }\n\n    \/*\n      SHOW ONLY REAL AVAILABLE STYLES\n    *\/\n\n    function displayVariants(product){\n\n      if(\n        !product ||\n        !Array.isArray(product.variants)\n      ){\n        return;\n      }\n\n      var names=[];\n\n      product.variants.forEach(\n        function(variant){\n\n          var name=String(\n            variant.title||\"\"\n          ).trim();\n\n          if(\n            !name ||\n            \/^default title$\/i.test(name) ||\n            names.indexOf(name)!==-1\n          ){\n            return;\n          }\n\n          names.push(name);\n        }\n      );\n\n      if(names.length\u003c2){\n        return;\n      }\n\n      var section=root.querySelector(\n        \"[data-hw-variants]\"\n      );\n\n      var grid=root.querySelector(\n        \"[data-hw-variant-grid]\"\n      );\n\n      names.slice(0,12).forEach(\n        function(name){\n\n          var label=document.createElement(\n            \"span\"\n          );\n\n          label.className=\"hw-variant\";\n\n          label.textContent=name;\n\n          grid.appendChild(label);\n        }\n      );\n\n      section.classList.add(\"ready\");\n    }\n\n    \/*\n      LOAD PRODUCT DATA AND FALLBACKS\n    *\/\n\n    async function loadAll(){\n\n      var original=originalGallery();\n\n      var product=await getProduct();\n\n      var images=DIRECT_IMAGES.slice();\n\n      var animations=[];\n\n      if(ORIGINAL_ANIMATION_URL){\n\n        animations.push(\n          ORIGINAL_ANIMATION_URL\n        );\n      }\n\n      if(product){\n\n        var productImages=\n          Array.isArray(product.images)\n          ? product.images\n          : [];\n\n        productImages.forEach(\n          function(item){\n\n            var src=absolute(item);\n\n            if(animated(src)){\n\n              animations.push(src);\n\n            }else if(src){\n\n              images.push(src);\n            }\n          }\n        );\n\n        var described=fromHTML(\n          product.description||\"\"\n        );\n\n        images=images.concat(\n          described.images\n        );\n\n        animations=animations.concat(\n          described.animations\n        );\n\n        displayVariants(product);\n      }\n\n      images=images.concat(\n        original.images\n      );\n\n      animations=animations.concat(\n        original.animations\n      );\n\n      images=unique(images).filter(\n        function(src){\n          return !animated(src);\n        }\n      );\n\n      animations=unique(animations).filter(\n        animated\n      );\n\n      if(animations.length){\n\n        displayAnimation(\n          animations[0]\n        );\n      }\n\n      if(images.length){\n\n        var results=await Promise.all(\n          images.slice(0,14)\n            .map(checkImage)\n        );\n\n        var valid=results.filter(Boolean);\n\n        displayImages(valid);\n      }\n    }\n\n    \/*\n      Bottom link uses native href=\"#\".\n      No JavaScript needed to return\n      to the page top.\n    *\/\n\n    loadAll();\n  }\n\n  if(document.readyState===\"loading\"){\n\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      initialize,\n      {once:true}\n    );\n\n  }else{\n\n    initialize();\n  }\n\n  document.addEventListener(\n    \"shopify:section:load\",\n    initialize\n  );\n\n})();\n\u003c\/script\u003e\n","brand":"zhidou","offers":[{"title":"Horseshoe Butterfly Wind Chime❤（𝟭𝟬 𝗶𝗻 𝘀𝘁𝗼𝗰𝗸）","offer_id":68247185424621,"sku":"78926110602-Butterfly","price":24.99,"currency_code":"USD","in_stock":true},{"title":"Horseshoe Horse（𝟳 𝗶𝗻 𝘀𝘁𝗼𝗰𝗸）","offer_id":68247185457389,"sku":"78926110602-Horse","price":24.99,"currency_code":"USD","in_stock":true},{"title":"Horseshoe Lucky Star（𝟭𝟮 𝗶𝗻 𝘀𝘁𝗼𝗰𝗸）","offer_id":68247185490157,"sku":"78926110602-Lucky Star","price":24.99,"currency_code":"USD","in_stock":true},{"title":"🎁3 Styles (Butterfly\u0026Horse\u0026Lucky Star)-Free Shipping","offer_id":68247185522925,"sku":"78926110602-1 Set（3 Pcs）","price":59.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0841\/9354\/2381\/files\/97737602379022337.webp?v=1794278703","url":"https:\/\/alasjoy.com\/products\/handmade-horse-shoe-animal-wind-chime-collection","provider":"alasjoy","version":"1.0","type":"link"}