{"product_id":"sdhh-la","title":"🎄 3D Fabric Poke Wreath DIY Kit (LA)","description":"\u003c!-- 完整复制到 Shopify Custom Liquid，同一页面只放一份。 --\u003e\n\n\u003cstyle\u003e\n#sdhh-page,\n#sdhh-page * {\n  box-sizing: border-box;\n}\n\n#sdhh-page {\n  --g: #244535;\n  --r: #a92c35;\n  --c: #f8f4ee;\n  max-width: 720px;\n  width: 100%;\n  margin: auto;\n  background: #fff;\n  color: #29251f;\n  font-family: Arial, Helvetica, sans-serif;\n  line-height: 1.5;\n  overflow-anchor: none;\n}\n\n#sdhh-page h2,\n#sdhh-page h3,\n#sdhh-page p {\n  margin: 0;\n  overflow-wrap: break-word;\n}\n\n#sdhh-page h2 {\n  font-size: clamp(27px, 5.6vw, 38px);\n  line-height: 1.15;\n  font-weight: 800;\n  color: var(--g);\n  letter-spacing: -.6px;\n}\n\n#sdhh-page h3 {\n  font-size: 21px;\n  line-height: 1.25;\n  font-weight: 800;\n  color: var(--g);\n}\n\n#sdhh-page p {\n  font-size: 17px;\n  line-height: 1.55;\n  color: #625b52;\n}\n\n#sdhh-page button {\n  font: inherit;\n  appearance: none;\n  -webkit-appearance: none;\n  cursor: pointer;\n}\n\n#sdhh-page a,\n#sdhh-page button,\n#sdhh-page summary {\n  -webkit-tap-highlight-color: transparent;\n}\n\n#sdhh-page button:focus-visible,\n#sdhh-page a:focus-visible,\n#sdhh-page summary:focus-visible,\n#sdhh-page [tabindex]:focus-visible {\n  outline: 3px solid var(--r);\n  outline-offset: 3px;\n}\n\n#sdhh-page .sw-pad {\n  padding: 28px 20px;\n}\n\n#sdhh-page .sw-center {\n  text-align: center;\n}\n\n#sdhh-page .sw-cream {\n  background: var(--c);\n}\n\n#sdhh-page .sw-kicker {\n  display: block;\n  margin-bottom: 10px;\n  font-size: 14px;\n  font-weight: 800;\n  color: var(--r);\n  letter-spacing: 1px;\n  text-transform: uppercase;\n}\n\n#sdhh-page .sw-copy {\n  max-width: 560px;\n  margin: 12px auto 20px;\n}\n\n\/* 固定图片框 *\/\n#sdhh-page .sw-image {\n  position: relative;\n  width: 100%;\n  aspect-ratio: 1 \/ 1;\n  overflow: hidden;\n  border-radius: 12px;\n  background: #f1eadf;\n}\n\n#sdhh-page .sw-image.sw-wide {\n  aspect-ratio: 4 \/ 3;\n}\n\n#sdhh-page .sw-image img {\n  position: absolute;\n  inset: 0;\n  display: block;\n  width: 100% !important;\n  height: 100% !important;\n  max-width: none;\n  object-fit: cover;\n  margin: 0;\n  border: 0;\n}\n\n#sdhh-page .sw-tag {\n  display: inline-block;\n  padding: 8px 12px;\n  margin-bottom: 14px;\n  border-radius: 25px;\n  background: var(--r);\n  color: #fff;\n  font-size: 14px;\n  font-weight: 800;\n}\n\n#sdhh-page .sw-pills {\n  display: flex;\n  justify-content: center;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin: 18px 0;\n}\n\n#sdhh-page .sw-pills span {\n  border: 1px solid #ddd2c2;\n  border-radius: 24px;\n  padding: 7px 10px;\n  color: var(--g);\n  background: #fff;\n  font-size: 14px;\n  font-weight: 700;\n}\n\n#sdhh-page .sw-cta {\n  display: inline-block;\n  padding: 13px 22px;\n  min-height: 48px;\n  border-radius: 8px;\n  background: var(--g);\n  color: #fff;\n  text-decoration: none;\n  font-size: 17px;\n  font-weight: 800;\n}\n\n#sdhh-page .sw-note {\n  margin-top: 12px;\n  font-size: 14px;\n  line-height: 1.5;\n  color: #71685c;\n}\n\n\/* 轮播轨道：只横向滚动 *\/\n#sdhh-page .sw-slider {\n  margin-top: 20px;\n  min-width: 0;\n}\n\n#sdhh-page .sw-track {\n  display: flex;\n  align-items: stretch;\n  width: 100%;\n  overflow-x: auto;\n  overflow-y: hidden;\n  scroll-snap-type: x mandatory;\n  overscroll-behavior-x: contain;\n  scrollbar-width: none;\n  -webkit-overflow-scrolling: touch;\n  border: 1px solid #e1d7c7;\n  border-radius: 14px;\n  background: #fff;\n  overflow-anchor: none;\n}\n\n#sdhh-page .sw-track::-webkit-scrollbar {\n  display: none;\n}\n\n#sdhh-page .sw-slide {\n  flex: 0 0 100%;\n  width: 100%;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  scroll-snap-align: start;\n  scroll-snap-stop: always;\n}\n\n#sdhh-page .sw-slide .sw-image {\n  border-radius: 12px 12px 0 0;\n  flex-shrink: 0;\n}\n\n#sdhh-page .sw-slide-body {\n  flex: 1;\n  padding: 18px;\n  text-align: center;\n  min-height: 145px;\n}\n\n#sdhh-page .sw-slide-body p {\n  margin-top: 8px;\n}\n\n\/* 控制按钮位于轨道外 *\/\n#sdhh-page .sw-controls {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 12px;\n  min-height: 64px;\n  padding-top: 12px;\n}\n\n#sdhh-page .sw-arrow {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex: 0 0 44px;\n  width: 44px;\n  height: 44px;\n  padding: 0;\n  border: 1px solid #d7cab8;\n  border-radius: 50%;\n  background: var(--g);\n  color: #fff;\n  font-size: 27px;\n  line-height: 1;\n  pointer-events: auto;\n  touch-action: manipulation;\n}\n\n#sdhh-page .sw-dots {\n  display: flex;\n  justify-content: center;\n}\n\n#sdhh-page .sw-dot {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 44px;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  pointer-events: auto;\n  touch-action: manipulation;\n}\n\n#sdhh-page .sw-dot:after {\n  content: \"\";\n  width: 9px;\n  height: 9px;\n  background: #c8baa6;\n  border-radius: 9px;\n  pointer-events: none;\n}\n\n#sdhh-page .sw-dot[aria-current=\"true\"]:after {\n  width: 22px;\n  background: var(--r);\n}\n\n\/* 左侧方图＋右侧文案 *\/\n#sdhh-page .sw-benefit {\n  display: grid;\n  grid-template-columns: 42% minmax(0, 1fr);\n  align-items: center;\n  gap: 18px;\n  margin-top: 24px;\n}\n\n#sdhh-page .sw-benefit h3 {\n  margin: 0 0 8px;\n}\n\n#sdhh-page .sw-benefit-copy {\n  min-width: 0;\n}\n\n\/* 家用 \/ 送礼标签 *\/\n#sdhh-page .sw-tablabels {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 8px;\n  margin-bottom: 20px;\n}\n\n#sdhh-page .sw-tablabels button {\n  padding: 13px 6px;\n  border: 0;\n  border-bottom: 3px solid #d7cbb9;\n  background: transparent;\n  text-align: center;\n  font-size: 17px;\n  line-height: 1.3;\n  font-weight: 800;\n  color: #71685c;\n}\n\n#sdhh-page .sw-tablabels button[aria-selected=\"true\"] {\n  color: var(--g);\n  border-color: var(--r);\n}\n\n\/* 两面板共享高度，切换不改变页面布局 *\/\n#sdhh-page .sw-panels {\n  display: grid;\n}\n\n#sdhh-page .sw-panel {\n  grid-area: 1 \/ 1;\n  visibility: hidden;\n  pointer-events: none;\n  min-width: 0;\n}\n\n#sdhh-page .sw-panel.is-active {\n  visibility: visible;\n  pointer-events: auto;\n}\n\n#sdhh-page .sw-panel h3 {\n  margin: 16px 0 9px;\n}\n\n\/* 参数表格 *\/\n#sdhh-page .sw-table {\n  width: 100%;\n  border-collapse: collapse;\n  table-layout: fixed;\n  margin: 20px 0;\n  background: transparent;\n  border: 0;\n}\n\n#sdhh-page .sw-table th,\n#sdhh-page .sw-table td {\n  border: 0;\n  border-bottom: 1px solid #ded5c7;\n  padding: 13px 8px;\n  font-size: 16px;\n  line-height: 1.4;\n  vertical-align: middle;\n  overflow-wrap: anywhere;\n}\n\n#sdhh-page .sw-table th {\n  width: 35%;\n  text-align: left;\n  color: #71685c;\n  font-weight: 500;\n}\n\n#sdhh-page .sw-table td {\n  text-align: right;\n  color: #29251f;\n  font-weight: 700;\n}\n\n\/* 原生折叠FAQ *\/\n#sdhh-page .sw-faq details {\n  display: block;\n  border-bottom: 1px solid #e0d7c9;\n}\n\n#sdhh-page .sw-faq summary {\n  display: list-item;\n  list-style: disclosure-closed outside;\n  margin-left: 19px;\n  padding: 17px 0;\n  font-size: 17px;\n  font-weight: 800;\n  line-height: 1.4;\n  color: var(--g);\n  cursor: pointer;\n}\n\n#sdhh-page .sw-faq details[open] \u003e summary {\n  list-style-type: disclosure-open;\n}\n\n#sdhh-page .sw-faq details p {\n  padding: 0 0 18px;\n}\n\n#sdhh-page .sw-final {\n  background: var(--g);\n  text-align: center;\n}\n\n#sdhh-page .sw-final h2 {\n  color: #fff;\n}\n\n#sdhh-page .sw-final p {\n  color: #e4e8df;\n}\n\n#sdhh-scenes {\n  scroll-margin-top: 100px;\n}\n\n@media (max-width: 420px) {\n  #sdhh-page .sw-pad {\n    padding: 25px 15px;\n  }\n\n  #sdhh-page .sw-benefit {\n    gap: 12px;\n  }\n\n  #sdhh-page .sw-benefit h3 {\n    font-size: 18px;\n  }\n\n  #sdhh-page .sw-benefit p {\n    font-size: 17px;\n    line-height: 1.4;\n  }\n\n  #sdhh-page .sw-slide-body {\n    min-height: 175px;\n  }\n\n  #sdhh-page .sw-table th,\n  #sdhh-page .sw-table td {\n    padding: 12px 5px;\n    font-size: 15px;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv id=\"sdhh-page\"\u003e\n\n  \u003c!-- 01 首屏 --\u003e\n  \u003csection class=\"sw-cream\"\u003e\n\n    \u003cdiv class=\"sw-image\"\u003e\n      \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/3_ff665b3c-0567-4ca8-909f-c068d138c815.jpg?v=1792487638\" alt=\"Finished handmade Christmas wreath\" loading=\"eager\"\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-pad sw-center\"\u003e\n\n      \u003cspan class=\"sw-tag\"\u003e\n        MAKE-YOUR-OWN CHRISTMAS WREATH KIT\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Make a Christmas Wreath\u003cbr\u003e\n        You’re Proud to Hang.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"sw-copy\"\u003e\n        Turn small fabric squares into a beautifully textured holiday wreath.\n        Enjoy making it, then give your home a handmade Christmas touch.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"sw-pills\"\u003e\n        \u003cspan\u003eSimple Poke \u0026amp; Tuck Method\u003c\/span\u003e\n        \u003cspan\u003eSoft 3D Texture\u003c\/span\u003e\n        \u003cspan\u003e11.8 in \/ 30 cm\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003ca class=\"sw-cta\" href=\"#sdhh-scenes\"\u003e\n        See It in Your Home ↓\n      \u003c\/a\u003e\n\n      \u003cp class=\"sw-note\"\u003e\n        DIY craft kit. Assembly required.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- 02 制作GIF --\u003e\n  \u003csection class=\"sw-pad sw-center\"\u003e\n\n    \u003cspan class=\"sw-kicker\"\u003e\n      Little pieces. Beautiful possibilities.\n    \u003c\/span\u003e\n\n    \u003ch2\u003eWatch Your Wreath Come to Life.\u003c\/h2\u003e\n\n    \u003cp class=\"sw-copy\"\u003e\n      Place a fabric square, press its center into the base,\n      and gather the edges into soft folds.\n      Build the dimensional texture, piece by piece.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"sw-image sw-wide\"\u003e\n      \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/GIF_cc1754c0-d8b0-4d8f-b476-9eee299f33bb.gif?v=1792471265\" alt=\"Fabric poke wreath crafting demonstration\" loading=\"lazy\"\u003e\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 03 四步教程轮播 --\u003e\n  \u003csection class=\"sw-pad sw-cream\"\u003e\n\n    \u003cdiv class=\"sw-center\"\u003e\n\n      \u003cspan class=\"sw-kicker\"\u003eSee how it works\u003c\/span\u003e\n\n      \u003ch2\u003ePlace. Poke. Tuck. Repeat.\u003c\/h2\u003e\n\n      \u003cp class=\"sw-copy\"\u003e\n        No advanced sewing skills needed for the main poke-art technique.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-slider\" data-slider\u003e\n\n      \u003cdiv class=\"sw-track\" tabindex=\"0\" aria-label=\"Crafting steps. Swipe to explore.\"\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/6_d40ba287-677f-4393-87cb-586fed5b3203.jpg?v=1792487638\" alt=\"Place the fabric square\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003e1. Place Your Fabric\u003c\/h3\u003e\n            \u003cp\u003eLay a small fabric square over the wreath base.\u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/7_ba59c994-89c1-4945-beb0-91deac0e88fe.jpg?v=1792487638\" alt=\"Poke the center\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003e2. Poke the Center\u003c\/h3\u003e\n            \u003cp\u003e\n              Use the poke tool to press the center\n              of the fabric into the base.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/8_a42b4da3-3bde-4a9b-bf7a-5dca1b0820ee.jpg?v=1792487638\" alt=\"Shape the fabric folds\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003e3. Shape the Soft Folds\u003c\/h3\u003e\n            \u003cp\u003e\n              As the center goes in, the edges gather upward\n              into dimensional folds.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/9.jpg?v=1792487638\" alt=\"Complete the wreath\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003e4. Build Your Wreath\u003c\/h3\u003e\n            \u003cp\u003e\n              Add fabric beside each finished section\n              and watch the texture come together.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-controls\"\u003e\n\n        \u003cbutton class=\"sw-arrow\" type=\"button\" data-prev aria-label=\"Previous step\"\u003e‹\u003c\/button\u003e\n\n        \u003cdiv class=\"sw-dots\"\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"0\" aria-label=\"View step 1\" aria-current=\"true\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"1\" aria-label=\"View step 2\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"2\" aria-label=\"View step 3\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"3\" aria-label=\"View step 4\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n        \u003c\/div\u003e\n\n        \u003cbutton class=\"sw-arrow\" type=\"button\" data-next aria-label=\"Next step\"\u003e›\u003c\/button\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 04 保留左图右文 --\u003e\n  \u003csection class=\"sw-pad\"\u003e\n\n    \u003cdiv class=\"sw-center\"\u003e\n\n      \u003cspan class=\"sw-kicker\"\u003eThe joy is in the making\u003c\/span\u003e\n\n      \u003ch2\u003e\n        A Little Creativity.\u003cbr\u003e\n        A Personal Christmas Touch.\n      \u003c\/h2\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-benefit\"\u003e\n\n      \u003cdiv class=\"sw-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/11.jpg?v=1792487638\" alt=\"Dimensional fabric texture\" loading=\"lazy\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-benefit-copy\"\u003e\n        \u003ch3\u003eTexture You Can See\u003c\/h3\u003e\n        \u003cp\u003e\n          Layered fabric folds create a soft,\n          dimensional finish with depth and detail.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-benefit\"\u003e\n\n      \u003cdiv class=\"sw-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/12.jpg?v=1792487638\" alt=\"Enjoy making a Christmas wreath\" loading=\"lazy\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-benefit-copy\"\u003e\n        \u003ch3\u003eMake Time to Make\u003c\/h3\u003e\n        \u003cp\u003e\n          Put on your favorite holiday music\n          and settle into a hands-on Christmas project.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-benefit\"\u003e\n\n      \u003cdiv class=\"sw-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/13.jpg?v=1792487638\" alt=\"Proudly display your handmade wreath\" loading=\"lazy\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-benefit-copy\"\u003e\n        \u003ch3\u003e“I Made It Myself.”\u003c\/h3\u003e\n        \u003cp\u003e\n          Enjoy the moment your finished project\n          becomes part of your Christmas decor.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 05 家用 \/ 送礼切换：已替换指定图片 --\u003e\n  \u003csection class=\"sw-pad sw-cream\"\u003e\n\n    \u003cdiv class=\"sw-tabs\" data-tabs\u003e\n\n      \u003cdiv class=\"sw-tablabels\" role=\"tablist\" aria-label=\"Home or gift\"\u003e\n\n        \u003cbutton type=\"button\" role=\"tab\" aria-selected=\"true\"\u003e\n          Make It for Your Home\n        \u003c\/button\u003e\n\n        \u003cbutton type=\"button\" role=\"tab\" aria-selected=\"false\" tabindex=\"-1\"\u003e\n          Give a Creative Gift\n        \u003c\/button\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-panels\"\u003e\n\n        \u003cdiv class=\"sw-panel sw-home-panel is-active\" role=\"tabpanel\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/G_1.jpg?v=1792489144\" alt=\"Handmade Christmas decor at home\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003ch3\u003eA Handmade Welcome\u003c\/h3\u003e\n\n          \u003cp\u003e\n            Add a personal holiday detail to your home,\n            with a wreath you made yourself.\n          \u003c\/p\u003e\n\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"sw-panel sw-gift-panel\" role=\"tabpanel\" inert aria-hidden=\"true\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/G_2.jpg?v=1792489144\" alt=\"A creative Christmas wreath DIY gift\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003ch3\u003eA Gift They Get to Create\u003c\/h3\u003e\n\n          \u003cp\u003e\n            Give a craft lover a Christmas project to enjoy\n            and a handmade decoration to display when it’s finished.\n          \u003c\/p\u003e\n\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 06 四个家居场景轮播 --\u003e\n  \u003csection class=\"sw-pad\" id=\"sdhh-scenes\"\u003e\n\n    \u003cdiv class=\"sw-center\"\u003e\n\n      \u003cspan class=\"sw-kicker\"\u003e\n        One handmade wreath. Your favorite space.\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        A Christmas Touch,\u003cbr\u003e\n        Wherever You Make Home.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"sw-copy\"\u003e\n        Explore four ways to display your finished wreath.\n        Use the arrows or dots to switch scenes.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-slider\" data-slider\u003e\n\n      \u003cdiv class=\"sw-track\" tabindex=\"0\" aria-label=\"Home display scenes. Swipe to explore.\"\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/22.jpg?v=1792487638\" alt=\"Christmas wreath in an entryway\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003eA Welcoming Entryway\u003c\/h3\u003e\n            \u003cp\u003eGive your entryway a handmade Christmas touch.\u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/21.jpg?v=1792487638\" alt=\"Christmas wreath in a living room\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003eA Cozy Living Room\u003c\/h3\u003e\n            \u003cp\u003e\n              Add festive texture to a living room wall\n              or seasonal display.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/23.jpg?v=1792487638\" alt=\"Christmas wreath in a kitchen\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003eA Festive Kitchen Corner\u003c\/h3\u003e\n            \u003cp\u003e\n              Bring a little holiday cheer to a kitchen wall,\n              away from heat and splashes.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n        \u003carticle class=\"sw-slide\"\u003e\n\n          \u003cdiv class=\"sw-image sw-wide\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/24.jpg?v=1792487638\" alt=\"Christmas wreath on a sheltered porch\" loading=\"lazy\"\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"sw-slide-body\"\u003e\n            \u003ch3\u003eA Sheltered Porch Welcome\u003c\/h3\u003e\n            \u003cp\u003e\n              Style a covered porch in a sheltered spot,\n              protected from rain and snow.\n            \u003c\/p\u003e\n          \u003c\/div\u003e\n\n        \u003c\/article\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"sw-controls\"\u003e\n\n        \u003cbutton class=\"sw-arrow\" type=\"button\" data-prev aria-label=\"Previous scene\"\u003e‹\u003c\/button\u003e\n\n        \u003cdiv class=\"sw-dots\"\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"0\" aria-label=\"View entryway\" aria-current=\"true\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"1\" aria-label=\"View living room\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"2\" aria-label=\"View kitchen\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n          \u003cbutton class=\"sw-dot\" type=\"button\" data-slide=\"3\" aria-label=\"View covered porch\" aria-current=\"false\"\u003e\u003c\/button\u003e\n\n        \u003c\/div\u003e\n\n        \u003cbutton class=\"sw-arrow\" type=\"button\" data-next aria-label=\"Next scene\"\u003e›\u003c\/button\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cp class=\"sw-note sw-center\"\u003e\n      Each kit makes one wreath. Scenes show alternative display ideas.\n      Outdoor weather resistance is not specified.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 07 尺寸及参数 --\u003e\n  \u003csection class=\"sw-pad sw-cream\"\u003e\n\n    \u003cdiv class=\"sw-center\"\u003e\n\n      \u003cspan class=\"sw-kicker\"\u003eKnow what you’re making\u003c\/span\u003e\n\n      \u003ch2\u003e\n        See the Size.\u003cbr\u003e\n        Know the Details.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"sw-copy\"\u003e\n        A DIY project with a finished diameter of 11.8 inches \/ 30 cm.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sw-image\"\u003e\n      \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/25.jpg?v=1792487638\" alt=\"Finished wreath size: 30 cm \/ 11.8 inches\" loading=\"lazy\"\u003e\n    \u003c\/div\u003e\n\n    \u003ctable class=\"sw-table\" aria-label=\"Product specifications\"\u003e\n      \u003ctbody\u003e\n\n        \u003ctr\u003e\n          \u003cth scope=\"row\"\u003eProduct\u003c\/th\u003e\n          \u003ctd\u003e3D Fabric Poke Wreath DIY Kit\u003c\/td\u003e\n        \u003c\/tr\u003e\n\n        \u003ctr\u003e\n          \u003cth scope=\"row\"\u003eFinished Size\u003c\/th\u003e\n          \u003ctd\u003e11.8 in \/ 30 cm diameter\u003c\/td\u003e\n        \u003c\/tr\u003e\n\n        \u003ctr\u003e\n          \u003cth scope=\"row\"\u003eTechnique\u003c\/th\u003e\n          \u003ctd\u003ePlace, poke, tuck \u0026amp; repeat\u003c\/td\u003e\n        \u003c\/tr\u003e\n\n        \u003ctr\u003e\n          \u003cth scope=\"row\"\u003ePackage\u003c\/th\u003e\n          \u003ctd\u003e1 × DIY wreath kit\u003c\/td\u003e\n        \u003c\/tr\u003e\n\n        \u003ctr\u003e\n          \u003cth scope=\"row\"\u003eUse\u003c\/th\u003e\n          \u003ctd\u003eChristmas crafting \u0026amp; seasonal display\u003c\/td\u003e\n        \u003c\/tr\u003e\n\n      \u003c\/tbody\u003e\n    \u003c\/table\u003e\n\n    \u003cp class=\"sw-note\"\u003e\n      The poke tool has a pointed tip. Handle carefully.\n      Adult use or adult supervision is recommended.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 08 FAQ --\u003e\n  \u003csection class=\"sw-pad sw-faq\"\u003e\n\n    \u003cdiv class=\"sw-center\"\u003e\n      \u003cspan class=\"sw-kicker\"\u003eBefore you begin\u003c\/span\u003e\n      \u003ch2\u003eYour Questions, Answered.\u003c\/h2\u003e\n    \u003c\/div\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eIs this a finished wreath or a DIY kit?\u003c\/summary\u003e\n      \u003cp\u003e\n        This is a DIY kit. You create the dimensional fabric wreath\n        yourself using the place, poke, tuck, and repeat technique.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eDo I need sewing experience?\u003c\/summary\u003e\n      \u003cp\u003e\n        No advanced sewing experience is needed for the main poke-art\n        technique. The texture is built by pressing small fabric pieces\n        into the base and gathering them into folds.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eHow large is the finished wreath?\u003c\/summary\u003e\n      \u003cp\u003e\n        The finished wreath measures 30 cm, approximately 11.8 inches,\n        in diameter. Check this size against the space where you plan\n        to display it.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eWhere can I display my finished wreath?\u003c\/summary\u003e\n      \u003cp\u003e\n        Suggested spaces include an entryway, living room, dry kitchen\n        wall, craft room, or sheltered covered porch. Keep it away from\n        flames, heat, and wet areas. Outdoor weather resistance is not specified.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eCan children join in?\u003c\/summary\u003e\n      \u003cp\u003e\n        The poke tool has a pointed working tip. Adult use or adult\n        supervision is recommended. This is not intended as an\n        unsupervised children’s toy.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails\u003e\n      \u003csummary\u003eDo the different designs use the same technique?\u003c\/summary\u003e\n      \u003cp\u003e\n        Yes. The collection uses the same core fabric poke-art technique,\n        with different colors, center ornaments, and sentiment details.\n      \u003c\/p\u003e\n    \u003c\/details\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- 09 底部 --\u003e\n  \u003csection class=\"sw-pad sw-final\"\u003e\n\n    \u003ch2\u003e\n      Make Something\u003cbr\u003e\n      That Feels Like Christmas.\n    \u003c\/h2\u003e\n\n    \u003cp class=\"sw-copy\"\u003e\n      A few fabric squares, a hands-on project,\n      and a handmade wreath to call your own.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- 以下交互脚本必须保留 --\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  var key = '__SDHH_INTERACTIONS_V4__';\n\n  \/*\n    重复执行脚本时，只初始化新内容，\n    避免重复绑定导致一次点击切换多张。\n  *\/\n  if (window[key]) {\n    window[key].boot(document);\n    return;\n  }\n\n  var sliders = new WeakMap();\n  var tabGroups = new WeakMap();\n\n  var reduced = window.matchMedia(\n    '(prefers-reduced-motion: reduce)'\n  );\n\n  var serial = 0;\n\n  \/* =========================\n     初始化单个轮播\n  ========================== *\/\n  function initSlider(slider) {\n    if (sliders.has(slider)) {\n      return sliders.get(slider);\n    }\n\n    var track = slider.querySelector('.sw-track');\n\n    if (!track) {\n      return null;\n    }\n\n    var cards = Array.from(track.children).filter(function (element) {\n      return element.classList.contains('sw-slide');\n    });\n\n    if (!cards.length) {\n      return null;\n    }\n\n    var dots = Array.from(\n      slider.querySelectorAll('[data-slide]')\n    );\n\n    var state = {\n      index: 0,\n      timer: 0,\n      width: track.clientWidth\n    };\n\n    track.id = 'sdhh-track-v4-' + (++serial);\n\n    slider.querySelectorAll('button').forEach(function (button) {\n      button.type = 'button';\n      button.setAttribute('aria-controls', track.id);\n    });\n\n    cards.forEach(function (card, index) {\n      card.setAttribute('role', 'group');\n      card.setAttribute(\n        'aria-label',\n        (index + 1) + ' of ' + cards.length\n      );\n    });\n\n    function left(index) {\n      return (\n        cards[index].getBoundingClientRect().left -\n        track.getBoundingClientRect().left -\n        track.clientLeft +\n        track.scrollLeft\n      );\n    }\n\n    function paint() {\n      dots.forEach(function (dot) {\n        var dotIndex = Number(dot.getAttribute('data-slide'));\n\n        dot.setAttribute(\n          'aria-current',\n          dotIndex === state.index ? 'true' : 'false'\n        );\n      });\n    }\n\n    function sync() {\n      var best = Infinity;\n\n      cards.forEach(function (card, index) {\n        var distance = Math.abs(\n          left(index) - track.scrollLeft\n        );\n\n        if (distance \u003c best) {\n          best = distance;\n          state.index = index;\n        }\n      });\n\n      paint();\n    }\n\n    \/*\n      只修改轮播内部的水平位置，\n      不滚动整个页面，不移动焦点到图片。\n    *\/\n    function go(index) {\n      if (!Number.isInteger(index)) {\n        return;\n      }\n\n      clearTimeout(state.timer);\n\n      state.index = (\n        index % cards.length + cards.length\n      ) % cards.length;\n\n      paint();\n\n      track.scrollTo({\n        left: left(state.index),\n        behavior: reduced.matches ? 'auto' : 'smooth'\n      });\n    }\n\n    state.go = go;\n    sliders.set(slider, state);\n\n    \/*\n      手指滑动结束后同步圆点。\n      点击切换过程中不反复覆盖目标索引。\n    *\/\n    track.addEventListener(\n      'scroll',\n      function () {\n        clearTimeout(state.timer);\n        state.timer = setTimeout(sync, 160);\n      },\n      { passive: true }\n    );\n\n    track.addEventListener('keydown', function (event) {\n      if (event.target !== track) {\n        return;\n      }\n\n      if (event.key === 'ArrowRight') {\n        event.preventDefault();\n        go(state.index + 1);\n      }\n\n      if (event.key === 'ArrowLeft') {\n        event.preventDefault();\n        go(state.index - 1);\n      }\n\n      if (event.key === 'Home') {\n        event.preventDefault();\n        go(0);\n      }\n\n      if (event.key === 'End') {\n        event.preventDefault();\n        go(cards.length - 1);\n      }\n    });\n\n    if (window.ResizeObserver) {\n      var resize = new ResizeObserver(function () {\n        if (\n          Math.abs(state.width - track.clientWidth) \u003c 1\n        ) {\n          return;\n        }\n\n        state.width = track.clientWidth;\n\n        if (state.width \u003e 0) {\n          track.scrollTo({\n            left: left(state.index),\n            behavior: 'instant'\n          });\n        }\n      });\n\n      resize.observe(track);\n    }\n\n    sync();\n\n    return state;\n  }\n\n  \/* =========================\n     初始化家用 \/ 送礼切换\n  ========================== *\/\n  function initTabs(group) {\n    if (tabGroups.has(group)) {\n      return tabGroups.get(group);\n    }\n\n    var tabs = Array.from(\n      group.querySelectorAll('[role=\"tab\"]')\n    );\n\n    var panels = Array.from(\n      group.querySelectorAll('[role=\"tabpanel\"]')\n    );\n\n    if (!tabs.length || tabs.length !== panels.length) {\n      return null;\n    }\n\n    var id = 'sdhh-tabs-v4-' + (++serial);\n\n    function choose(index, focus) {\n      tabs.forEach(function (tab, panelIndex) {\n        var active = panelIndex === index;\n\n        tab.setAttribute(\n          'aria-selected',\n          String(active)\n        );\n\n        tab.tabIndex = active ? 0 : -1;\n\n        panels[panelIndex].classList.toggle(\n          'is-active',\n          active\n        );\n\n        panels[panelIndex].setAttribute(\n          'aria-hidden',\n          String(!active)\n        );\n\n        panels[panelIndex].toggleAttribute(\n          'inert',\n          !active\n        );\n      });\n\n      if (focus) {\n        tabs[index].focus({ preventScroll: true });\n      }\n    }\n\n    tabs.forEach(function (tab, index) {\n      tab.type = 'button';\n\n      tab.id = id + '-tab-' + index;\n      panels[index].id = id + '-panel-' + index;\n\n      tab.setAttribute(\n        'aria-controls',\n        panels[index].id\n      );\n\n      panels[index].setAttribute(\n        'aria-labelledby',\n        tab.id\n      );\n\n      tab.addEventListener('keydown', function (event) {\n        var next = index;\n\n        if (event.key === 'ArrowRight') {\n          next = (index + 1) % tabs.length;\n        } else if (event.key === 'ArrowLeft') {\n          next = (index - 1 + tabs.length) % tabs.length;\n        } else if (event.key === 'Home') {\n          next = 0;\n        } else if (event.key === 'End') {\n          next = tabs.length - 1;\n        } else {\n          return;\n        }\n\n        event.preventDefault();\n        choose(next, true);\n      });\n    });\n\n    var state = {\n      tabs: tabs,\n      choose: choose\n    };\n\n    tabGroups.set(group, state);\n\n    var selected = tabs.findIndex(function (tab) {\n      return tab.getAttribute('aria-selected') === 'true';\n    });\n\n    choose(selected \u003c 0 ? 0 : selected, false);\n\n    return state;\n  }\n\n  \/* =========================\n     初始化页面组件\n  ========================== *\/\n  function boot(scope) {\n    if (!scope || !scope.querySelectorAll) {\n      return;\n    }\n\n    var roots = [];\n\n    if (\n      scope.matches \u0026\u0026\n      scope.matches('#sdhh-page')\n    ) {\n      roots.push(scope);\n    }\n\n    scope.querySelectorAll('#sdhh-page').forEach(function (root) {\n      roots.push(root);\n    });\n\n    roots.forEach(function (root) {\n      root.querySelectorAll('[data-slider]').forEach(initSlider);\n      root.querySelectorAll('[data-tabs]').forEach(initTabs);\n    });\n  }\n\n  \/*\n    使用事件委托：\n    即使 Shopify 重新渲染按钮，也可以响应点击。\n  *\/\n  document.addEventListener('click', function (event) {\n    var button = event.target.closest\n      ? event.target.closest('#sdhh-page button')\n      : null;\n\n    if (!button) {\n      return;\n    }\n\n    var slider = button.closest('[data-slider]');\n\n    if (\n      slider \u0026\u0026\n      (\n        button.hasAttribute('data-slide') ||\n        button.hasAttribute('data-prev') ||\n        button.hasAttribute('data-next')\n      )\n    ) {\n      event.preventDefault();\n\n      var sliderState = initSlider(slider);\n\n      if (!sliderState) {\n        return;\n      }\n\n      if (button.hasAttribute('data-slide')) {\n        sliderState.go(\n          Number(button.getAttribute('data-slide'))\n        );\n      } else {\n        sliderState.go(\n          sliderState.index +\n          (button.hasAttribute('data-prev') ? -1 : 1)\n        );\n      }\n\n      return;\n    }\n\n    var group = button.closest('[data-tabs]');\n\n    if (\n      group \u0026\u0026\n      button.getAttribute('role') === 'tab'\n    ) {\n      event.preventDefault();\n\n      var tabsState = initTabs(group);\n\n      if (tabsState) {\n        tabsState.choose(\n          tabsState.tabs.indexOf(button),\n          false\n        );\n      }\n    }\n  });\n\n  window[key] = {\n    boot: boot\n  };\n\n  boot(document);\n\n  if (document.readyState === 'loading') {\n    document.addEventListener(\n      'DOMContentLoaded',\n      function () {\n        boot(document);\n      },\n      { once: true }\n    );\n  }\n\n  document.addEventListener(\n    'shopify:section:load',\n    function (event) {\n      boot(event.target);\n    }\n  );\n\n  \/*\n    兼容区块延迟插入及编辑器重新生成页面内容。\n    只观察新增节点，不观察属性变动。\n  *\/\n  var observer = new MutationObserver(function (changes) {\n    var found = changes.some(function (change) {\n      return Array.from(change.addedNodes).some(function (node) {\n        return (\n          node.nodeType === 1 \u0026\u0026\n          (\n            node.matches('#sdhh-page') ||\n            node.querySelector('#sdhh-page')\n          )\n        );\n      });\n    });\n\n    if (found) {\n      boot(document);\n    }\n  });\n\n  observer.observe(document.documentElement, {\n    childList: true,\n    subtree: true\n  });\n})();\n\u003c\/script\u003e","brand":"mysite","offers":[{"title":"🎄 Merry Christmas Tree","offer_id":50778898104537,"sku":"KY-SDSHH","price":39.99,"currency_code":"USD","in_stock":true},{"title":"☃️ Let It Snow Snowman","offer_id":50778898137305,"sku":"KY-XRHH","price":39.99,"currency_code":"USD","in_stock":true},{"title":"🎅 Merry \u0026 Bright Santa","offer_id":50778898170073,"sku":"KY-SDLRHH","price":39.99,"currency_code":"USD","in_stock":true},{"title":"🦌 Holiday Wishes Reindeer","offer_id":50778898202841,"sku":"KY-MLHH","price":39.99,"currency_code":"USD","in_stock":true},{"title":"👼 Heavenly Blessings Angel","offer_id":50778898235609,"sku":"KY-TSHH","price":39.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0834\/3745\/3529\/files\/2_6e78c1a4-4f3e-455a-ac22-82242d352de0.jpg?v=1792488004","url":"https:\/\/jovrenta.com\/products\/sdhh-la","provider":"Jovrenta","version":"1.0","type":"link"}