{"title":"TailVale Picks","description":null,"products":[{"product_id":"smart-bouncing-ball","title":"Smart Bounce Ball","description":"\u003c!-- TailVale Smart Bounce Ball | Paste into a Shopify Custom Liquid block --\u003e\n\u003cstyle\u003e\n    .tv-bounce {\n      --tv-ink: #16372d;\n      --tv-deep: #102820;\n      --tv-cream: #f6f4ec;\n      --tv-paper: #fffefa;\n      --tv-lime: #d4f27b;\n      --tv-coral: #ff927e;\n      --tv-muted: #68776d;\n      color: var(--tv-ink);\n      background: var(--tv-cream);\n      border-radius: 28px;\n      overflow: hidden;\n      font-family: inherit;\n      margin: 24px auto;\n      max-width: 1180px;\n      isolation: isolate;\n    }\n    .tv-bounce * { box-sizing: border-box; }\n    .tv-bounce a { color: inherit; }\n    .tv-bounce__hero {\n      position: relative;\n      display: grid;\n      grid-template-columns: minmax(0, 1.05fr) minmax(300px, .95fr);\n      align-items: center;\n      gap: clamp(28px, 5vw, 72px);\n      min-height: 490px;\n      padding: clamp(30px, 6vw, 76px);\n      color: #fffefa;\n      background:\n        radial-gradient(ellipse at 84% 16%, rgba(212,242,123,.12), transparent 32%),\n        linear-gradient(135deg, #173b30 0%, #102820 70%, #0b211a 100%);\n    }\n    .tv-bounce__hero:after {\n      content: \"\";\n      position: absolute;\n      width: 280px;\n      height: 280px;\n      right: -120px;\n      bottom: -170px;\n      border: 1px solid rgba(255,255,255,.13);\n      border-radius: 50%;\n      box-shadow: 0 0 0 34px rgba(255,255,255,.025), 0 0 0 68px rgba(255,255,255,.02);\n      pointer-events: none;\n    }\n    .tv-bounce__copy { position: relative; z-index: 1; max-width: 590px; }\n    .tv-bounce__eyebrow {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      margin: 0 0 22px;\n      color: var(--tv-lime);\n      font-size: 11px;\n      font-weight: 800;\n      letter-spacing: .2em;\n      text-transform: uppercase;\n    }\n    .tv-bounce__eyebrow:before {\n      content: \"\";\n      width: 25px;\n      height: 1px;\n      background: currentColor;\n    }\n    .tv-bounce h2, .tv-bounce h3, .tv-bounce p { margin-top: 0; }\n    .tv-bounce__title {\n      max-width: 620px;\n      margin-bottom: 22px;\n      font-size: clamp(42px, 6vw, 78px);\n      font-weight: 750;\n      letter-spacing: -.065em;\n      line-height: .98;\n      text-wrap: balance;\n    }\n    .tv-bounce__title em { color: var(--tv-lime); font-family: Georgia, serif; font-weight: 400; }\n    .tv-bounce__intro {\n      max-width: 500px;\n      margin-bottom: 30px;\n      color: rgba(255,254,250,.78);\n      font-size: clamp(15px, 1.5vw, 18px);\n      line-height: 1.7;\n    }\n    .tv-bounce__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }\n    .tv-bounce__button {\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      min-height: 48px;\n      padding: 0 19px;\n      border: 1px solid transparent;\n      border-radius: 999px;\n      background: var(--tv-lime);\n      color: var(--tv-deep) !important;\n      font-size: 13px;\n      font-weight: 800;\n      text-decoration: none;\n      transition: transform .2s ease, background .2s ease;\n      cursor: pointer;\n    }\n    .tv-bounce__button:hover { transform: translateY(-2px); background: #e1f9a1; }\n    .tv-bounce__button--quiet {\n      border-color: rgba(255,255,255,.27);\n      background: transparent;\n      color: #fffefa !important;\n    }\n    .tv-bounce__button--quiet:hover { background: rgba(255,255,255,.09); }\n    .tv-bounce__micro { margin: 18px 0 0; color: rgba(255,254,250,.55); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }\n    .tv-bounce__stage {\n      position: relative;\n      display: grid;\n      min-height: 350px;\n      place-items: center;\n      overflow: hidden;\n      border: 1px solid rgba(255,255,255,.14);\n      border-radius: 48% 48% 42% 42% \/ 43% 43% 52% 52%;\n      background: radial-gradient(ellipse at 50% 58%, rgba(212,242,123,.11), transparent 52%);\n    }\n    .tv-bounce__orbit {\n      position: absolute;\n      width: min(83%, 330px);\n      aspect-ratio: 1;\n      border: 1px solid rgba(255,255,255,.2);\n      border-radius: 50%;\n      transform: rotate(-24deg) scaleY(.49);\n    }\n    .tv-bounce__orbit:before, .tv-bounce__orbit:after {\n      content: \"\";\n      position: absolute;\n      border: 1px solid rgba(255,255,255,.1);\n      border-radius: 50%;\n      inset: -22px;\n    }\n    .tv-bounce__orbit:after { inset: -48px; border-color: rgba(255,255,255,.07); }\n    .tv-bounce__dot {\n      position: absolute;\n      top: 15%;\n      left: 14%;\n      width: 9px;\n      height: 9px;\n      border-radius: 50%;\n      background: var(--tv-coral);\n      box-shadow: 0 0 18px var(--tv-coral);\n    }\n    .tv-bounce__ball-wrap {\n      position: relative;\n      z-index: 1;\n      display: grid;\n      width: clamp(150px, 21vw, 220px);\n      aspect-ratio: 1;\n      place-items: center;\n      animation: tv-bob 2.1s ease-in-out infinite;\n    }\n    .tv-bounce__ball {\n      position: relative;\n      display: grid;\n      width: 75%;\n      aspect-ratio: 1;\n      place-items: center;\n      border: 1px solid rgba(255,255,255,.18);\n      border-radius: 50%;\n      background:\n        radial-gradient(circle at 35% 27%, rgba(255,255,255,.22), transparent 13%),\n        radial-gradient(circle at 38% 30%, #424b45 0%, #202a25 28%, #101713 68%, #070b09 100%);\n      box-shadow: inset -15px -18px 28px rgba(0,0,0,.56), inset 8px 8px 18px rgba(255,255,255,.08), 0 28px 42px rgba(0,0,0,.3);\n    }\n    .tv-bounce__ball:before, .tv-bounce__ball:after {\n      content: \"\";\n      position: absolute;\n      border: 1px solid rgba(255,255,255,.08);\n      border-radius: 50%;\n      inset: 12%;\n    }\n    .tv-bounce__ball:after { inset: 25%; border-color: rgba(255,255,255,.06); }\n    .tv-bounce__led {\n      position: absolute;\n      width: 43%;\n      aspect-ratio: 1;\n      border: 5px solid transparent;\n      border-top-color: #cbfc77;\n      border-right-color: #66e2ce;\n      border-bottom-color: #ff867c;\n      border-left-color: #8d8cff;\n      border-radius: 50%;\n      filter: drop-shadow(0 0 8px rgba(212,242,123,.75));\n      animation: tv-spin 4s linear infinite;\n    }\n    .tv-bounce__shadow {\n      position: absolute;\n      bottom: 16%;\n      width: 36%;\n      height: 18px;\n      border-radius: 50%;\n      background: rgba(0,0,0,.38);\n      filter: blur(9px);\n      animation: tv-shadow 2.1s ease-in-out infinite;\n    }\n    .tv-bounce__tag {\n      position: absolute;\n      z-index: 2;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      padding: 9px 12px;\n      border: 1px solid rgba(255,255,255,.17);\n      border-radius: 999px;\n      background: rgba(10,30,23,.74);\n      color: #fffefa;\n      font-size: 10px;\n      font-weight: 800;\n      letter-spacing: .12em;\n      text-transform: uppercase;\n      backdrop-filter: blur(8px);\n    }\n    .tv-bounce__tag:before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--tv-lime); }\n    .tv-bounce__tag--one { top: 17%; right: 4%; }\n    .tv-bounce__tag--two { bottom: 19%; left: 0; }\n    .tv-bounce__stage.is-paused .tv-bounce__ball-wrap,\n    .tv-bounce__stage.is-paused .tv-bounce__led,\n    .tv-bounce__stage.is-paused .tv-bounce__shadow { animation-play-state: paused; }\n    @keyframes tv-bob { 0%,100% { transform: translateY(2px) rotate(-5deg); } 50% { transform: translateY(-16px) rotate(5deg); } }\n    @keyframes tv-shadow { 0%,100% { transform: scale(1); opacity: .7; } 50% { transform: scale(.76); opacity: .42; } }\n    @keyframes tv-spin { to { transform: rotate(360deg); } }\n    .tv-bounce__strip {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 16px;\n      padding: 17px clamp(24px, 6vw, 76px);\n      border-bottom: 1px solid rgba(22,55,45,.12);\n      background: #e9eddf;\n      color: var(--tv-ink);\n      font-size: 11px;\n      font-weight: 800;\n      letter-spacing: .14em;\n      text-transform: uppercase;\n    }\n    .tv-bounce__strip span { display: inline-flex; align-items: center; gap: 10px; }\n    .tv-bounce__strip span:before { content: \"✳\"; color: #668247; font-size: 16px; }\n    .tv-bounce__body { padding: clamp(34px, 6vw, 74px); }\n    .tv-bounce__section-head {\n      display: flex;\n      justify-content: space-between;\n      align-items: end;\n      gap: 20px;\n      margin-bottom: 28px;\n    }\n    .tv-bounce__section-head .tv-bounce__eyebrow { margin-bottom: 12px; color: #64814a; }\n    .tv-bounce__section-head h3 {\n      max-width: 600px;\n      margin-bottom: 0;\n      color: var(--tv-ink);\n      font-size: clamp(30px, 4vw, 48px);\n      letter-spacing: -.055em;\n      line-height: 1.03;\n    }\n    .tv-bounce__section-note { max-width: 250px; margin: 0; color: var(--tv-muted); font-size: 13px; line-height: 1.6; }\n    .tv-bounce__features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }\n    .tv-bounce__feature {\n      position: relative;\n      min-height: 195px;\n      padding: 23px;\n      border: 1px solid rgba(22,55,45,.12);\n      border-radius: 19px;\n      background: var(--tv-paper);\n      transition: transform .2s ease, box-shadow .2s ease;\n    }\n    .tv-bounce__feature:hover { transform: translateY(-4px); box-shadow: 0 16px 32px rgba(22,55,45,.08); }\n    .tv-bounce__number { display: block; margin-bottom: 24px; color: #76905c; font-size: 11px; font-weight: 800; letter-spacing: .15em; }\n    .tv-bounce__feature h4 { margin: 0 0 9px; color: var(--tv-ink); font-size: 19px; letter-spacing: -.03em; }\n    .tv-bounce__feature p { margin: 0; color: var(--tv-muted); font-size: 13px; line-height: 1.65; }\n    .tv-bounce__how {\n      display: grid;\n      grid-template-columns: .8fr 1.2fr;\n      gap: clamp(28px, 5vw, 66px);\n      margin-top: clamp(42px, 7vw, 80px);\n      padding: clamp(24px, 4vw, 42px);\n      border-radius: 23px;\n      background: #e8eddf;\n    }\n    .tv-bounce__how-title h3 { margin: 0 0 12px; font-size: clamp(28px, 3vw, 39px); letter-spacing: -.055em; line-height: 1.03; }\n    .tv-bounce__how-title p { margin: 0; color: var(--tv-muted); font-size: 13px; line-height: 1.65; }\n    .tv-bounce__steps { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; counter-reset: tv-step; }\n    .tv-bounce__steps li { display: grid; grid-template-columns: 37px 1fr; align-items: center; gap: 13px; padding: 13px 0; border-bottom: 1px solid rgba(22,55,45,.12); color: var(--tv-ink); font-size: 14px; line-height: 1.5; counter-increment: tv-step; }\n    .tv-bounce__steps li:last-child { border-bottom: 0; padding-bottom: 0; }\n    .tv-bounce__steps li:before { content: \"0\" counter(tv-step); display: grid; width: 34px; height: 34px; place-items: center; border-radius: 50%; background: var(--tv-ink); color: var(--tv-lime); font-size: 10px; font-weight: 800; }\n    .tv-bounce__safety { display: flex; gap: 15px; align-items: flex-start; margin-top: 14px; padding: 20px 22px; border: 1px solid rgba(255,146,126,.45); border-radius: 17px; background: #fff7f3; }\n    .tv-bounce__safety-mark { display: grid; flex: 0 0 30px; width: 30px; height: 30px; place-items: center; border-radius: 50%; background: var(--tv-coral); color: #3d201b; font-size: 15px; font-weight: 900; }\n    .tv-bounce__safety strong { display: block; margin-bottom: 4px; color: #542d25; font-size: 13px; }\n    .tv-bounce__safety p { margin: 0; color: #73564e; font-size: 12px; line-height: 1.6; }\n    .tv-bounce__faq { display: grid; grid-template-columns: .7fr 1.3fr; gap: clamp(28px, 5vw, 66px); margin-top: clamp(44px, 7vw, 82px); }\n    .tv-bounce__faq-intro h3 { margin: 0 0 12px; font-size: clamp(30px, 4vw, 46px); letter-spacing: -.055em; line-height: 1.02; }\n    .tv-bounce__faq-intro p { margin: 0; color: var(--tv-muted); font-size: 13px; line-height: 1.65; }\n    .tv-bounce__questions { border-top: 1px solid rgba(22,55,45,.18); }\n    .tv-bounce__questions details { border-bottom: 1px solid rgba(22,55,45,.18); }\n    .tv-bounce__questions summary { position: relative; padding: 18px 42px 18px 0; color: var(--tv-ink); font-size: 14px; font-weight: 750; list-style: none; cursor: pointer; }\n    .tv-bounce__questions summary::-webkit-details-marker { display: none; }\n    .tv-bounce__questions summary:after { content: \"+\"; position: absolute; top: 50%; right: 4px; display: grid; width: 25px; height: 25px; place-items: center; transform: translateY(-50%); border: 1px solid rgba(22,55,45,.24); border-radius: 50%; color: #64814a; font-size: 18px; font-weight: 400; transition: transform .2s ease; }\n    .tv-bounce__questions details[open] summary:after { content: \"−\"; transform: translateY(-50%) rotate(180deg); }\n    .tv-bounce__answer { max-width: 620px; padding: 0 30px 18px 0; color: var(--tv-muted); font-size: 13px; line-height: 1.7; }\n    .tv-bounce__footer { display: flex; justify-content: space-between; align-items: center; gap: 22px; margin-top: clamp(34px, 5vw, 58px); padding-top: 22px; border-top: 1px solid rgba(22,55,45,.12); }\n    .tv-bounce__footer p { margin: 0; color: var(--tv-muted); font-size: 11px; letter-spacing: .04em; }\n    @media (max-width: 760px) {\n      .tv-bounce { border-radius: 20px; }\n      .tv-bounce__hero { grid-template-columns: 1fr; gap: 28px; min-height: 0; padding: 34px 25px 25px; }\n      .tv-bounce__title { font-size: clamp(44px, 13vw, 68px); }\n      .tv-bounce__stage { min-height: 285px; margin: 0 7px 8px; }\n      .tv-bounce__ball-wrap { width: 175px; }\n      .tv-bounce__tag--one { right: 1%; }\n      .tv-bounce__tag--two { left: 1%; }\n      .tv-bounce__strip { justify-content: flex-start; overflow: auto; white-space: nowrap; padding: 15px 23px; }\n      .tv-bounce__body { padding: 35px 23px; }\n      .tv-bounce__section-head { display: block; }\n      .tv-bounce__section-note { margin-top: 13px; }\n      .tv-bounce__features { grid-template-columns: 1fr; }\n      .tv-bounce__feature { min-height: 0; }\n      .tv-bounce__number { margin-bottom: 15px; }\n      .tv-bounce__how, .tv-bounce__faq { grid-template-columns: 1fr; }\n      .tv-bounce__how { gap: 22px; }\n      .tv-bounce__footer { align-items: flex-start; flex-direction: column; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .tv-bounce *, .tv-bounce *:before, .tv-bounce *:after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }\n    }\n  \u003c\/style\u003e\n\u003csection class=\"tv-bounce\"\u003e\n\u003cdiv class=\"tv-bounce__hero\"\u003e\n\u003cdiv class=\"tv-bounce__copy\"\u003e\n\u003cp class=\"tv-bounce__eyebrow\"\u003eTailVale · smart bounce ball\u003c\/p\u003e\n\u003ch2 class=\"tv-bounce__title\" id=\"tv-bounce-title\"\u003ePlay has a new \u003cem\u003epulse.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp class=\"tv-bounce__intro\"\u003eMake everyday play a little more exciting. The TailVale Smart Bounce Ball moves and bounces on its own, while a colourful LED ring invites your dog to follow the fun.\u003c\/p\u003e\n\u003cdiv class=\"tv-bounce__actions\"\u003e\n\u003ca class=\"tv-bounce__button\" href=\"#tv-play-details\"\u003eSee how play begins \u003cspan\u003e ↘\u003c\/span\u003e\u003c\/a\u003e \u003cbutton class=\"tv-bounce__button tv-bounce__button--quiet\" type=\"button\" data-tv-motion-toggle=\"\"\u003ePause the motion\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cp class=\"tv-bounce__micro\"\u003eA little chase. A little curiosity. Repeat.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__stage\" data-tv-stage=\"\" role=\"img\"\u003e\n\u003cdiv class=\"tv-bounce__orbit\"\u003e\n\u003cspan class=\"tv-bounce__dot\"\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cspan class=\"tv-bounce__tag tv-bounce__tag--one\"\u003eColour-changing glow\u003c\/span\u003e \u003cspan class=\"tv-bounce__tag tv-bounce__tag--two\"\u003eChase · paw · play\u003c\/span\u003e\n\u003cdiv class=\"tv-bounce__ball-wrap\"\u003e\n\u003cdiv class=\"tv-bounce__ball\"\u003e\n\u003cspan class=\"tv-bounce__led\"\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cspan class=\"tv-bounce__shadow\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__strip\"\u003e\n\u003cspan\u003eSelf-moving play\u003c\/span\u003e\u003cspan\u003eColourful LED ring\u003c\/span\u003e\u003cspan\u003eRechargeable\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__body\" id=\"tv-play-details\"\u003e\n\u003cdiv class=\"tv-bounce__section-head\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"tv-bounce__eyebrow\"\u003eA new reason to get moving\u003c\/p\u003e\n\u003ch3\u003eMade for curious noses and quick paws.\u003c\/h3\u003e\n\u003c\/div\u003e\n\u003cp class=\"tv-bounce__section-note\"\u003eA playful moving target that gives your dog something bright and lively to discover.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__features\"\u003e\n\u003carticle class=\"tv-bounce__feature\"\u003e\u003cspan class=\"tv-bounce__number\"\u003e01 \/ MOVEMENT\u003c\/span\u003e\n\u003ch4\u003eOn-the-go action\u003c\/h4\u003e\n\u003cp\u003eThe ball moves and bounces on its own to create a playful chase target.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"tv-bounce__feature\"\u003e\u003cspan class=\"tv-bounce__number\"\u003e02 \/ LIGHT\u003c\/span\u003e\n\u003ch4\u003eA flash of colour\u003c\/h4\u003e\n\u003cp\u003eA colour-changing LED ring adds a bright visual cue during play.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"tv-bounce__feature\"\u003e\u003cspan class=\"tv-bounce__number\"\u003e03 \/ RECHARGE\u003c\/span\u003e\n\u003ch4\u003eReady for another round\u003c\/h4\u003e\n\u003cp\u003eIts rechargeable design makes it easy to bring back for another play session.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__how\"\u003e\n\u003cdiv class=\"tv-bounce__how-title\"\u003e\n\u003cp class=\"tv-bounce__eyebrow\"\u003eStart at their speed\u003c\/p\u003e\n\u003ch3\u003eFirst, let them get curious.\u003c\/h3\u003e\n\u003cp\u003eGive your dog a moment to watch, sniff and approach the ball in their own time.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003col class=\"tv-bounce__steps\"\u003e\n\u003cli\u003eCharge the ball as directed.\u003c\/li\u003e\n\u003cli\u003eSwitch it on and let your dog discover its movement at their own pace.\u003c\/li\u003e\n\u003cli\u003eBegin with a short, supervised play session.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__safety\"\u003e\n\u003cspan class=\"tv-bounce__safety-mark\"\u003e!\u003c\/span\u003e\n\u003cdiv\u003e\n\u003cstrong\u003ePlay safely\u003c\/strong\u003e\n\u003cp\u003eThis is an interactive play toy, not a chew toy. Supervise your pet and remove the ball if it becomes damaged.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__faq\" id=\"tv-ball-faq\"\u003e\n\u003cdiv class=\"tv-bounce__faq-intro\"\u003e\n\u003cp class=\"tv-bounce__eyebrow\"\u003eGood to know\u003c\/p\u003e\n\u003ch3\u003eQuick answers for pet parents.\u003c\/h3\u003e\n\u003cp\u003eTap a question to open the answer.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__questions\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow does the Smart Bounce Ball move?\u003c\/summary\u003e\n\u003cdiv class=\"tv-bounce__answer\"\u003eIt moves and bounces on its own, creating a lively target for your dog to chase and paw at.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat does the LED ring do?\u003c\/summary\u003e\n\u003cdiv class=\"tv-bounce__answer\"\u003eThe LED ring changes colour and adds a bright visual cue during play.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIs the ball rechargeable?\u003c\/summary\u003e\n\u003cdiv class=\"tv-bounce__answer\"\u003eYes. Charge it as directed so it is ready for another play session.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow should I introduce it to my dog?\u003c\/summary\u003e\n\u003cdiv class=\"tv-bounce__answer\"\u003eSwitch it on and give your dog time to discover the movement at their own pace. Start with a short, supervised session.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCan my dog chew on it?\u003c\/summary\u003e\n\u003cdiv class=\"tv-bounce__answer\"\u003eNo. It is an interactive play toy, not a chew toy. Supervise play and remove the ball if it becomes damaged.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-bounce__footer\"\u003e\n\u003cp\u003eTAILVALE · SMALL MOMENTS, BIG TAIL WAGS\u003c\/p\u003e\n\u003ca class=\"tv-bounce__button\" href=\"#tv-bounce-title\"\u003eBack to the top ↑\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n    (function () {\n      var root = document.currentScript \u0026\u0026 document.currentScript.closest('.tv-bounce');\n      if (!root) return;\n      var stage = root.querySelector('[data-tv-stage]');\n      var toggle = root.querySelector('[data-tv-motion-toggle]');\n      if (!stage || !toggle) return;\n      toggle.addEventListener('click', function () {\n        var paused = stage.classList.toggle('is-paused');\n        toggle.setAttribute('aria-pressed', String(paused));\n        toggle.textContent = paused ? 'Play the motion' : 'Pause the motion';\n      });\n    })();\n  \u003c\/script\u003e\u003c\/section\u003e","brand":"TailVale","offers":[{"title":"Blue \/ Single ball","offer_id":67578039501042,"sku":null,"price":649.0,"currency_code":"ZAR","in_stock":true},{"title":"Blue \/ 2-ball pack","offer_id":67578039533810,"sku":null,"price":1099.0,"currency_code":"ZAR","in_stock":true},{"title":"Blue \/ 3-ball pack","offer_id":67578039566578,"sku":null,"price":1449.0,"currency_code":"ZAR","in_stock":true},{"title":"Black \/ Single ball","offer_id":67578039599346,"sku":null,"price":649.0,"currency_code":"ZAR","in_stock":true},{"title":"Black \/ 2-ball pack","offer_id":67578039632114,"sku":null,"price":1099.0,"currency_code":"ZAR","in_stock":true},{"title":"Black \/ 3-ball pack","offer_id":67578039664882,"sku":null,"price":1449.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0856\/3143\/4994\/files\/Black_Ball_2.jpg?v=1790582528"},{"product_id":"mist-groom-brush","title":"3-in-1 Mist \u0026 Groom Brush","description":"\u003c!-- TailVale 3-in-1 Mist \u0026 Groom Brush | Paste into a Shopify Custom Liquid block --\u003e\n\u003cstyle\u003e\n    .tvgroom {\n      --tg-ink: #49343a;\n      --tg-plum: #79515e;\n      --tg-rose: #c9787b;\n      --tg-peach: #f1c1ad;\n      --tg-cream: #fffaf6;\n      --tg-paper: #fffefd;\n      --tg-muted: #806f70;\n      --tg-line: #ead8d1;\n      color: var(--tg-ink);\n      background: var(--tg-cream);\n      border: 1px solid rgba(121,81,94,.11);\n      border-radius: 30px;\n      overflow: hidden;\n      font-family: inherit;\n      margin: 24px auto;\n      max-width: 1180px;\n      box-shadow: 0 24px 70px rgba(97,61,62,.09);\n      isolation: isolate;\n    }\n    .tvgroom * { box-sizing: border-box; }\n    .tvgroom a { color: inherit; }\n    .tvgroom h2, .tvgroom h3, .tvgroom p { margin-top: 0; }\n    .tvgroom__hero {\n      position: relative;\n      display: grid;\n      grid-template-columns: minmax(0,1.02fr) minmax(300px,.98fr);\n      align-items: center;\n      gap: clamp(28px,5vw,66px);\n      min-height: 490px;\n      padding: clamp(30px,6vw,74px);\n      background: linear-gradient(125deg,#fff4ed 0%,#f9e4dc 50%,#f3dadd 100%);\n      overflow: hidden;\n    }\n    .tvgroom__hero:after {\n      content: \"\";\n      position: absolute;\n      width: 330px;\n      height: 330px;\n      left: -210px;\n      bottom: -225px;\n      border: 1px solid rgba(121,81,94,.14);\n      border-radius: 50%;\n      box-shadow: 0 0 0 28px rgba(121,81,94,.035),0 0 0 58px rgba(121,81,94,.025);\n      pointer-events: none;\n    }\n    .tvgroom__copy { position: relative; z-index: 1; max-width: 590px; }\n    .tvgroom__eyebrow {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      margin: 0 0 21px;\n      color: var(--tg-plum);\n      font-size: 10px;\n      font-weight: 800;\n      letter-spacing: .2em;\n      text-transform: uppercase;\n    }\n    .tvgroom__eyebrow:before { content: \"\"; width: 23px; height: 1px; background: currentColor; }\n    .tvgroom__title {\n      max-width: 610px;\n      margin-bottom: 20px;\n      font-size: clamp(42px,6vw,76px);\n      font-weight: 750;\n      letter-spacing: -.065em;\n      line-height: .98;\n      text-wrap: balance;\n    }\n    .tvgroom__title em { color: var(--tg-rose); font-family: Georgia,serif; font-weight: 400; }\n    .tvgroom__intro {\n      max-width: 510px;\n      margin-bottom: 28px;\n      color: #766366;\n      font-size: clamp(15px,1.5vw,18px);\n      line-height: 1.75;\n    }\n    .tvgroom__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 11px; }\n    .tvgroom__button {\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      min-height: 48px;\n      padding: 0 19px;\n      border: 1px solid transparent;\n      border-radius: 999px;\n      background: var(--tg-plum);\n      color: #fffaf6 !important;\n      font-size: 13px;\n      font-weight: 800;\n      text-decoration: none;\n      transition: transform .2s ease,background .2s ease,box-shadow .2s ease;\n      cursor: pointer;\n    }\n    .tvgroom__button:hover { transform: translateY(-2px); background: #68424f; box-shadow: 0 8px 18px rgba(121,81,94,.18); }\n    .tvgroom__button--quiet { border-color: rgba(121,81,94,.28); background: transparent; color: var(--tg-plum) !important; }\n    .tvgroom__button--quiet:hover { background: rgba(255,255,255,.55); }\n    .tvgroom__micro { margin: 17px 0 0; color: #9a8180; font-size: 10px; letter-spacing: .13em; text-transform: uppercase; }\n    .tvgroom__stage {\n      position: relative;\n      display: grid;\n      min-height: 370px;\n      place-items: center;\n      overflow: hidden;\n      border: 1px solid rgba(121,81,94,.13);\n      border-radius: 46% 46% 38% 38% \/ 40% 40% 50% 50%;\n      background:\n        radial-gradient(ellipse at 52% 58%,rgba(255,255,255,.88),transparent 57%),\n        linear-gradient(145deg,rgba(255,250,246,.74),rgba(240,211,207,.55));\n      box-shadow: inset 0 0 55px rgba(255,255,255,.42);\n    }\n    .tvgroom__halo {\n      position: absolute;\n      width: min(82%,320px);\n      aspect-ratio: 1;\n      border: 1px solid rgba(121,81,94,.19);\n      border-radius: 50%;\n      transform: rotate(-25deg) scaleY(.5);\n    }\n    .tvgroom__halo:before,.tvgroom__halo:after {\n      content: \"\";\n      position: absolute;\n      inset: -23px;\n      border: 1px solid rgba(121,81,94,.11);\n      border-radius: 50%;\n    }\n    .tvgroom__halo:after { inset: -48px; border-color: rgba(121,81,94,.07); }\n    .tvgroom__spark {\n      position: absolute;\n      top: 14%;\n      left: 15%;\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: #d78d8b;\n      box-shadow: 0 0 14px rgba(201,120,123,.65);\n    }\n    .tvgroom__brush {\n      position: relative;\n      z-index: 1;\n      width: min(100%,320px);\n      height: 330px;\n    }\n    .tvgroom__handle {\n      position: absolute;\n      z-index: 1;\n      top: 137px;\n      left: 59%;\n      width: 25%;\n      height: 190px;\n      border: 1px solid rgba(255,255,255,.76);\n      border-radius: 22px 24px 42px 42px;\n      transform: rotate(-5deg);\n      transform-origin: top center;\n      background: linear-gradient(90deg,#d9947f 0%,#f3c3ad 24%,#ffe4d2 53%,#e7a991 100%);\n      box-shadow: inset 5px 0 10px rgba(255,255,255,.55),inset -7px 0 12px rgba(111,58,43,.13),0 18px 28px rgba(102,64,57,.18);\n    }\n    .tvgroom__groove {\n      position: absolute;\n      top: 66px;\n      left: 20%;\n      width: 27%;\n      height: 112px;\n      border: 2px solid rgba(255,247,239,.9);\n      border-radius: 999px;\n      background: linear-gradient(90deg,rgba(156,82,61,.31),rgba(255,241,229,.25));\n      box-shadow: inset 2px 1px 4px rgba(115,58,44,.2),0 0 0 2px rgba(208,143,122,.25);\n    }\n    .tvgroom__usb {\n      position: absolute;\n      top: 44px;\n      left: 24%;\n      width: 38%;\n      height: 13px;\n      border: 3px solid #edbaa6;\n      border-radius: 999px;\n      background: #47352f;\n      box-shadow: 0 0 0 3px rgba(255,248,241,.76);\n    }\n    .tvgroom__hole {\n      position: absolute;\n      right: 19%;\n      bottom: 17px;\n      width: 16px;\n      height: 16px;\n      border-radius: 50%;\n      background: radial-gradient(circle at 40% 35%,#704c40 0 3px,#c7836c 4px 7px,#ffe2d2 8px);\n    }\n    .tvgroom__head {\n      position: absolute;\n      z-index: 2;\n      top: 9px;\n      left: 0;\n      width: 95%;\n      height: 174px;\n      border: 2px solid rgba(255,255,255,.8);\n      border-radius: 62px 62px 48px 48px;\n      background: linear-gradient(145deg,#fff0e6 0%,#f6cdb8 57%,#df9d85 100%);\n      box-shadow: inset 6px 7px 13px rgba(255,255,255,.76),inset -10px -11px 17px rgba(119,63,47,.13),0 22px 34px rgba(102,64,57,.2);\n    }\n    .tvgroom__head:before,.tvgroom__head:after {\n      content: \"\";\n      position: absolute;\n      top: 24px;\n      bottom: 18px;\n      width: 42%;\n      border: 1px solid rgba(148,85,67,.36);\n      background:\n        radial-gradient(circle,rgba(255,250,241,.98) 0 1.4px,transparent 1.9px) 3px 4px\/10px 13px,\n        repeating-linear-gradient(90deg,rgba(145,80,62,.58) 0 2px,rgba(255,232,216,.18) 2px 8px,transparent 8px 13px),\n        linear-gradient(135deg,#f0b49d,#e4a087);\n      box-shadow: inset 2px 2px 4px rgba(255,255,255,.42),inset -2px -2px 5px rgba(125,67,50,.15);\n    }\n    .tvgroom__head:before { left: 12px; border-radius: 40px 27px 25px 40px; }\n    .tvgroom__head:after { right: 12px; border-radius: 27px 40px 40px 25px; }\n    .tvgroom__port {\n      position: absolute;\n      z-index: 3;\n      top: 30px;\n      left: 50%;\n      width: 27px;\n      height: 38px;\n      transform: translateX(-50%);\n      border: 6px solid #e8b09b;\n      border-radius: 50%;\n      background: linear-gradient(135deg,#40342e,#a5a3a0);\n      box-shadow: 0 1px 4px rgba(87,50,39,.35);\n    }\n    .tvgroom__nozzle {\n      position: absolute;\n      z-index: 3;\n      top: 105px;\n      left: 50%;\n      width: 19px;\n      height: 19px;\n      transform: translateX(-50%);\n      border: 4px solid #e6aa93;\n      border-radius: 50%;\n      background: #8b5947;\n      box-shadow: 0 0 0 2px rgba(255,232,216,.6);\n    }\n    .tvgroom__screw {\n      position: absolute;\n      z-index: 3;\n      top: 21px;\n      width: 12px;\n      height: 12px;\n      border-radius: 50%;\n      background: radial-gradient(circle at 40% 35%,#7e4737 0 3px,#c7836c 4px 6px,#ffe2d2 7px);\n    }\n    .tvgroom__screw--left { left: 29px; }\n    .tvgroom__screw--right { right: 29px; }\n    .tvgroom__spray {\n      position: absolute;\n      z-index: 4;\n      top: 122px;\n      left: 47.5%;\n      width: 1px;\n      height: 1px;\n      opacity: 0;\n      pointer-events: none;\n      transition: opacity .25s ease;\n    }\n    .tvgroom__spray:before {\n      content: \"\";\n      position: absolute;\n      left: -84px;\n      top: -28px;\n      width: 168px;\n      height: 104px;\n      border-radius: 50%;\n      background: radial-gradient(ellipse at 50% 50%,rgba(255,255,255,.78),rgba(255,255,255,.36) 38%,transparent 72%);\n      filter: blur(8px);\n      animation: tg-cloud 1.8s ease-out infinite;\n    }\n    .tvgroom__droplet {\n      position: absolute;\n      display: block;\n      top: 0;\n      left: 0;\n      width: 7px;\n      height: 10px;\n      border-radius: 70% 30% 70% 70%;\n      background: linear-gradient(145deg,#fff 0%,#fff 38%,#eccac4 100%);\n      box-shadow: 0 0 7px rgba(255,255,255,.9);\n      opacity: 0;\n      animation: tg-droplet 1.65s ease-out infinite;\n    }\n    .tvgroom__droplet--a { --tg-x: -62px; --tg-y: -34px; animation-delay: 0s; }\n    .tvgroom__droplet--b { --tg-x: -38px; --tg-y: -57px; animation-delay: .22s; }\n    .tvgroom__droplet--c { --tg-x: -12px; --tg-y: -66px; animation-delay: .43s; }\n    .tvgroom__droplet--d { --tg-x: 19px; --tg-y: -61px; animation-delay: .12s; }\n    .tvgroom__droplet--e { --tg-x: 47px; --tg-y: -46px; animation-delay: .35s; }\n    .tvgroom__droplet--f { --tg-x: 67px; --tg-y: -22px; animation-delay: .56s; }\n    .tvgroom__tag {\n      position: absolute;\n      z-index: 4;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      padding: 9px 12px;\n      border: 1px solid rgba(121,81,94,.15);\n      border-radius: 999px;\n      background: rgba(255,253,250,.88);\n      color: var(--tg-plum);\n      font-size: 10px;\n      font-weight: 800;\n      letter-spacing: .1em;\n      text-transform: uppercase;\n      box-shadow: 0 8px 20px rgba(121,81,94,.08);\n      backdrop-filter: blur(8px);\n    }\n    .tvgroom__tag:before { content: \"\"; width: 6px; height: 6px; border-radius: 50%; background: var(--tg-rose); }\n    .tvgroom__tag--one { top: 17%; right: 3%; }\n    .tvgroom__tag--two { bottom: 17%; left: 1%; }\n    .tvgroom__stage.is-spraying .tvgroom__spray { opacity: 1; }\n    .tvgroom__stage:not(.is-spraying) .tvgroom__spray:before,\n    .tvgroom__stage:not(.is-spraying) .tvgroom__droplet { animation-play-state: paused; }\n    @keyframes tg-cloud {\n      0% { opacity: .15; transform: scale(.62) translateY(9px); }\n      45% { opacity: .78; transform: scale(1) translateY(0); }\n      100% { opacity: 0; transform: scale(1.22) translateY(-12px); }\n    }\n    @keyframes tg-droplet {\n      0%,8% { opacity: 0; transform: translate(0,0) rotate(-45deg) scale(.35); }\n      22% { opacity: .95; }\n      100% { opacity: 0; transform: translate(var(--tg-x),var(--tg-y)) rotate(-45deg) scale(.8); }\n    }\n    .tvgroom__ribbon {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 16px;\n      padding: 17px clamp(24px,6vw,74px);\n      border-bottom: 1px solid var(--tg-line);\n      background: #f6e7e1;\n      color: var(--tg-plum);\n      font-size: 10px;\n      font-weight: 800;\n      letter-spacing: .16em;\n      text-transform: uppercase;\n    }\n    .tvgroom__ribbon span { display: inline-flex; align-items: center; gap: 9px; }\n    .tvgroom__ribbon span:before { content: \"✳\"; color: var(--tg-rose); font-size: 15px; }\n    .tvgroom__body { padding: clamp(34px,6vw,72px); }\n    .tvgroom__section-head { display: flex; justify-content: space-between; align-items: end; gap: 22px; margin-bottom: 27px; }\n    .tvgroom__section-head .tvgroom__eyebrow { margin-bottom: 11px; color: var(--tg-rose); }\n    .tvgroom__section-head h3 { max-width: 620px; margin-bottom: 0; font-size: clamp(30px,4vw,47px); letter-spacing: -.055em; line-height: 1.04; }\n    .tvgroom__section-note { max-width: 255px; margin: 0; color: var(--tg-muted); font-size: 13px; line-height: 1.65; }\n    .tvgroom__features { display: grid; grid-template-columns: repeat(3,1fr); gap: 13px; }\n    .tvgroom__feature {\n      min-height: 190px;\n      padding: 23px;\n      border: 1px solid var(--tg-line);\n      border-radius: 20px;\n      background: var(--tg-paper);\n      box-shadow: 0 9px 24px rgba(97,61,62,.035);\n      transition: transform .2s ease,box-shadow .2s ease;\n    }\n    .tvgroom__feature:hover { transform: translateY(-4px); box-shadow: 0 16px 30px rgba(97,61,62,.09); }\n    .tvgroom__number { display: block; margin-bottom: 24px; color: var(--tg-rose); font-size: 10px; font-weight: 800; letter-spacing: .16em; }\n    .tvgroom__feature h4 { margin: 0 0 9px; color: var(--tg-ink); font-size: 19px; letter-spacing: -.03em; }\n    .tvgroom__feature p { margin: 0; color: var(--tg-muted); font-size: 13px; line-height: 1.7; }\n    .tvgroom__how {\n      display: grid;\n      grid-template-columns: .8fr 1.2fr;\n      gap: clamp(26px,5vw,62px);\n      margin-top: clamp(42px,7vw,76px);\n      padding: clamp(24px,4vw,42px);\n      border: 1px solid rgba(201,120,123,.18);\n      border-radius: 24px;\n      background: linear-gradient(125deg,#f8e9e2,#fbf2ed);\n    }\n    .tvgroom__how-title h3 { margin: 0 0 12px; font-size: clamp(28px,3vw,38px); letter-spacing: -.055em; line-height: 1.04; }\n    .tvgroom__how-title p { margin: 0; color: var(--tg-muted); font-size: 13px; line-height: 1.7; }\n    .tvgroom__steps { display: grid; gap: 9px; margin: 0; padding: 0; list-style: none; counter-reset: tg-step; }\n    .tvgroom__steps li {\n      display: grid;\n      grid-template-columns: 38px 1fr;\n      align-items: center;\n      gap: 13px;\n      padding: 13px 0;\n      border-bottom: 1px solid rgba(121,81,94,.12);\n      color: var(--tg-ink);\n      font-size: 14px;\n      line-height: 1.55;\n      counter-increment: tg-step;\n    }\n    .tvgroom__steps li:last-child { border: 0; padding-bottom: 0; }\n    .tvgroom__steps li:before {\n      content: \"0\" counter(tg-step);\n      display: grid;\n      width: 35px;\n      height: 35px;\n      place-items: center;\n      border: 1px solid rgba(121,81,94,.18);\n      border-radius: 50%;\n      background: #fffaf6;\n      color: var(--tg-plum);\n      font-size: 10px;\n      font-weight: 800;\n    }\n    .tvgroom__care {\n      display: flex;\n      gap: 14px;\n      align-items: flex-start;\n      margin-top: 14px;\n      padding: 19px 21px;\n      border: 1px solid rgba(201,120,123,.25);\n      border-radius: 18px;\n      background: #fff4f1;\n    }\n    .tvgroom__care-mark {\n      display: grid;\n      flex: 0 0 30px;\n      width: 30px;\n      height: 30px;\n      place-items: center;\n      border-radius: 50%;\n      background: #f1d0c7;\n      color: #70464f;\n      font-size: 14px;\n      font-weight: 900;\n    }\n    .tvgroom__care strong { display: block; margin-bottom: 4px; color: #70464f; font-size: 13px; }\n    .tvgroom__care p { margin: 0; color: #80686b; font-size: 12px; line-height: 1.65; }\n    .tvgroom__faq { display: grid; grid-template-columns: .72fr 1.28fr; gap: clamp(28px,5vw,64px); margin-top: clamp(44px,7vw,80px); }\n    .tvgroom__faq-intro h3 { margin: 0 0 12px; font-size: clamp(30px,4vw,45px); letter-spacing: -.055em; line-height: 1.03; }\n    .tvgroom__faq-intro p { margin: 0; color: var(--tg-muted); font-size: 13px; line-height: 1.65; }\n    .tvgroom__questions { border-top: 1px solid var(--tg-line); }\n    .tvgroom__questions details { border-bottom: 1px solid var(--tg-line); }\n    .tvgroom__questions summary {\n      position: relative;\n      padding: 18px 42px 18px 0;\n      color: var(--tg-ink);\n      font-size: 14px;\n      font-weight: 750;\n      list-style: none;\n      cursor: pointer;\n    }\n    .tvgroom__questions summary::-webkit-details-marker { display: none; }\n    .tvgroom__questions summary:after {\n      content: \"+\";\n      position: absolute;\n      top: 50%;\n      right: 4px;\n      display: grid;\n      width: 26px;\n      height: 26px;\n      place-items: center;\n      transform: translateY(-50%);\n      border: 1px solid rgba(121,81,94,.22);\n      border-radius: 50%;\n      color: var(--tg-rose);\n      font-size: 18px;\n      font-weight: 400;\n      transition: transform .2s ease;\n    }\n    .tvgroom__questions details[open] summary:after { content: \"−\"; transform: translateY(-50%) rotate(180deg); }\n    .tvgroom__answer { max-width: 620px; padding: 0 30px 18px 0; color: var(--tg-muted); font-size: 13px; line-height: 1.7; }\n    .tvgroom__footer {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 22px;\n      margin-top: clamp(34px,5vw,56px);\n      padding-top: 21px;\n      border-top: 1px solid var(--tg-line);\n    }\n    .tvgroom__footer p { margin: 0; color: #9a8180; font-size: 10px; letter-spacing: .08em; }\n    @media (max-width: 760px) {\n      .tvgroom { border-radius: 21px; }\n      .tvgroom__hero { grid-template-columns: 1fr; gap: 25px; min-height: 0; padding: 34px 24px 24px; }\n      .tvgroom__title { font-size: clamp(44px,13vw,67px); }\n      .tvgroom__stage { min-height: 330px; margin: 0 4px 6px; }\n      .tvgroom__brush { width: min(100%,300px); }\n      .tvgroom__tag--one { right: 1%; }\n      .tvgroom__tag--two { left: 1%; }\n      .tvgroom__ribbon { justify-content: flex-start; overflow: auto; white-space: nowrap; padding: 15px 22px; }\n      .tvgroom__body { padding: 35px 22px; }\n      .tvgroom__section-head { display: block; }\n      .tvgroom__section-note { margin-top: 12px; }\n      .tvgroom__features { grid-template-columns: 1fr; }\n      .tvgroom__feature { min-height: 0; }\n      .tvgroom__number { margin-bottom: 15px; }\n      .tvgroom__how,.tvgroom__faq { grid-template-columns: 1fr; }\n      .tvgroom__how { gap: 21px; }\n      .tvgroom__footer { align-items: flex-start; flex-direction: column; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .tvgroom *, .tvgroom *:before, .tvgroom *:after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }\n    }\n  \u003c\/style\u003e\n\u003csection class=\"tvgroom\"\u003e\n\u003cdiv class=\"tvgroom__hero\"\u003e\n\u003cdiv class=\"tvgroom__copy\"\u003e\n\u003cp class=\"tvgroom__eyebrow\"\u003eTailVale · a gentler grooming ritual\u003c\/p\u003e\n\u003ch2 class=\"tvgroom__title\" id=\"tvgroom-title\"\u003eMake grooming feel \u003cem\u003esofter.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp class=\"tvgroom__intro\"\u003eThe TailVale 3-in-1 Mist \u0026amp; Groom Brush brings brushing, loose-fur pickup and a fine water mist together in one handy tool. Its light mist helps settle flyaway fur as you brush.\u003c\/p\u003e\n\u003cdiv class=\"tvgroom__actions\"\u003e\n\u003ca class=\"tvgroom__button\" href=\"#tvgroom-details\"\u003eExplore the routine \u003cspan\u003e ↘\u003c\/span\u003e\u003c\/a\u003e \u003cbutton class=\"tvgroom__button tvgroom__button--quiet\" type=\"button\" data-tvgroom-toggle=\"\"\u003ePause the mist\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cp class=\"tvgroom__micro\"\u003eBrush gently · mist lightly · follow their lead\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__stage is-spraying\" data-tvgroom-stage=\"\" role=\"img\"\u003e\n\u003cdiv class=\"tvgroom__halo\"\u003e\n\u003cspan class=\"tvgroom__spark\"\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cspan class=\"tvgroom__tag tvgroom__tag--one\"\u003eFine water mist\u003c\/span\u003e \u003cspan class=\"tvgroom__tag tvgroom__tag--two\"\u003eBrush + loose-fur pickup\u003c\/span\u003e\n\u003cdiv class=\"tvgroom__brush\"\u003e\n\u003cdiv class=\"tvgroom__handle\"\u003e\n\u003cspan class=\"tvgroom__usb\"\u003e\u003c\/span\u003e\u003cspan class=\"tvgroom__groove\"\u003e\u003c\/span\u003e\u003cspan class=\"tvgroom__hole\"\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__head\"\u003e\n\u003cspan class=\"tvgroom__screw tvgroom__screw--left\"\u003e\u003c\/span\u003e\u003cspan class=\"tvgroom__screw tvgroom__screw--right\"\u003e\u003c\/span\u003e\u003cspan class=\"tvgroom__port\"\u003e\u003c\/span\u003e\u003cspan class=\"tvgroom__nozzle\"\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__spray\"\u003e\n\u003ci class=\"tvgroom__droplet tvgroom__droplet--a\"\u003e\u003c\/i\u003e\u003ci class=\"tvgroom__droplet tvgroom__droplet--b\"\u003e\u003c\/i\u003e\u003ci class=\"tvgroom__droplet tvgroom__droplet--c\"\u003e\u003c\/i\u003e\u003ci class=\"tvgroom__droplet tvgroom__droplet--d\"\u003e\u003c\/i\u003e\u003ci class=\"tvgroom__droplet tvgroom__droplet--e\"\u003e\u003c\/i\u003e\u003ci class=\"tvgroom__droplet tvgroom__droplet--f\"\u003e\u003c\/i\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__ribbon\"\u003e\n\u003cspan\u003eBrush\u003c\/span\u003e\u003cspan\u003ePick up loose fur\u003c\/span\u003e\u003cspan\u003eAdd a fine mist\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__body\" id=\"tvgroom-details\"\u003e\n\u003cdiv class=\"tvgroom__section-head\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"tvgroom__eyebrow\"\u003eThree functions, one easy routine\u003c\/p\u003e\n\u003ch3\u003eA little more care in every brush-through.\u003c\/h3\u003e\n\u003c\/div\u003e\n\u003cp class=\"tvgroom__section-note\"\u003eWork gently through small sections of your pet’s coat and let them get used to the mist at their own pace.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__features\"\u003e\n\u003carticle class=\"tvgroom__feature\"\u003e\u003cspan class=\"tvgroom__number\"\u003e01 \/ BRUSH\u003c\/span\u003e\n\u003ch4\u003eGentle grooming\u003c\/h4\u003e\n\u003cp\u003eBrush through your pet’s coat a little at a time during regular grooming.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"tvgroom__feature\"\u003e\u003cspan class=\"tvgroom__number\"\u003e02 \/ LIFT\u003c\/span\u003e\n\u003ch4\u003eLoose-fur pickup\u003c\/h4\u003e\n\u003cp\u003eThe brush helps lift loose fur as you work through the coat.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"tvgroom__feature\"\u003e\u003cspan class=\"tvgroom__number\"\u003e03 \/ MIST\u003c\/span\u003e\n\u003ch4\u003eA light finishing mist\u003c\/h4\u003e\n\u003cp\u003eThe fine water mist helps settle flyaway fur while you brush.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__how\"\u003e\n\u003cdiv class=\"tvgroom__how-title\"\u003e\n\u003cp class=\"tvgroom__eyebrow\"\u003eKeep it comfortable\u003c\/p\u003e\n\u003ch3\u003eLet your pet set the pace.\u003c\/h3\u003e\n\u003cp\u003eStart gently and pause if your pet seems unsure or uncomfortable.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003col class=\"tvgroom__steps\"\u003e\n\u003cli\u003eFill and use the mist feature as directed.\u003c\/li\u003e\n\u003cli\u003eBrush gently through small sections of your pet’s coat.\u003c\/li\u003e\n\u003cli\u003eIntroduce the mist gradually and pause if your pet seems uncomfortable.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__care\"\u003e\n\u003cspan class=\"tvgroom__care-mark\"\u003e!\u003c\/span\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eCare note\u003c\/strong\u003e\n\u003cp\u003eFollow the care instructions supplied with the brush. Introduce the mist gradually and pause if your pet seems uncomfortable.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__faq\" id=\"tvgroom-faq\"\u003e\n\u003cdiv class=\"tvgroom__faq-intro\"\u003e\n\u003cp class=\"tvgroom__eyebrow\"\u003eGood to know\u003c\/p\u003e\n\u003ch3\u003eQuick answers for pet parents.\u003c\/h3\u003e\n\u003cp\u003eTap a question to open the answer.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__questions\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat does the 3-in-1 brush do?\u003c\/summary\u003e\n\u003cdiv class=\"tvgroom__answer\"\u003eIt brings brushing, loose-fur pickup and a fine water mist together in one grooming tool.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat is the mist for?\u003c\/summary\u003e\n\u003cdiv class=\"tvgroom__answer\"\u003eThe light mist helps settle flyaway fur as you brush.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do I use the mist feature?\u003c\/summary\u003e\n\u003cdiv class=\"tvgroom__answer\"\u003eFill and use the mist feature as directed, following the care instructions supplied with the brush.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow should I brush my pet?\u003c\/summary\u003e\n\u003cdiv class=\"tvgroom__answer\"\u003eBrush gently through small sections of your pet’s coat. Pause if your pet seems uncomfortable.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow should I introduce the mist?\u003c\/summary\u003e\n\u003cdiv class=\"tvgroom__answer\"\u003eIntroduce it gradually and give your pet time to get used to it. Pause if your pet seems uncomfortable.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvgroom__footer\"\u003e\n\u003cp\u003eTAILVALE · GENTLE GROOMING, ONE BRUSH-THROUGH AT A TIME\u003c\/p\u003e\n\u003ca class=\"tvgroom__button\" href=\"#tvgroom-title\"\u003eBack to the top ↑\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n    (function () {\n      var root = document.currentScript \u0026\u0026 document.currentScript.closest('.tvgroom');\n      if (!root) return;\n      var stage = root.querySelector('[data-tvgroom-stage]');\n      var toggle = root.querySelector('[data-tvgroom-toggle]');\n      if (!stage || !toggle) return;\n      toggle.addEventListener('click', function () {\n        var spraying = stage.classList.toggle('is-spraying');\n        toggle.setAttribute('aria-pressed', String(spraying));\n        toggle.textContent = spraying ? 'Pause the mist' : 'Spray again';\n      });\n    })();\n  \u003c\/script\u003e\u003c\/section\u003e","brand":"TailVale","offers":[{"title":"White","offer_id":67583391498482,"sku":null,"price":549.0,"currency_code":"ZAR","in_stock":true},{"title":"Pink","offer_id":67583391531250,"sku":null,"price":549.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0856\/3143\/4994\/files\/WhatsAppImage2026-09-28at10.43.39.jpg?v=1790585715"},{"product_id":"rolling-treat-ball","title":"Rolling Treat Ball","description":"\u003c!-- TailVale Rolling Treat Dispenser | Paste into a Shopify Custom Liquid block --\u003e\n\u003cstyle\u003e\n    .treatroll {\n      --rt-ink: #242329;\n      --rt-red: #e3342f;\n      --rt-red-dark: #b92027;\n      --rt-yellow: #ffd45c;\n      --rt-blue: #72c4d5;\n      --rt-cream: #fff9ee;\n      --rt-paper: #fffefd;\n      --rt-muted: #706d70;\n      --rt-line: #e9dfd0;\n      color: var(--rt-ink);\n      background: var(--rt-cream);\n      border: 1px solid rgba(36,35,41,.1);\n      border-radius: 28px;\n      overflow: hidden;\n      font-family: inherit;\n      margin: 24px auto;\n      max-width: 1180px;\n      box-shadow: 0 24px 68px rgba(52,44,35,.09);\n      isolation: isolate;\n    }\n    .treatroll * { box-sizing: border-box; }\n    .treatroll a { color: inherit; }\n    .treatroll h2, .treatroll h3, .treatroll p { margin-top: 0; }\n    .treatroll__hero {\n      position: relative;\n      display: grid;\n      grid-template-columns: minmax(0,1fr) minmax(320px,1fr);\n      align-items: center;\n      gap: clamp(28px,5vw,66px);\n      min-height: 500px;\n      padding: clamp(30px,6vw,74px);\n      background:\n        radial-gradient(circle at 86% 14%,rgba(255,255,255,.62) 0 3px,transparent 4px),\n        radial-gradient(circle at 93% 22%,rgba(255,255,255,.55) 0 5px,transparent 6px),\n        linear-gradient(135deg,#ffe68b 0%,#ffd45c 48%,#ffc274 100%);\n      overflow: hidden;\n    }\n    .treatroll__hero:after {\n      content: \"\";\n      position: absolute;\n      right: -165px;\n      top: -205px;\n      width: 400px;\n      height: 400px;\n      border: 1px solid rgba(36,35,41,.14);\n      border-radius: 50%;\n      box-shadow: 0 0 0 28px rgba(36,35,41,.035),0 0 0 58px rgba(36,35,41,.025);\n      pointer-events: none;\n    }\n    .treatroll__copy { position: relative; z-index: 1; max-width: 590px; }\n    .treatroll__eyebrow {\n      display: inline-flex;\n      align-items: center;\n      gap: 9px;\n      margin: 0 0 21px;\n      padding: 8px 12px;\n      border: 1px solid rgba(36,35,41,.16);\n      border-radius: 999px;\n      background: rgba(255,250,238,.55);\n      color: var(--rt-ink);\n      font-size: 10px;\n      font-weight: 900;\n      letter-spacing: .15em;\n      text-transform: uppercase;\n    }\n    .treatroll__eyebrow:before { content: \"★\"; color: var(--rt-red); font-size: 12px; }\n    .treatroll__title {\n      max-width: 610px;\n      margin-bottom: 19px;\n      font-size: clamp(44px,6.5vw,78px);\n      font-weight: 850;\n      letter-spacing: -.07em;\n      line-height: .94;\n      text-wrap: balance;\n    }\n    .treatroll__title em { color: var(--rt-red); font-family: Georgia,serif; font-weight: 700; }\n    .treatroll__intro {\n      max-width: 500px;\n      margin-bottom: 27px;\n      color: #4e4a49;\n      font-size: clamp(15px,1.5vw,18px);\n      line-height: 1.72;\n    }\n    .treatroll__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 11px; }\n    .treatroll__button {\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      min-height: 48px;\n      padding: 0 19px;\n      border: 2px solid var(--rt-ink);\n      border-radius: 999px;\n      background: var(--rt-ink);\n      color: #fff9ee !important;\n      font-size: 13px;\n      font-weight: 850;\n      text-decoration: none;\n      transition: transform .2s ease,background .2s ease,box-shadow .2s ease;\n      cursor: pointer;\n    }\n    .treatroll__button:hover { transform: translateY(-2px) rotate(-1deg); background: #39363e; box-shadow: 0 8px 18px rgba(36,35,41,.18); }\n    .treatroll__button--quiet { background: transparent; color: var(--rt-ink) !important; }\n    .treatroll__button--quiet:hover { background: rgba(255,255,255,.48); }\n    .treatroll__micro { margin: 17px 0 0; color: #6f5c4b; font-size: 10px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }\n    .treatroll__stage {\n      position: relative;\n      display: grid;\n      min-height: 365px;\n      place-items: center;\n      overflow: hidden;\n      border: 1px solid rgba(36,35,41,.15);\n      border-radius: 28px 78px 30px 78px;\n      background:\n        radial-gradient(circle,rgba(36,35,41,.08) 1px,transparent 1.5px) 0 0\/19px 19px,\n        linear-gradient(145deg,#fffaf0,#f7ecd9);\n      box-shadow: inset 0 0 40px rgba(255,255,255,.7),0 15px 30px rgba(130,92,45,.08);\n      perspective: 900px;\n    }\n    .treatroll__stage:before {\n      content: \"\";\n      position: absolute;\n      left: 7%;\n      right: 7%;\n      bottom: 24%;\n      height: 2px;\n      background: repeating-linear-gradient(90deg,rgba(227,52,47,.55) 0 10px,transparent 10px 19px);\n      transform: rotate(-4deg);\n      opacity: .7;\n    }\n    .treatroll__stage:after {\n      content: \"\";\n      position: absolute;\n      width: 150px;\n      height: 150px;\n      right: 4%;\n      top: 9%;\n      border: 1px dashed rgba(227,52,47,.2);\n      border-radius: 50%;\n      transform: rotate(20deg) scaleX(1.35);\n    }\n    .treatroll__scene { position: relative; z-index: 2; width: min(100%,360px); height: 290px; }\n    .treatroll__toy {\n      position: absolute;\n      top: 48px;\n      left: 50%;\n      width: 330px;\n      height: 180px;\n      transform: translateX(-50%) rotate(-7deg);\n      transform-style: preserve-3d;\n    }\n    .treatroll__collar {\n      position: absolute;\n      z-index: 1;\n      top: 20px;\n      left: 17%;\n      width: 66%;\n      height: 142px;\n      border: 2px solid #15151a;\n      border-radius: 43px;\n      background: repeating-linear-gradient(90deg,#111216 0 5px,#29292f 5px 10px,#16171b 10px 15px);\n      box-shadow: inset 0 9px 9px rgba(255,255,255,.08),inset 0 -12px 14px rgba(0,0,0,.34),0 15px 22px rgba(25,22,20,.22);\n      animation: tr-rib 1.3s linear infinite;\n    }\n    .treatroll__cap {\n      position: absolute;\n      z-index: 2;\n      top: 8px;\n      width: 116px;\n      height: 164px;\n      border: 2px solid rgba(255,255,255,.35);\n      border-radius: 54% 46% 47% 53%;\n      background: radial-gradient(circle at 33% 25%,#ff7770 0%,#ed3934 34%,#c82129 100%);\n      box-shadow: inset 8px 7px 12px rgba(255,255,255,.24),inset -12px -13px 18px rgba(91,10,17,.28),0 19px 28px rgba(37,24,19,.23);\n    }\n    .treatroll__cap--left { left: 0; }\n    .treatroll__cap--right { right: 0; transform: scaleX(-1); }\n    .treatroll__window {\n      position: absolute;\n      z-index: 4;\n      top: 37px;\n      left: 31%;\n      width: 38%;\n      height: 112px;\n      overflow: hidden;\n      border: 4px solid rgba(255,255,255,.9);\n      border-radius: 28px;\n      background: linear-gradient(105deg,rgba(255,255,255,.56),rgba(202,232,237,.32) 42%,rgba(255,255,255,.65));\n      box-shadow: inset 0 0 0 1px rgba(30,37,39,.2),0 0 14px rgba(255,255,255,.5);\n    }\n    .treatroll__window:before {\n      content: \"\";\n      position: absolute;\n      z-index: 3;\n      top: -16px;\n      left: 18px;\n      width: 19px;\n      height: 145px;\n      transform: rotate(17deg);\n      border-radius: 50%;\n      background: rgba(255,255,255,.32);\n      pointer-events: none;\n    }\n    .treatroll__treat {\n      position: absolute;\n      z-index: 2;\n      display: block;\n      width: 23px;\n      height: 15px;\n      border: 1px solid rgba(102,64,32,.18);\n      border-radius: 5px 8px 5px 8px;\n      background: linear-gradient(145deg,#e8b45f,#b97935);\n      box-shadow: 0 2px 2px rgba(89,54,24,.18);\n      animation: tr-tumble 1.8s ease-in-out infinite;\n    }\n    .treatroll__treat--one { left: 15px; top: 30px; transform: rotate(18deg); }\n    .treatroll__treat--two { left: 48px; top: 63px; width: 18px; height: 18px; border-radius: 50%; background: #cf8751; animation-delay: -.6s; }\n    .treatroll__treat--three { right: 16px; top: 25px; width: 19px; height: 17px; border-radius: 50% 50% 4px 4px; background: #e3c28d; animation-delay: -.9s; }\n    .treatroll__treat--four { right: 39px; bottom: 19px; width: 24px; height: 13px; background: #bb6d43; animation-delay: -.3s; }\n    .treatroll__treat--five { left: 26px; bottom: 16px; width: 18px; height: 14px; background: #dec28c; animation-delay: -1.2s; }\n    .treatroll__window-bead {\n      position: absolute;\n      z-index: 5;\n      left: 50%;\n      top: 50%;\n      width: 12px;\n      height: 12px;\n      transform: translate(-50%,-50%);\n      border: 2px solid rgba(255,255,255,.8);\n      border-radius: 50%;\n      background: var(--rt-red);\n      box-shadow: 0 0 0 4px rgba(255,255,255,.28);\n    }\n    .treatroll__hole {\n      position: absolute;\n      z-index: 5;\n      top: 98px;\n      width: 39px;\n      height: 38px;\n      border: 5px solid #28282d;\n      border-radius: 50%;\n      background: radial-gradient(circle at 35% 30%,#f15148 0 35%,#9e1b23 75%);\n      box-shadow: inset 0 3px 6px rgba(0,0,0,.46),0 2px 3px rgba(255,255,255,.16);\n    }\n    .treatroll__hole--left { left: 39px; }\n    .treatroll__hole--right { right: 39px; }\n    .treatroll__sprinkle {\n      position: absolute;\n      z-index: 6;\n      top: 117px;\n      right: 58px;\n      width: 1px;\n      height: 1px;\n      opacity: 0;\n      pointer-events: none;\n    }\n    .treatroll__sprinkle i {\n      position: absolute;\n      display: block;\n      width: 13px;\n      height: 11px;\n      border-radius: 4px 7px 4px 7px;\n      background: linear-gradient(145deg,#f6cc75,#bd7636);\n      box-shadow: 0 2px 3px rgba(75,45,22,.2);\n      opacity: 0;\n      animation: tr-snack-pop 2.2s ease-out infinite;\n    }\n    .treatroll__sprinkle i:nth-child(1) { --tr-x: 28px; --tr-y: 42px; animation-delay: .1s; }\n    .treatroll__sprinkle i:nth-child(2) { --tr-x: 58px; --tr-y: 29px; animation-delay: .75s; }\n    .treatroll__sprinkle i:nth-child(3) { --tr-x: 79px; --tr-y: 54px; animation-delay: 1.4s; }\n    .treatroll__stage.is-playing .treatroll__toy { animation: tr-roll 3.8s ease-in-out infinite; }\n    .treatroll__stage.is-playing .treatroll__sprinkle { opacity: 1; }\n    .treatroll__stage:not(.is-playing) .treatroll__collar,\n    .treatroll__stage:not(.is-playing) .treatroll__treat,\n    .treatroll__stage:not(.is-playing) .treatroll__sprinkle i,\n    .treatroll__stage:not(.is-playing) .treatroll__paw { animation-play-state: paused; }\n    .treatroll__paw {\n      position: absolute;\n      z-index: 1;\n      bottom: 12%;\n      left: 13%;\n      width: 18px;\n      height: 15px;\n      border-radius: 50% 50% 45% 45%;\n      background: rgba(227,52,47,.23);\n      transform: rotate(-18deg);\n      animation: tr-paw 2.4s ease-in-out infinite;\n    }\n    .treatroll__paw:before {\n      content: \"\";\n      position: absolute;\n      left: -3px;\n      top: -9px;\n      width: 7px;\n      height: 8px;\n      border-radius: 50%;\n      background: inherit;\n      box-shadow: 9px -4px 0 rgba(227,52,47,.23),18px 0 0 rgba(227,52,47,.23);\n    }\n    .treatroll__paw--two { left: 25%; bottom: 9%; animation-delay: .3s; transform: rotate(13deg) scale(.85); }\n    .treatroll__shadow {\n      position: absolute;\n      z-index: 1;\n      left: 19%;\n      right: 19%;\n      bottom: 19%;\n      height: 20px;\n      border-radius: 50%;\n      background: rgba(50,39,27,.15);\n      filter: blur(9px);\n      animation: tr-shadow 3.8s ease-in-out infinite;\n    }\n    .treatroll__stage:not(.is-playing) .treatroll__shadow { animation-play-state: paused; }\n    .treatroll__stamp {\n      position: absolute;\n      z-index: 7;\n      top: 8%;\n      left: 7%;\n      display: grid;\n      width: 75px;\n      height: 75px;\n      place-content: center;\n      border: 2px solid var(--rt-ink);\n      border-radius: 50%;\n      background: var(--rt-red);\n      color: white;\n      text-align: center;\n      font-size: 9px;\n      font-weight: 900;\n      letter-spacing: .08em;\n      line-height: 1.3;\n      text-transform: uppercase;\n      transform: rotate(-13deg);\n      box-shadow: 3px 4px 0 var(--rt-ink);\n    }\n    @keyframes tr-roll {\n      0%,100% { transform: translateX(-50%) translateX(-12px) rotate(-7deg); }\n      50% { transform: translateX(-50%) translateX(12px) rotate(7deg); }\n    }\n    @keyframes tr-rib { to { background-position: 15px 0; } }\n    @keyframes tr-tumble {\n      0%,100% { margin-top: 0; }\n      50% { margin-top: 8px; }\n    }\n    @keyframes tr-snack-pop {\n      0%,10% { opacity: 0; transform: translate(0,0) rotate(-8deg) scale(.3); }\n      26% { opacity: 1; }\n      80% { opacity: .9; }\n      100% { opacity: 0; transform: translate(var(--tr-x),var(--tr-y)) rotate(28deg) scale(.82); }\n    }\n    @keyframes tr-paw { 0%,100% { opacity: .35; } 50% { opacity: .9; } }\n    @keyframes tr-shadow { 0%,100% { transform: scaleX(1); opacity: .7; } 50% { transform: scaleX(.88); opacity: .45; } }\n    .treatroll__ribbon {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 16px;\n      padding: 17px clamp(24px,6vw,74px);\n      border-bottom: 1px solid var(--rt-line);\n      background: #27262c;\n      color: #fff9ee;\n      font-size: 10px;\n      font-weight: 850;\n      letter-spacing: .16em;\n      text-transform: uppercase;\n    }\n    .treatroll__ribbon span { display: inline-flex; align-items: center; gap: 9px; }\n    .treatroll__ribbon span:before { content: \"✦\"; color: var(--rt-yellow); font-size: 14px; }\n    .treatroll__body { padding: clamp(34px,6vw,72px); }\n    .treatroll__section-head { display: flex; justify-content: space-between; align-items: end; gap: 22px; margin-bottom: 27px; }\n    .treatroll__section-head .treatroll__eyebrow { margin-bottom: 11px; background: #ffe9a7; }\n    .treatroll__section-head h3 { max-width: 620px; margin-bottom: 0; font-size: clamp(30px,4vw,47px); letter-spacing: -.055em; line-height: 1.04; }\n    .treatroll__section-note { max-width: 255px; margin: 0; color: var(--rt-muted); font-size: 13px; line-height: 1.65; }\n    .treatroll__features { display: grid; grid-template-columns: repeat(3,1fr); gap: 13px; }\n    .treatroll__feature {\n      min-height: 190px;\n      padding: 23px;\n      border: 1px solid var(--rt-line);\n      border-radius: 18px 18px 18px 4px;\n      background: var(--rt-paper);\n      box-shadow: 0 9px 24px rgba(52,44,35,.035);\n      transition: transform .2s ease,box-shadow .2s ease;\n    }\n    .treatroll__feature:hover { transform: translateY(-4px) rotate(-.5deg); box-shadow: 0 16px 30px rgba(52,44,35,.09); }\n    .treatroll__number { display: block; margin-bottom: 24px; color: var(--rt-red); font-size: 10px; font-weight: 900; letter-spacing: .16em; }\n    .treatroll__feature h4 { margin: 0 0 9px; color: var(--rt-ink); font-size: 19px; letter-spacing: -.03em; }\n    .treatroll__feature p { margin: 0; color: var(--rt-muted); font-size: 13px; line-height: 1.7; }\n    .treatroll__how {\n      display: grid;\n      grid-template-columns: .8fr 1.2fr;\n      gap: clamp(26px,5vw,62px);\n      margin-top: clamp(42px,7vw,76px);\n      padding: clamp(24px,4vw,42px);\n      border: 1px solid rgba(227,52,47,.16);\n      border-radius: 24px;\n      background: linear-gradient(125deg,#fff0d0,#fff8eb);\n    }\n    .treatroll__how-title h3 { margin: 0 0 12px; font-size: clamp(28px,3vw,38px); letter-spacing: -.055em; line-height: 1.04; }\n    .treatroll__how-title p { margin: 0; color: var(--rt-muted); font-size: 13px; line-height: 1.7; }\n    .treatroll__steps { display: grid; gap: 9px; margin: 0; padding: 0; list-style: none; counter-reset: tr-step; }\n    .treatroll__steps li {\n      display: grid;\n      grid-template-columns: 38px 1fr;\n      align-items: center;\n      gap: 13px;\n      padding: 13px 0;\n      border-bottom: 1px solid rgba(36,35,41,.11);\n      color: var(--rt-ink);\n      font-size: 14px;\n      line-height: 1.55;\n      counter-increment: tr-step;\n    }\n    .treatroll__steps li:last-child { border: 0; padding-bottom: 0; }\n    .treatroll__steps li:before {\n      content: \"0\" counter(tr-step);\n      display: grid;\n      width: 35px;\n      height: 35px;\n      place-items: center;\n      border: 1px solid rgba(36,35,41,.14);\n      border-radius: 50%;\n      background: var(--rt-yellow);\n      color: var(--rt-ink);\n      font-size: 10px;\n      font-weight: 900;\n    }\n    .treatroll__care {\n      display: flex;\n      gap: 14px;\n      align-items: flex-start;\n      margin-top: 14px;\n      padding: 19px 21px;\n      border: 1px solid rgba(227,52,47,.18);\n      border-radius: 18px;\n      background: #fff2ed;\n    }\n    .treatroll__care-mark {\n      display: grid;\n      flex: 0 0 30px;\n      width: 30px;\n      height: 30px;\n      place-items: center;\n      border-radius: 50%;\n      background: var(--rt-red);\n      color: white;\n      font-size: 14px;\n      font-weight: 900;\n    }\n    .treatroll__care strong { display: block; margin-bottom: 4px; color: #8f2929; font-size: 13px; }\n    .treatroll__care p { margin: 0; color: #766665; font-size: 12px; line-height: 1.65; }\n    .treatroll__faq { display: grid; grid-template-columns: .72fr 1.28fr; gap: clamp(28px,5vw,64px); margin-top: clamp(44px,7vw,80px); }\n    .treatroll__faq-intro h3 { margin: 0 0 12px; font-size: clamp(30px,4vw,45px); letter-spacing: -.055em; line-height: 1.03; }\n    .treatroll__faq-intro p { margin: 0; color: var(--rt-muted); font-size: 13px; line-height: 1.65; }\n    .treatroll__questions { border-top: 1px solid var(--rt-line); }\n    .treatroll__questions details { border-bottom: 1px solid var(--rt-line); }\n    .treatroll__questions summary {\n      position: relative;\n      padding: 18px 42px 18px 0;\n      color: var(--rt-ink);\n      font-size: 14px;\n      font-weight: 800;\n      list-style: none;\n      cursor: pointer;\n    }\n    .treatroll__questions summary::-webkit-details-marker { display: none; }\n    .treatroll__questions summary:after {\n      content: \"+\";\n      position: absolute;\n      top: 50%;\n      right: 4px;\n      display: grid;\n      width: 26px;\n      height: 26px;\n      place-items: center;\n      transform: translateY(-50%);\n      border: 1px solid rgba(36,35,41,.2);\n      border-radius: 50%;\n      background: #fff3d0;\n      color: var(--rt-red);\n      font-size: 18px;\n      font-weight: 400;\n      transition: transform .2s ease;\n    }\n    .treatroll__questions details[open] summary:after { content: \"−\"; transform: translateY(-50%) rotate(180deg); }\n    .treatroll__answer { max-width: 620px; padding: 0 30px 18px 0; color: var(--rt-muted); font-size: 13px; line-height: 1.7; }\n    .treatroll__footer {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      gap: 22px;\n      margin-top: clamp(34px,5vw,56px);\n      padding-top: 21px;\n      border-top: 1px solid var(--rt-line);\n    }\n    .treatroll__footer p { margin: 0; color: #8a7a6c; font-size: 10px; font-weight: 800; letter-spacing: .08em; }\n    @media (max-width: 760px) {\n      .treatroll { border-radius: 21px; }\n      .treatroll__hero { grid-template-columns: 1fr; gap: 20px; min-height: 0; padding: 30px 23px 24px; }\n      .treatroll__title { font-size: clamp(45px,13vw,69px); }\n      .treatroll__stage { min-height: 330px; }\n      .treatroll__scene { transform: scale(.9); transform-origin: center center; }\n      .treatroll__ribbon { justify-content: flex-start; overflow: auto; white-space: nowrap; padding: 15px 22px; }\n      .treatroll__body { padding: 35px 22px; }\n      .treatroll__section-head { display: block; }\n      .treatroll__section-note { margin-top: 12px; }\n      .treatroll__features { grid-template-columns: 1fr; }\n      .treatroll__feature { min-height: 0; }\n      .treatroll__number { margin-bottom: 15px; }\n      .treatroll__how,.treatroll__faq { grid-template-columns: 1fr; }\n      .treatroll__how { gap: 21px; }\n      .treatroll__footer { align-items: flex-start; flex-direction: column; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .treatroll *, .treatroll *:before, .treatroll *:after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }\n    }\n  \u003c\/style\u003e\n\u003csection class=\"treatroll\"\u003e\n\u003cdiv class=\"treatroll__hero\"\u003e\n\u003cdiv class=\"treatroll__copy\"\u003e\n\u003cp class=\"treatroll__eyebrow\"\u003eTailVale · rolling treat dispenser\u003c\/p\u003e\n\u003ch2 class=\"treatroll__title\" id=\"treatroll-title\"\u003eRoll. Sniff. \u003cem\u003eReward.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp class=\"treatroll__intro\"\u003eTurn treat time into a little game with the TailVale Rolling Treat Dispenser. Add treats to the clear centre chamber and let your dog nudge and roll the toy to discover them.\u003c\/p\u003e\n\u003cdiv class=\"treatroll__actions\"\u003e\n\u003ca class=\"treatroll__button\" href=\"#treatroll-details\"\u003eSee how it works \u003cspan\u003e ↘\u003c\/span\u003e\u003c\/a\u003e \u003cbutton class=\"treatroll__button treatroll__button--quiet\" type=\"button\" data-tr-toggle=\"\"\u003ePause the roll\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cp class=\"treatroll__micro\"\u003eA nudge here · a snack there · let the game roll\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__stage is-playing\" data-tr-stage=\"\" role=\"img\"\u003e\n\u003cspan class=\"treatroll__stamp\"\u003esnack\u003cbr\u003equest\u003cbr\u003eon!\u003c\/span\u003e \u003cspan class=\"treatroll__paw\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__paw treatroll__paw--two\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__shadow\"\u003e\u003c\/span\u003e\n\u003cdiv class=\"treatroll__scene\"\u003e\n\u003cdiv class=\"treatroll__toy\"\u003e\n\u003cdiv class=\"treatroll__collar\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"treatroll__cap treatroll__cap--left\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"treatroll__cap treatroll__cap--right\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"treatroll__window\"\u003e\n\u003cspan class=\"treatroll__treat treatroll__treat--one\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__treat treatroll__treat--two\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__treat treatroll__treat--three\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__treat treatroll__treat--four\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__treat treatroll__treat--five\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__window-bead\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cspan class=\"treatroll__hole treatroll__hole--left\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__hole treatroll__hole--right\"\u003e\u003c\/span\u003e \u003cspan class=\"treatroll__sprinkle\"\u003e\u003ci\u003e\u003c\/i\u003e\u003ci\u003e\u003c\/i\u003e\u003ci\u003e\u003c\/i\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__ribbon\"\u003e\n\u003cspan\u003eRolling play\u003c\/span\u003e\u003cspan\u003eClear treat chamber\u003c\/span\u003e\u003cspan\u003eTreats on the move\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__body\" id=\"treatroll-details\"\u003e\n\u003cdiv class=\"treatroll__section-head\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"treatroll__eyebrow\"\u003eLet curiosity do the work\u003c\/p\u003e\n\u003ch3\u003eA snack-time side quest for curious noses.\u003c\/h3\u003e\n\u003c\/div\u003e\n\u003cp class=\"treatroll__section-note\"\u003eA rolling toy, a few treats and a little room to explore make for a playful change to the routine.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__features\"\u003e\n\u003carticle class=\"treatroll__feature\"\u003e\u003cspan class=\"treatroll__number\"\u003e01 \/ LOAD\u003c\/span\u003e\n\u003ch4\u003eAdd a few treats\u003c\/h4\u003e\n\u003cp\u003ePlace suitable treats in the clear chamber, following the instructions supplied with the toy.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"treatroll__feature\"\u003e\u003cspan class=\"treatroll__number\"\u003e02 \/ ROLL\u003c\/span\u003e\n\u003ch4\u003eLet paws investigate\u003c\/h4\u003e\n\u003cp\u003eYour dog can nudge and roll the dispenser to move treats toward the openings.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"treatroll__feature\"\u003e\u003cspan class=\"treatroll__number\"\u003e03 \/ DISCOVER\u003c\/span\u003e\n\u003ch4\u003eEnjoy the little wins\u003c\/h4\u003e\n\u003cp\u003eAs the toy moves, treats can come through the openings for your dog to find.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__how\"\u003e\n\u003cdiv class=\"treatroll__how-title\"\u003e\n\u003cp class=\"treatroll__eyebrow\"\u003eReady, set, roll\u003c\/p\u003e\n\u003ch3\u003eStart with a short play session.\u003c\/h3\u003e\n\u003cp\u003eLet your dog get familiar with the toy and its movement at their own pace.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003col class=\"treatroll__steps\"\u003e\n\u003cli\u003eAdd suitable treats to the centre chamber as directed.\u003c\/li\u003e\n\u003cli\u003ePlace the dispenser on a clear, open area of floor.\u003c\/li\u003e\n\u003cli\u003eSupervise your dog while they nudge and roll it to find the treats.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__care\"\u003e\n\u003cspan class=\"treatroll__care-mark\"\u003e!\u003c\/span\u003e\n\u003cdiv\u003e\n\u003cstrong\u003ePlay note\u003c\/strong\u003e\n\u003cp\u003eSupervise play and follow the care and safety instructions supplied with the dispenser. Remove it from play if it becomes damaged.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__faq\" id=\"treatroll-faq\"\u003e\n\u003cdiv class=\"treatroll__faq-intro\"\u003e\n\u003cp class=\"treatroll__eyebrow\"\u003eQuick answers\u003c\/p\u003e\n\u003ch3\u003eGood to know before play.\u003c\/h3\u003e\n\u003cp\u003eTap a question to open the answer.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__questions\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat is the Rolling Treat Dispenser?\u003c\/summary\u003e\n\u003cdiv class=\"treatroll__answer\"\u003eIt is a rolling interactive toy with a clear centre chamber for treats and openings for treats to come through as the toy moves.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do treats come out?\u003c\/summary\u003e\n\u003cdiv class=\"treatroll__answer\"\u003eAs your dog nudges and rolls the dispenser, treats shift inside the chamber and can come through the openings.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do I get started?\u003c\/summary\u003e\n\u003cdiv class=\"treatroll__answer\"\u003eAdd suitable treats as directed, place the toy on a clear area of floor and let your dog explore it under supervision.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat treats should I use?\u003c\/summary\u003e\n\u003cdiv class=\"treatroll__answer\"\u003eChoose treats that fit the dispenser openings and follow the product instructions.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCan I leave my dog alone with it?\u003c\/summary\u003e\n\u003cdiv class=\"treatroll__answer\"\u003eSupervise your dog during play and remove the dispenser if it becomes damaged.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"treatroll__footer\"\u003e\n\u003cp\u003eTAILVALE · LET THE LITTLE ADVENTURES ROLL\u003c\/p\u003e\n\u003ca class=\"treatroll__button\" href=\"#treatroll-title\"\u003eBack to the top ↑\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n    (function () {\n      var root = document.currentScript \u0026\u0026 document.currentScript.closest('.treatroll');\n      if (!root) return;\n\n      var stage = root.querySelector('[data-tr-stage]');\n      var toggle = root.querySelector('[data-tr-toggle]');\n      if (!stage || !toggle) return;\n\n      toggle.addEventListener('click', function () {\n        var playing = stage.classList.toggle('is-playing');\n        toggle.setAttribute('aria-pressed', String(playing));\n        toggle.textContent = playing ? 'Pause the roll' : 'Roll again';\n      });\n    })();\n  \u003c\/script\u003e\u003c\/section\u003e","brand":"TailVale","offers":[{"title":"Blue","offer_id":67583699517682,"sku":null,"price":599.0,"currency_code":"ZAR","in_stock":true},{"title":"Red","offer_id":67583699615986,"sku":null,"price":599.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0856\/3143\/4994\/files\/red.jpg?v=1790589872"},{"product_id":"play-groom-bundle","title":"Play + Groom Bundle","description":"\u003c!-- TailVale Play + Groom Bundle | Paste into a Shopify Custom Liquid block --\u003e\n\u003cstyle\u003e\n    .tvpgbundle {\n      --pg-ink: #202c34;\n      --pg-muted: #67747a;\n      --pg-green: #315d50;\n      --pg-green-soft: #dfece1;\n      --pg-pink-soft: #f4e6e8;\n      --pg-cream: #fbfaf6;\n      --pg-line: #e5e4dc;\n      color: var(--pg-ink);\n      background: #fffefa;\n      border: 1px solid rgba(32,44,52,.1);\n      border-radius: 28px;\n      box-shadow: 0 22px 60px rgba(32,44,52,.08);\n      font-family: inherit;\n      isolation: isolate;\n      margin: 24px auto;\n      max-width: 1160px;\n      overflow: hidden;\n    }\n    .tvpgbundle * { box-sizing: border-box; }\n    .tvpgbundle h2, .tvpgbundle h3, .tvpgbundle h4, .tvpgbundle p { margin-top: 0; }\n    .tvpgbundle__hero {\n      display: block;\n      padding: clamp(34px,6vw,74px);\n      background:\n        radial-gradient(ellipse at 85% 10%,rgba(255,255,255,.7),transparent 36%),\n        linear-gradient(130deg,#edf3e9 0%,#e8efe9 54%,#f5e9eb 100%);\n    }\n    .tvpgbundle__copy { max-width: 760px; }\n    .tvpgbundle__title {\n      max-width: 610px;\n      margin-bottom: 18px;\n      font-size: clamp(44px,6.4vw,76px);\n      font-weight: 850;\n      letter-spacing: -.075em;\n      line-height: .94;\n      text-wrap: balance;\n    }\n    .tvpgbundle__title span { color: var(--pg-green); }\n    .tvpgbundle__intro {\n      max-width: 520px;\n      margin-bottom: 22px;\n      color: #58676b;\n      font-size: clamp(15px,1.5vw,18px);\n      line-height: 1.75;\n    }\n    .tvpgbundle__content { padding: clamp(34px,6vw,70px); }\n    .tvpgbundle__section-title {\n      display: flex;\n      align-items: end;\n      justify-content: space-between;\n      gap: 20px;\n      margin-bottom: 25px;\n    }\n    .tvpgbundle__section-heading {\n      margin: 0;\n      font-size: clamp(30px,4vw,44px);\n      letter-spacing: -.06em;\n      line-height: 1.04;\n    }\n    .tvpgbundle__included {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 14px;\n    }\n    .tvpgbundle__item {\n      min-height: 206px;\n      padding: 25px;\n      border: 1px solid var(--pg-line);\n      border-radius: 19px;\n      background: #fff;\n    }\n    .tvpgbundle__item h4 {\n      margin: 0 0 9px;\n      font-size: 20px;\n      letter-spacing: -.04em;\n    }\n    .tvpgbundle__item p {\n      margin: 0;\n      color: var(--pg-muted);\n      font-size: 13px;\n      line-height: 1.75;\n    }\n    .tvpgbundle__how {\n      display: grid;\n      grid-template-columns: .72fr 1.28fr;\n      gap: clamp(24px,5vw,60px);\n      margin-top: 24px;\n      padding: clamp(24px,4vw,40px);\n      border: 1px solid rgba(49,93,80,.14);\n      border-radius: 22px;\n      background: linear-gradient(125deg,#edf4eb,#f8eeee);\n    }\n    .tvpgbundle__how h3 {\n      margin: 0;\n      font-size: clamp(27px,3.5vw,38px);\n      letter-spacing: -.06em;\n      line-height: 1.04;\n    }\n    .tvpgbundle__how p {\n      margin: 0;\n      color: #526367;\n      font-size: 14px;\n      line-height: 1.8;\n    }\n    .tvpgbundle__safety {\n      display: grid;\n      grid-template-columns: 35px 1fr;\n      align-items: start;\n      gap: 13px;\n      margin-top: 13px;\n      padding: 20px 22px;\n      border: 1px solid #eadfdc;\n      border-radius: 17px;\n      background: #fbf5f2;\n    }\n    .tvpgbundle__safety-mark {\n      display: grid;\n      width: 32px;\n      height: 32px;\n      place-items: center;\n      border-radius: 50%;\n      background: #efd1ca;\n      color: #694b45;\n      font-size: 14px;\n      font-weight: 900;\n    }\n    .tvpgbundle__safety strong {\n      display: block;\n      margin-bottom: 4px;\n      font-size: 12px;\n    }\n    .tvpgbundle__safety p {\n      margin: 0;\n      color: #6d6663;\n      font-size: 12px;\n      line-height: 1.7;\n    }\n    @media (max-width: 740px) {\n      .tvpgbundle { border-radius: 21px; }\n      .tvpgbundle__hero { grid-template-columns: 1fr; gap: 25px; padding: 32px 22px 23px; }\n      .tvpgbundle__title { font-size: clamp(45px,13vw,68px); }\n      .tvpgbundle__content { padding: 34px 21px; }\n      .tvpgbundle__section-title { display: block; }\n      .tvpgbundle__included, .tvpgbundle__how { grid-template-columns: 1fr; }\n      .tvpgbundle__item { min-height: 0; }\n      .tvpgbundle__how { gap: 14px; }\n    }\n  \u003c\/style\u003e\n\u003csection class=\"tvpgbundle\"\u003e\n\u003cdiv class=\"tvpgbundle__hero\"\u003e\n\u003cdiv class=\"tvpgbundle__copy\"\u003e\n\u003ch2 class=\"tvpgbundle__title\" id=\"tvpgbundle-title\"\u003ePlay + Groom \u003cspan\u003eBundle\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp class=\"tvpgbundle__intro\"\u003eBring interactive play and everyday grooming together with the TailVale Play + Groom Bundle. Pair the rechargeable Smart Bounce Ball with the 3-in-1 Mist \u0026amp; Groom Brush and save R549 compared with buying them separately.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvpgbundle__content\"\u003e\n\u003cdiv class=\"tvpgbundle__section-title\"\u003e\n\u003ch3 class=\"tvpgbundle__section-heading\"\u003eWhat’s included\u003c\/h3\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvpgbundle__included\"\u003e\n\u003carticle class=\"tvpgbundle__item\"\u003e\n\u003ch4\u003eSmart Bounce Ball\u003c\/h4\u003e\n\u003cp\u003eMoves and bounces on its own, with a colour-changing LED ring for a lively chase-and-paw play session. Rechargeable for future play.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"tvpgbundle__item\"\u003e\n\u003ch4\u003e3-in-1 Mist \u0026amp; Groom Brush\u003c\/h4\u003e\n\u003cp\u003eCombines brushing, loose-fur pickup and a fine water mist in one grooming tool. The light mist helps settle flyaway fur as you brush.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvpgbundle__how\"\u003e\n\u003cdiv\u003e\n\u003ch3 class=\"tvpgbundle__section-heading\"\u003eHow to use\u003c\/h3\u003e\n\u003c\/div\u003e\n\u003cp\u003eCharge and switch on the ball as directed, and begin with a short, supervised play session. Fill and use the brush mist feature as directed, brushing gently through small sections of your pet’s coat. Introduce the mist gradually and pause if your pet seems uncomfortable.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tvpgbundle__safety\"\u003e\n\u003cspan class=\"tvpgbundle__safety-mark\"\u003e!\u003c\/span\u003e\n\u003cdiv\u003e\n\u003cstrong\u003eCare and safety\u003c\/strong\u003e\n\u003cp\u003eThe ball is an interactive toy, not a chew toy. Supervise play and remove it if it becomes damaged. Follow the care instructions supplied with the brush.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e","brand":"TailVale","offers":[{"title":"Black \/ White","offer_id":67583886262514,"sku":null,"price":899.0,"currency_code":"ZAR","in_stock":true},{"title":"Black \/ Pink","offer_id":67583886295282,"sku":null,"price":899.0,"currency_code":"ZAR","in_stock":true},{"title":"Blue \/ White","offer_id":67583886328050,"sku":null,"price":899.0,"currency_code":"ZAR","in_stock":true},{"title":"Blue \/ Pink","offer_id":67583886360818,"sku":null,"price":899.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0856\/3143\/4994\/files\/Bundledeal.jpg?v=1790592310"},{"product_id":"tailvale-led-pet-nail-clipper","title":"LED Pet Nail Clipper","description":"\u003cstyle\u003e\n    .tv-clipper {\n      --tv-ink: #26362e;\n      --tv-green: #496b58;\n      --tv-cream: #f7f5ef;\n      --tv-border: #e5e8e1;\n      --tv-coral: #d98f7b;\n      color: var(--tv-ink);\n      font-family: inherit;\n      margin: 24px auto;\n      max-width: 980px;\n    }\n\n    .tv-clipper * {\n      box-sizing: border-box;\n    }\n\n    .tv-clipper__card {\n      overflow: hidden;\n      border: 1px solid var(--tv-border);\n      border-radius: 24px;\n      background: #fff;\n      box-shadow: 0 12px 36px rgba(38, 54, 46, 0.07);\n    }\n\n    .tv-clipper__hero {\n      display: grid;\n      grid-template-columns: 1.4fr 0.8fr;\n      gap: 28px;\n      align-items: center;\n      padding: 38px;\n      background:\n        radial-gradient(circle at 90% 10%, rgba(217, 143, 123, 0.13), transparent 32%),\n        var(--tv-cream);\n    }\n\n    .tv-clipper__eyebrow {\n      margin: 0 0 12px;\n      color: var(--tv-green);\n      font-size: 12px;\n      font-weight: 700;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n    }\n\n    .tv-clipper h2 {\n      margin: 0 0 14px;\n      color: var(--tv-ink);\n      font-size: clamp(28px, 5vw, 42px);\n      line-height: 1.1;\n      letter-spacing: -0.04em;\n    }\n\n    .tv-clipper__intro {\n      max-width: 620px;\n      margin: 0;\n      color: #5d6a61;\n      font-size: 16px;\n      line-height: 1.75;\n    }\n\n    .tv-clipper__tag {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      margin-top: 20px;\n      padding: 9px 14px;\n      border: 1px solid #dce4da;\n      border-radius: 999px;\n      background: #fff;\n      color: var(--tv-green);\n      font-size: 13px;\n      font-weight: 650;\n    }\n\n    .tv-clipper__light-card {\n      display: grid;\n      min-height: 190px;\n      place-items: center;\n      align-content: center;\n      gap: 14px;\n      padding: 24px;\n      border: 1px solid rgba(73, 107, 88, 0.12);\n      border-radius: 20px;\n      background: rgba(255, 255, 255, 0.75);\n      text-align: center;\n    }\n\n    .tv-clipper__light-icon {\n      position: relative;\n      display: grid;\n      width: 76px;\n      height: 76px;\n      place-items: center;\n      border-radius: 50%;\n      background: #f7e9df;\n    }\n\n    .tv-clipper__light-icon::before {\n      width: 25px;\n      height: 25px;\n      border: 3px solid var(--tv-coral);\n      border-radius: 50%;\n      content: \"\";\n    }\n\n    .tv-clipper__light-icon::after {\n      position: absolute;\n      top: 25px;\n      left: 59px;\n      width: 34px;\n      height: 26px;\n      background: linear-gradient(90deg, rgba(217, 143, 123, 0.35), transparent);\n      clip-path: polygon(0 25%, 100% 0, 100% 100%, 0 75%);\n      content: \"\";\n    }\n\n    .tv-clipper__light-card strong {\n      color: var(--tv-ink);\n      font-size: 15px;\n    }\n\n    .tv-clipper__light-card span {\n      max-width: 210px;\n      color: #6a756d;\n      font-size: 13px;\n      line-height: 1.5;\n    }\n\n    .tv-clipper__content {\n      padding: 34px 38px 38px;\n    }\n\n    .tv-clipper__section-title {\n      margin: 0 0 18px;\n      color: var(--tv-ink);\n      font-size: 21px;\n      letter-spacing: -0.02em;\n    }\n\n    .tv-clipper__features {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 12px;\n      margin-bottom: 34px;\n    }\n\n    .tv-clipper__feature {\n      display: flex;\n      gap: 13px;\n      align-items: flex-start;\n      padding: 17px;\n      border: 1px solid var(--tv-border);\n      border-radius: 16px;\n      background: #fff;\n    }\n\n    .tv-clipper__check {\n      display: grid;\n      flex: 0 0 28px;\n      width: 28px;\n      height: 28px;\n      place-items: center;\n      border-radius: 50%;\n      background: #edf3ed;\n      color: var(--tv-green);\n      font-size: 15px;\n      font-weight: 800;\n    }\n\n    .tv-clipper__feature p {\n      margin: 2px 0 0;\n      color: #56645b;\n      font-size: 14px;\n      line-height: 1.6;\n    }\n\n    .tv-clipper__feature strong {\n      color: var(--tv-ink);\n    }\n\n    .tv-clipper__steps {\n      display: grid;\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n      gap: 12px;\n      margin: 0 0 34px;\n      padding: 0;\n      list-style: none;\n    }\n\n    .tv-clipper__step {\n      padding: 17px;\n      border-radius: 16px;\n      background: var(--tv-cream);\n    }\n\n    .tv-clipper__step-number {\n      display: grid;\n      width: 28px;\n      height: 28px;\n      margin-bottom: 12px;\n      place-items: center;\n      border-radius: 50%;\n      background: var(--tv-green);\n      color: #fff;\n      font-size: 13px;\n      font-weight: 700;\n    }\n\n    .tv-clipper__step p {\n      margin: 0;\n      color: #5d6a61;\n      font-size: 13px;\n      line-height: 1.6;\n    }\n\n    .tv-clipper__care {\n      margin: 0 0 28px;\n      padding: 18px 20px;\n      border-left: 4px solid var(--tv-coral);\n      border-radius: 0 14px 14px 0;\n      background: #fbf4f0;\n      color: #5d554f;\n      font-size: 14px;\n      line-height: 1.7;\n    }\n\n    .tv-clipper__care strong {\n      color: var(--tv-ink);\n    }\n\n    .tv-clipper__faq {\n      border-top: 1px solid var(--tv-border);\n    }\n\n    .tv-clipper details {\n      border-bottom: 1px solid var(--tv-border);\n    }\n\n    .tv-clipper summary {\n      position: relative;\n      padding: 17px 34px 17px 0;\n      color: var(--tv-ink);\n      cursor: pointer;\n      font-size: 15px;\n      font-weight: 650;\n      list-style: none;\n    }\n\n    .tv-clipper summary::-webkit-details-marker {\n      display: none;\n    }\n\n    .tv-clipper summary::after {\n      position: absolute;\n      top: 50%;\n      right: 4px;\n      color: var(--tv-green);\n      content: \"+\";\n      font-size: 23px;\n      font-weight: 400;\n      transform: translateY(-50%);\n    }\n\n    .tv-clipper details[open] summary::after {\n      content: \"−\";\n    }\n\n    .tv-clipper__answer {\n      margin: -3px 0 17px;\n      padding-right: 24px;\n      color: #647168;\n      font-size: 14px;\n      line-height: 1.7;\n    }\n\n    @media (max-width: 680px) {\n      .tv-clipper__hero {\n        grid-template-columns: 1fr;\n        gap: 22px;\n        padding: 26px 22px;\n      }\n\n      .tv-clipper__light-card {\n        min-height: 150px;\n      }\n\n      .tv-clipper__content {\n        padding: 26px 22px 28px;\n      }\n\n      .tv-clipper__features {\n        grid-template-columns: 1fr;\n      }\n\n      .tv-clipper__steps {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n      }\n    }\n  \u003c\/style\u003e\n\u003csection class=\"tv-clipper\"\u003e\n\u003cdiv class=\"tv-clipper__card\"\u003e\n\u003cheader class=\"tv-clipper__hero\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"tv-clipper__eyebrow\"\u003eTailVale · Little paws, thoughtful care\u003c\/p\u003e\n\u003ch2\u003eTailVale LED Pet Nail Clipper\u003c\/h2\u003e\n\u003cp class=\"tv-clipper__intro\"\u003eA little more light for the little grooming moments. The built-in LED shines towards your pet’s nail to help you see where you’re trimming, especially on lighter nails. Its curved stainless-steel blade and compact handle give you control when caring for small paws.\u003c\/p\u003e\n\u003cspan class=\"tv-clipper__tag\"\u003eDesigned for cats and small dogs\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-clipper__light-card\"\u003e\n\u003cdiv class=\"tv-clipper__light-icon\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cstrong\u003eA little more light\u003c\/strong\u003e \u003cspan\u003eHelps illuminate the nail while you trim.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/header\u003e\n\u003cdiv class=\"tv-clipper__content\"\u003e\n\u003ch3 class=\"tv-clipper__section-title\"\u003eWhy you’ll love it\u003c\/h3\u003e\n\u003cdiv class=\"tv-clipper__features\"\u003e\n\u003cdiv class=\"tv-clipper__feature\"\u003e\n\u003cspan class=\"tv-clipper__check\"\u003e✓\u003c\/span\u003e\n\u003cp\u003e\u003cstrong\u003eBuilt-in LED light\u003c\/strong\u003e\u003cbr\u003eHelps illuminate the nail while you trim.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-clipper__feature\"\u003e\n\u003cspan class=\"tv-clipper__check\"\u003e✓\u003c\/span\u003e\n\u003cp\u003e\u003cstrong\u003eCurved stainless-steel blade\u003c\/strong\u003e\u003cbr\u003eShaped for careful, controlled clipping.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-clipper__feature\"\u003e\n\u003cspan class=\"tv-clipper__check\"\u003e✓\u003c\/span\u003e\n\u003cp\u003e\u003cstrong\u003eSliding safety lock\u003c\/strong\u003e\u003cbr\u003eKeeps the clipper closed between uses.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"tv-clipper__feature\"\u003e\n\u003cspan class=\"tv-clipper__check\"\u003e✓\u003c\/span\u003e\n\u003cp\u003e\u003cstrong\u003eCompact handle\u003c\/strong\u003e\u003cbr\u003eDesigned for caring for cats’ and small dogs’ paws.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 class=\"tv-clipper__section-title\"\u003eHow to use\u003cspan class=\"tv-clipper__step-number\"\u003e1\u003c\/span\u003eLet your pet get comfortable with the clipper first.\u003cspan class=\"tv-clipper__step-number\"\u003e2\u003c\/span\u003eUnlock it, switch on the light and hold the paw gently.\u003cspan class=\"tv-clipper__step-number\"\u003e3\u003c\/span\u003eTrim just the tip, taking small cuts and staying clear of the quick.\u003cspan class=\"tv-clipper__step-number\"\u003e4\u003c\/span\u003eTake extra care with dark nails and pause if your pet becomes uncomfortable.\u003c\/h3\u003e\n\u003cp class=\"tv-clipper__care\"\u003e\u003cstrong\u003eCare and safety:\u003c\/strong\u003e Switch off the light, wipe the blade clean and lock the clipper after use. Store the clipper and its CR2032 button battery out of reach of pets and children. This clipper is a grooming tool, not a toy.\u003c\/p\u003e\n\u003ch3 class=\"tv-clipper__section-title\"\u003eQuick questions\u003c\/h3\u003e\n\u003cdiv class=\"tv-clipper__faq\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDoes the LED make every nail easy to see?\u003c\/summary\u003e\n\u003cp class=\"tv-clipper__answer\"\u003eThe light helps illuminate the nail, especially lighter nails. Take extra care with dark nails, where the quick may be difficult to see.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow should I introduce the clipper to my pet?\u003c\/summary\u003e\n\u003cp class=\"tv-clipper__answer\"\u003eLet your pet get comfortable with it first. Hold the paw gently, take small cuts, and pause if your pet becomes uncomfortable.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eHow do I store it after grooming?\u003c\/summary\u003e\n\u003cp class=\"tv-clipper__answer\"\u003eSwitch off the light, wipe the blade clean, slide the safety lock closed, and store the clipper and CR2032 button battery out of reach of pets and children.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e","brand":"TailVale","offers":[{"title":"Blue","offer_id":67583971786994,"sku":null,"price":299.0,"currency_code":"ZAR","in_stock":true},{"title":"Pink","offer_id":67583971819762,"sku":null,"price":299.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0856\/3143\/4994\/files\/Bluenail.jpg?v=1790595548"}],"url":"https:\/\/tailvale.co.za\/collections\/tailvale-picks.oembed","provider":"TailVale","version":"1.0","type":"link"}