{"product_id":"funny-pet-rear-wiper-decal-cat-dog-car-window-sticker","title":"Funny Pet Rear Wiper Decal – Cat \u0026 Dog Car Window Sticker","description":"\n\u003c!-- ALASJOY | Funny Pet Rear-Wiper Decal | Custom Liquid (HTML only) --\u003e\n\u003cstyle\u003e\n#aj-pet-wiper{--pine:#183f3a;--mint:#dff4e8;--cream:#fcfaf5;--gold:#edb870;--ink:#263a36;--soft:#f2f6f0;--muted:#677873;--line:#dde9e0;display:block;width:100%;max-width:1180px;margin:0 auto;background:var(--cream);color:var(--ink);font:15px\/1.65 Arial,Helvetica,sans-serif;overflow:hidden;border-radius:16px;container-type:inline-size;isolation:isolate}\n#aj-pet-wiper,#aj-pet-wiper *{box-sizing:border-box}\n#aj-pet-wiper h2,#aj-pet-wiper h3,#aj-pet-wiper p,#aj-pet-wiper figure{margin:0;padding:0;letter-spacing:normal;text-transform:none}\n#aj-pet-wiper h2{color:var(--pine);font:800 clamp(30px,4.4vw,48px)\/1.13 Arial,Helvetica,sans-serif}\n#aj-pet-wiper h3{color:var(--pine);font:800 19px\/1.3 Arial,Helvetica,sans-serif}\n#aj-pet-wiper p{font:400 14px\/1.8 Arial,Helvetica,sans-serif;color:var(--muted)}\n#aj-pet-wiper img,#aj-pet-wiper video{display:block;width:100%;height:auto;max-width:100%}\n#aj-pet-wiper .pw-section{padding:47px 23px}\n#aj-pet-wiper .pw-label{display:block;margin-bottom:13px;color:#48876e;font:800 11px\/1.4 Arial,sans-serif;letter-spacing:1.6px;text-transform:uppercase}\n#aj-pet-wiper .pw-center{text-align:center}\n#aj-pet-wiper .pw-desc{max-width:650px;margin:14px auto 0}\n#aj-pet-wiper .pw-note{display:block;margin-top:15px;font:400 12px\/1.6 Arial,sans-serif;color:#84958b}\n\n\/* HERO *\/\n\n#aj-pet-wiper .pw-hero{display:grid;grid-template-columns:minmax(0,1fr);align-items:center;gap:30px;padding:30px 19px 44px;background:linear-gradient(139deg,#dff3e8,#fffaf1 70%)}\n#aj-pet-wiper .pw-hero-copy{min-width:0}\n#aj-pet-wiper .pw-pill{display:inline-flex;align-items:center;gap:6px;margin-bottom:17px;padding:8px 13px;border:1px solid #8ab99f;border-radius:99px;background:#fffdf9;color:#27644c;font:800 11px\/1.3 Arial,sans-serif;letter-spacing:.35px}\n#aj-pet-wiper .pw-hero h2{font-size:clamp(35px,5.6vw,60px);line-height:1.06;letter-spacing:-1.5px}\n#aj-pet-wiper .pw-hero h2 em{font-style:normal;color:#e49357}\n#aj-pet-wiper .pw-hero p{font-size:15px;margin-top:16px;color:#4e665c}\n#aj-pet-wiper .pw-hero-bottom{display:flex;flex-wrap:wrap;gap:9px;margin-top:23px}\n#aj-pet-wiper .pw-hero-bottom span{padding:9px 12px;border-radius:8px;background:#ffffffba;border:1px solid #d3e4d7;font:700 12px\/1.3 Arial,sans-serif;color:#276146}\n#aj-pet-wiper .pw-visual{display:none;min-width:0;position:relative;border-radius:17px;border:1px solid #cfe5d6;background:white;padding:11px;box-shadow:0 22px 37px #1e4a3820}\n#aj-pet-wiper .pw-visual.visible{display:block}\n#aj-pet-wiper .pw-slide{display:none}\n#aj-pet-wiper .pw-slide.active{display:block}\n#aj-pet-wiper .pw-slide img{aspect-ratio:1\/1;object-fit:contain;background:#fff;border-radius:11px}\n#aj-pet-wiper .pw-slider-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 7px 1px;color:#5d796b;font:800 12px\/1.35 Arial,sans-serif}\n#aj-pet-wiper .pw-dots{display:flex;gap:5px}\n#aj-pet-wiper .pw-dots i{width:7px;height:7px;border-radius:99px;background:#c4d8cb;display:block}\n#aj-pet-wiper .pw-dots i.active{width:18px;background:#327a5b}\n\n\/* VALUE BAR *\/\n\n#aj-pet-wiper .pw-bar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:5px;padding:20px 10px;background:var(--pine);color:white}\n#aj-pet-wiper .pw-bar div{text-align:center;font:800 12px\/1.45 Arial,sans-serif;color:#f2fff6}\n#aj-pet-wiper .pw-bar span{display:block;margin-bottom:4px;font-size:25px}\n\n\/* ORIGINAL ANIMATION *\/\n\n#aj-pet-wiper .pw-motion{display:none;text-align:center;background:#f0f7f1}\n#aj-pet-wiper .pw-motion.visible{display:block}\n#aj-pet-wiper .pw-motion-stage{max-width:690px;margin:25px auto 0;padding:10px;background:#fff;border:1px solid #dae7dc;border-radius:14px}\n#aj-pet-wiper .pw-motion-stage img,#aj-pet-wiper .pw-motion-stage video{max-height:650px;object-fit:contain;border-radius:9px}\n\n\/* BENEFITS *\/\n\n#aj-pet-wiper .pw-benefits{display:grid;grid-template-columns:1fr;gap:13px;margin-top:28px}\n#aj-pet-wiper .pw-benefit{border:1px solid var(--line);border-radius:13px;background:#fff;padding:24px 20px}\n#aj-pet-wiper .pw-benefit .pw-icon{display:block;font-size:30px;margin-bottom:13px}\n#aj-pet-wiper .pw-benefit p{margin-top:10px}\n\n\/* IMAGE AND TEXT *\/\n\n#aj-pet-wiper .pw-split{display:grid;grid-template-columns:minmax(0,1fr);align-items:center;background:#fffdf9}\n#aj-pet-wiper .pw-split.alt{background:#eaf3ea}\n#aj-pet-wiper .pw-split-copy{padding:37px 24px;min-width:0}\n#aj-pet-wiper .pw-split-copy p{margin-top:15px}\n#aj-pet-wiper .pw-split-copy strong{color:#315d4a}\n#aj-pet-wiper .pw-photo{display:none;min-width:0;padding:15px}\n#aj-pet-wiper .pw-photo.visible{display:block}\n#aj-pet-wiper .pw-photo img{aspect-ratio:1\/1;object-fit:contain;border:1px solid #d9e6d9;border-radius:11px;background:white}\n#aj-pet-wiper .pw-quote{margin-top:18px;padding:15px 18px;border-left:4px solid #edae6c;background:#fff6e8;font:italic 19px\/1.45 Georgia,serif;color:#92633e}\n\n\/* STYLES *\/\n\n#aj-pet-wiper .pw-styles{background:#f6f7f2}\n#aj-pet-wiper .pw-style-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:13px;margin-top:26px}\n#aj-pet-wiper .pw-style{padding:22px 15px;background:white;border:1px solid #dce7dc;border-radius:13px;text-align:center}\n#aj-pet-wiper .pw-style .pw-emoji{display:block;font-size:41px;margin-bottom:10px}\n#aj-pet-wiper .pw-style p{margin-top:8px;font-size:13px}\n#aj-pet-wiper .pw-options{display:none;margin:24px auto 0;padding:18px;border-radius:10px;border:1px dashed #bcd7c4;background:#fff;max-width:760px;text-align:center}\n#aj-pet-wiper .pw-options.visible{display:block}\n#aj-pet-wiper .pw-options h3{font-size:15px;margin-bottom:12px}\n#aj-pet-wiper .pw-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:7px}\n#aj-pet-wiper .pw-chips span{font:700 12px\/1.35 Arial,sans-serif;padding:8px 10px;border-radius:99px;background:#ebf5ee;color:#35634b}\n\n\/* GALLERY *\/\n\n#aj-pet-wiper .pw-gallery{display:none;background:#fffdf9}\n#aj-pet-wiper .pw-gallery.visible{display:block}\n#aj-pet-wiper .pw-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:26px}\n#aj-pet-wiper .pw-tile{padding:8px;border:1px solid #e1e7de;border-radius:11px;background:white}\n#aj-pet-wiper .pw-tile img{aspect-ratio:1\/1;object-fit:contain;border-radius:7px}\n#aj-pet-wiper .pw-tile figcaption{text-align:center;padding:9px 0 2px;font:700 12px\/1.35 Arial,sans-serif;color:#6c8075}\n\n\/* INSTALLATION *\/\n\n#aj-pet-wiper .pw-how{background:#eaf3ea}\n#aj-pet-wiper .pw-steps{display:grid;grid-template-columns:1fr;gap:13px;margin-top:27px}\n#aj-pet-wiper .pw-step{padding:21px 19px;border-radius:11px;background:#fff;border:1px solid #d6e6da}\n#aj-pet-wiper .pw-step b{display:block;margin-bottom:12px;color:#e6a263;font-size:25px}\n#aj-pet-wiper .pw-step p{margin-top:8px}\n#aj-pet-wiper .pw-safety{margin:22px auto 0;max-width:840px;padding:16px 18px;border:1px solid #e8d5b1;background:#fff9ec;border-radius:9px;font:400 13px\/1.75 Arial,sans-serif;color:#755f3c}\n\n\/* GIFT *\/\n\n#aj-pet-wiper .pw-gift{background:var(--pine);text-align:center}\n#aj-pet-wiper .pw-gift h2{color:#fff7e9}\n#aj-pet-wiper .pw-gift p{color:#e2f2e9;max-width:680px;margin:14px auto 0}\n#aj-pet-wiper .pw-gift .pw-label{color:#e9c38b}\n#aj-pet-wiper .pw-giftline{display:block;margin-top:20px;color:#ffc995;font:italic 20px\/1.5 Georgia,serif}\n\n\/* FAQ *\/\n\n#aj-pet-wiper .pw-faq{background:#fffdfa}\n#aj-pet-wiper .pw-faq-wrap{max-width:800px;margin:26px auto 0}\n#aj-pet-wiper .pw-faq details{border-bottom:1px solid #dce8df}\n#aj-pet-wiper .pw-faq summary{display:list-item;padding:18px 5px;font:700 15px\/1.55 Arial,sans-serif;color:var(--pine);cursor:pointer}\n#aj-pet-wiper .pw-faq details p{padding:0 5px 18px}\n\n\/* FINAL BUTTON *\/\n\n#aj-pet-wiper .pw-end{text-align:center;background:#13332c;padding:49px 20px}\n#aj-pet-wiper .pw-end h2{color:#fff9ed}\n#aj-pet-wiper .pw-end .pw-label{color:#f2ca94}\n#aj-pet-wiper .pw-end p{max-width:620px;margin:16px auto 0;color:#dceee3}\n#aj-pet-wiper .pw-end a{display:inline-block;margin-top:24px;width:100%;max-width:360px;border:1px solid #ffe1b5;border-radius:9px;padding:16px 20px;background:#f1bd7e;color:#273a30;text-decoration:none;text-align:center;font:800 15px\/1.45 Arial,sans-serif}\n#aj-pet-wiper .pw-end a:hover{background:#ffe2b8;color:#273a30}\n\n\/* RESPONSIVE *\/\n\n@container (min-width:760px){\n  #aj-pet-wiper .pw-hero.has-media{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}\n  #aj-pet-wiper .pw-hero{gap:38px;padding:42px}\n  #aj-pet-wiper .pw-section{padding:49px 41px}\n  #aj-pet-wiper .pw-benefits{grid-template-columns:repeat(3,minmax(0,1fr))}\n  #aj-pet-wiper .pw-split.has-media{grid-template-columns:repeat(2,minmax(0,1fr))}\n  #aj-pet-wiper .pw-split-copy{padding:43px}\n  #aj-pet-wiper .pw-steps{grid-template-columns:repeat(4,minmax(0,1fr))}\n  #aj-pet-wiper .pw-grid{grid-template-columns:repeat(3,minmax(0,1fr))}\n}\n@container (max-width:470px){\n  #aj-pet-wiper .pw-section{padding:35px 16px}\n  #aj-pet-wiper .pw-hero{padding:26px 16px 36px}\n  #aj-pet-wiper .pw-split-copy{padding:30px 20px}\n  #aj-pet-wiper .pw-style{padding:21px 10px}\n  #aj-pet-wiper .pw-bar div{font-size:11px}\n}\n@media(prefers-reduced-motion:reduce){\n  #aj-pet-wiper *{transition:none!important;animation:none!important}\n}\n\u003c\/style\u003e\n\n\u003cdiv id=\"aj-pet-wiper\"\u003e\n\n  \u003c!-- HERO --\u003e\n\n  \u003csection class=\"pw-hero\" data-pw-layout\u003e\n    \u003cdiv class=\"pw-hero-copy\"\u003e\n\n      \u003cspan class=\"pw-pill\"\u003e\n        🐾 FOR PET PEOPLE WITH A SENSE OF HUMOR\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Wait… Is That Tail\n        \u003cem\u003eWagging?!\u003c\/em\u003e 🐶\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        Your rear wiper already moves.\n        Now it can look like a little pet tail!\n        A playful cat or dog outline adds\n        a funny twist to an ordinary drive.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        A tiny detail. A big personality.\n        And the kind of rear-window surprise\n        that makes other pet lovers smile.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"pw-hero-bottom\"\u003e\n        \u003cspan\u003e🐱 Cat or Dog\u003c\/span\u003e\n        \u003cspan\u003e🚗 Wiper-Tail Effect\u003c\/span\u003e\n        \u003cspan\u003e❤️ Fun Gift Idea\u003c\/span\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cfigure class=\"pw-visual\" data-pw-hero\u003e\n      \u003cdiv data-pw-slides\u003e\u003c\/div\u003e\n\n      \u003cfigcaption class=\"pw-slider-bottom\"\u003e\n        \u003cspan\u003eReal product photos\u003c\/span\u003e\n        \u003cspan class=\"pw-dots\" data-pw-dots\u003e\u003c\/span\u003e\n      \u003c\/figcaption\u003e\n    \u003c\/figure\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- VALUE BAR --\u003e\n\n  \u003cdiv class=\"pw-bar\"\u003e\n    \u003cdiv\u003e\n      \u003cspan\u003e🐾\u003c\/span\u003e\n      Pick Your Pet\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cspan\u003e🚘\u003c\/span\u003e\n      Make the Wiper Part of the Fun\n    \u003c\/div\u003e\n    \u003cdiv\u003e\n      \u003cspan\u003e🎁\u003c\/span\u003e\n      Share a Little Laugh\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ORIGINAL ANIMATION --\u003e\n\n  \u003csection class=\"pw-section pw-motion\" data-pw-motion\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n      \u003cspan class=\"pw-label\"\u003e\n        THIS IS THE FUN PART\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Watch the Tail Join the Ride.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"pw-desc\"\u003e\n        It's the movement of your vehicle's\n        existing rear wiper that creates\n        the playful tail-like effect.\n        See the original product\n        demonstration below.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-motion-stage\" data-pw-motion-stage\u003e\u003c\/div\u003e\n\n    \u003cspan class=\"pw-note\"\u003e\n      Actual movement depends on the rear-wiper\n      position and sweep of your vehicle.\n    \u003c\/span\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- THREE SELLING POINTS --\u003e\n\n  \u003csection class=\"pw-section\" style=\"background:#f8faf5\"\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n      \u003cspan class=\"pw-label\"\u003e\n        SMALL STICKER. BIG SMILE.\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Why It's So Much Fun.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"pw-desc\"\u003e\n        A cute, clever way to bring\n        a little pet personality\n        to your everyday car.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-benefits\"\u003e\n\n      \u003carticle class=\"pw-benefit\"\u003e\n        \u003cspan class=\"pw-icon\"\u003e🐶\u003c\/span\u003e\n\n        \u003ch3\u003e\n          A Pet-Lover's Personality\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Show off your love of cats or dogs\n          with a playful outline\n          that doesn't need to cover\n          your whole rear window.\n        \u003c\/p\u003e\n      \u003c\/article\u003e\n\n      \u003carticle class=\"pw-benefit\"\u003e\n        \u003cspan class=\"pw-icon\"\u003e🚗\u003c\/span\u003e\n\n        \u003ch3\u003e\n          The Wiper Becomes the Joke\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Designed to work visually\n          with a suitable rear wiper,\n          so an ordinary sweep resembles\n          a wagging little tail.\n        \u003c\/p\u003e\n      \u003c\/article\u003e\n\n      \u003carticle class=\"pw-benefit\"\u003e\n        \u003cspan class=\"pw-icon\"\u003e😍\u003c\/span\u003e\n\n        \u003ch3\u003e\n          One Unexpected Detail\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          A fun conversation starter\n          for drivers who like accessories\n          with character rather than\n          just another plain sticker.\n        \u003c\/p\u003e\n      \u003c\/article\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- PRODUCT STORY --\u003e\n\n  \u003csection class=\"pw-split\" data-pw-layout\u003e\n\n    \u003cfigure class=\"pw-photo\" data-pw-photo=\"1\"\u003e\u003c\/figure\u003e\n\n    \u003cdiv class=\"pw-split-copy\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        THE CLEVER LITTLE TWIST\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        It's Not Just a Sticker.\n        It's the Punchline.\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        The pet outline sits on the rear glass.\n        With the right placement,\n        your wiper becomes part of the picture —\n        and every sweep looks like\n        a little tail wag.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        No separate motor or animated screen\n        is needed for the effect.\n        The visual joke comes from\n        the wiper your car already has.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        \u003cstrong\u003eImportant:\u003c\/strong\u003e\n        The exact look varies with\n        the shape, location and sweep\n        of your rear wiper.\n        Check compatibility before applying.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"pw-quote\"\u003e\n        “Okay… now I kind of want to\n        use the rear wiper.” 😂\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- STYLE SELECTION --\u003e\n\n  \u003csection class=\"pw-section pw-styles\"\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        WHICH ONE ARE YOU?\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Team Cat or Team Dog?\n      \u003c\/h2\u003e\n\n      \u003cp class=\"pw-desc\"\u003e\n        Two pet-loving personalities,\n        one wonderfully silly idea.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-style-grid\"\u003e\n\n      \u003cdiv class=\"pw-style\"\u003e\n\n        \u003cspan class=\"pw-emoji\"\u003e🐱\u003c\/span\u003e\n\n        \u003ch3\u003e\n          Team Cat\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          A charming cat-inspired outline\n          for the proud cat person\n          in your life.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"pw-style\"\u003e\n\n        \u003cspan class=\"pw-emoji\"\u003e🐶\u003c\/span\u003e\n\n        \u003ch3\u003e\n          Team Dog\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          A playful puppy-inspired look\n          for anyone who loves\n          a wagging tail.\n        \u003c\/p\u003e\n\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-options\" data-pw-options\u003e\n\n      \u003ch3\u003e\n        Available options on this product\n      \u003c\/h3\u003e\n\n      \u003cdiv class=\"pw-chips\" data-pw-chips\u003e\u003c\/div\u003e\n\n      \u003cp style=\"margin-top:10px;font-size:12px\"\u003e\n        Select your actual design and finish\n        in the original product options above.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- REAL PRODUCT PHOTOS --\u003e\n\n  \u003csection class=\"pw-section pw-gallery\" data-pw-gallery\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        THE DETAILS FROM EVERY ANGLE\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        See the Real Designs Up Close.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"pw-desc\"\u003e\n        Photos below are loaded\n        from this product's original\n        Shopify gallery — not borrowed\n        from another store.\n      \u003c\/p\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-grid\" data-pw-grid\u003e\u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- LIFESTYLE --\u003e\n\n  \u003csection class=\"pw-split alt\" data-pw-layout\u003e\n\n    \u003cdiv class=\"pw-split-copy\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        A LITTLE PERSONALITY FOR THE ROAD\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Make the Back of Your Car\n        a Little Cuter.\n      \u003c\/h2\u003e\n\n      \u003cp\u003e\n        It's amazing how one small,\n        playful detail can change\n        the feel of a car.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        Whether you're heading to work,\n        on the school run or meeting\n        a friend, your favorite furry\n        companion can come along in spirit.\n      \u003c\/p\u003e\n\n      \u003cp\u003e\n        And for someone who proudly says\n        their pet is part of the family?\n        It's a sweet little gift\n        with a funny twist.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"pw-quote\"\u003e\n        Small detail.\n        Big pet-parent energy. 🐾\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n    \u003cfigure class=\"pw-photo\" data-pw-photo=\"2\"\u003e\u003c\/figure\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- INSTALLATION GUIDE --\u003e\n\n  \u003csection class=\"pw-section pw-how\"\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        CHECK THE FIT BEFORE YOU STICK\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Four Steps to the Best Result.\n      \u003c\/h2\u003e\n\n      \u003cp class=\"pw-desc\"\u003e\n        The right placement matters\n        as much as the design.\n        Test the wiper path before\n        committing to the position.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-steps\"\u003e\n\n      \u003carticle class=\"pw-step\"\u003e\n\n        \u003cb\u003e01\u003c\/b\u003e\n\n        \u003ch3\u003e\n          Check Your Wiper\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Look at your rear-window size,\n          wiper pivot and sweep.\n          Compare the position with\n          the actual product photos.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n      \u003carticle class=\"pw-step\"\u003e\n\n        \u003cb\u003e02\u003c\/b\u003e\n\n        \u003ch3\u003e\n          Clean the Glass\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Clean and fully dry\n          the application area.\n          Follow any surface preparation\n          instructions supplied\n          with the decal.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n      \u003carticle class=\"pw-step\"\u003e\n\n        \u003cb\u003e03\u003c\/b\u003e\n\n        \u003ch3\u003e\n          Plan the Placement\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          Position the pet outline\n          so the wiper resembles its tail\n          without covering joints\n          or the wiper blade's\n          working edge.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n      \u003carticle class=\"pw-step\"\u003e\n\n        \u003cb\u003e04\u003c\/b\u003e\n\n        \u003ch3\u003e\n          Check the Movement\n        \u003c\/h3\u003e\n\n        \u003cp\u003e\n          After applying, confirm\n          the rear wiper operates normally\n          and that the decal does not\n          interfere with your rearward view.\n        \u003c\/p\u003e\n\n      \u003c\/article\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-safety\"\u003e\n\n      \u003cstrong\u003e\n        ⚠️ Important for safe use:\n      \u003c\/strong\u003e\n\n      This is a decorative decal,\n      not a universal-fit accessory.\n      Car models vary. Never place it\n      over the wiper blade, moving mechanism,\n      cameras, sensors, lights or an area\n      that obstructs the driver's view.\n      Make sure use complies with\n      local vehicle-window rules.\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- GIFT SECTION --\u003e\n\n  \u003csection class=\"pw-section pw-gift\"\u003e\n\n    \u003cspan class=\"pw-label\"\u003e\n      FOR THE FRIEND WHO CALLS THEIR PET THEIR BABY\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      The Kind of Little Gift\n      That Gets a Laugh. 🎁\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      Know someone who has\n      a camera roll full of dog photos?\n      Or a friend whose cat\n      runs the whole house?\n    \u003c\/p\u003e\n\n    \u003cp\u003e\n      This quirky little touch makes\n      a playful surprise for pet-loving\n      drivers — a gift that's personal,\n      funny, and easy to remember.\n    \u003c\/p\u003e\n\n    \u003cspan class=\"pw-giftline\"\u003e\n      “I saw this and immediately\n      thought of you!” 🐾❤️\n    \u003c\/span\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- FAQ --\u003e\n\n  \u003csection class=\"pw-section pw-faq\"\u003e\n\n    \u003cdiv class=\"pw-center\"\u003e\n\n      \u003cspan class=\"pw-label\"\u003e\n        GOOD TO KNOW BEFORE YOU ORDER\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Frequently Asked Questions.\n      \u003c\/h2\u003e\n\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"pw-faq-wrap\"\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Does the tail move on its own?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          No separate powered movement\n          is implied. The playful effect\n          comes from your car's existing\n          rear wiper as it sweeps.\n          The result varies with\n          the wiper layout.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Will this work on every car?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Not necessarily. The car needs\n          a suitably positioned rear wiper\n          and enough clear rear-window space.\n          Check the size, pivot location\n          and sweep pattern before choosing.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Which designs or finishes\n          are available?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Check the live product options\n          at the top of the page.\n          Only the designs and finishes\n          listed for your selected variant\n          are included.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Is it difficult to apply?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          Plan the location first,\n          clean and dry the surface,\n          and follow the application\n          instructions supplied with the decal.\n          Keep the sticker clear\n          of the moving blade and pivot.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n      \u003cdetails\u003e\n        \u003csummary\u003e\n          Can I use the rear wiper normally?\n        \u003c\/summary\u003e\n        \u003cp\u003e\n          It must not restrict\n          normal wiper travel or visibility.\n          If your vehicle's wiper\n          or rearward visibility is affected,\n          do not use it in that position.\n        \u003c\/p\u003e\n      \u003c\/details\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/section\u003e\n\n  \u003c!-- ONLY BOTTOM BUTTON --\u003e\n\n  \u003csection class=\"pw-end\"\u003e\n\n    \u003cspan class=\"pw-label\"\u003e\n      A LITTLE MISCHIEF GOES A LONG WAY\n    \u003c\/span\u003e\n\n    \u003ch2\u003e\n      Give Your Car a Tail-Wagging Twist.\n    \u003c\/h2\u003e\n\n    \u003cp\u003e\n      Pick the pet that feels most like you —\n      then head back to the original\n      product gallery and options\n      to see the details.\n    \u003c\/p\u003e\n\n    \u003ca href=\"#\"\u003e\n      Back to the Top ↑\n    \u003c\/a\u003e\n\n    \u003cp style=\"margin-top:10px;font-size:12px\"\u003e\n      Returns to the original product\n      images and options.\n    \u003c\/p\u003e\n\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function(){\n  'use strict';\n\n  var HANDLE =\n    'funny-pet-rear-wiper-decal-cat-dog-car-window-sticker';\n\n  function init(){\n\n    var root = document.getElementById(\n      'aj-pet-wiper'\n    );\n\n    if(!root || root.dataset.ready === '1'){\n      return;\n    }\n\n    root.dataset.ready = '1';\n\n    function one(selector,context){\n      return (context||document)\n        .querySelector(selector);\n    }\n\n    function all(selector,context){\n      return Array.prototype.slice.call(\n        (context||document)\n          .querySelectorAll(selector)\n      );\n    }\n\n    function link(value){\n\n      if(value \u0026\u0026 typeof value === 'object'){\n        value =\n          value.src ||\n          value.url ||\n          value.contentUrl ||\n          '';\n      }\n\n      if(\n        typeof value !== 'string' ||\n        !value.trim()\n      ){\n        return '';\n      }\n\n      try{\n\n        var u = new URL(\n          value,\n          location.origin\n        );\n\n        return \/^https?:$\/.test(u.protocol)\n          ? u.href\n          : '';\n\n      }catch(e){\n        return '';\n      }\n    }\n\n    function fromShopify(url){\n\n      return \/cdn\\.shopify\\.com|\\\/cdn\\\/shop\\\/|\\\/s\\\/files\\\/\/i\n        .test(url);\n    }\n\n    function motion(url){\n\n      return \/\\.(gif|mp4|webm)(?:[?#]|$)\/i\n        .test(url);\n    }\n\n    function video(url){\n\n      return \/\\.(mp4|webm)(?:[?#]|$)\/i\n        .test(url);\n    }\n\n    function dedupe(values){\n\n      var seen = {};\n\n      return values.map(link).filter(\n        function(src){\n\n          var key = src.split('?')[0];\n\n          if(\n            !src ||\n            !fromShopify(src) ||\n            seen[key]\n          ){\n            return false;\n          }\n\n          seen[key] = 1;\n          return true;\n        }\n      );\n    }\n\n    \/* Get high-resolution original photos *\/\n\n    function candidates(img){\n\n      var result = [];\n\n      [\n        'data-zoom-image',\n        'data-full-size',\n        'data-src',\n        'data-original',\n        'src'\n      ].forEach(function(attr){\n\n        var value=img.getAttribute(attr);\n\n        if(value){\n          result.push(value);\n        }\n      });\n\n      var srcset =\n        img.getAttribute('srcset') ||\n        img.getAttribute('data-srcset');\n\n      if(srcset){\n\n        srcset.split(',')\n          .map(function(part){\n\n            var a=part.trim().split(\/\\s+\/);\n\n            return {\n              src:a[0],\n              width:parseInt(a[1],10)||0\n            };\n          })\n          .sort(function(a,b){\n            return b.width-a.width;\n          })\n          .forEach(function(item){\n            result.unshift(item.src);\n          });\n      }\n\n      if(img.currentSrc){\n        result.unshift(img.currentSrc);\n      }\n\n      return result.map(link)\n        .filter(fromShopify)[0] || '';\n    }\n\n    \/* Original gallery and description *\/\n\n    function originalMedia(){\n\n      var images = [];\n      var animations = [];\n\n      var selectors = [\n        'media-gallery',\n        'product-media-gallery',\n        '.product__media-list',\n        '.product__media-wrapper',\n        '.product-gallery',\n        '.product-single__photos',\n        '[data-product-gallery]',\n        '.product__description',\n        '.product-single__description'\n      ];\n\n      all(selectors.join(','))\n        .forEach(function(section){\n\n          if(root.contains(section)){\n            return;\n          }\n\n          all('img',section)\n            .forEach(function(img){\n\n              var src=candidates(img);\n\n              if(!src){\n                return;\n              }\n\n              if(motion(src)){\n                animations.push(src);\n              }else{\n                images.push(src);\n              }\n\n            });\n\n          all('video,video source',section)\n            .forEach(function(el){\n\n              var src=link(\n                el.currentSrc ||\n                el.getAttribute('src')\n              );\n\n              if(\n                src \u0026\u0026\n                video(src) \u0026\u0026\n                fromShopify(src)\n              ){\n                animations.push(src);\n              }\n\n            });\n        });\n\n      return {\n        images:dedupe(images),\n        animations:dedupe(animations)\n      };\n    }\n\n    \/* Parse original product description *\/\n\n    function descriptionMedia(html){\n\n      var images=[];\n      var animations=[];\n\n      if(!html){\n\n        return {\n          images:images,\n          animations:animations\n        };\n      }\n\n      var doc=new DOMParser()\n        .parseFromString(\n          html,\n          'text\/html'\n        );\n\n      all('img',doc).forEach(function(img){\n\n        var src=candidates(img);\n\n        if(motion(src)){\n          animations.push(src);\n\n        }else if(src){\n          images.push(src);\n        }\n      });\n\n      all('video,video source',doc)\n        .forEach(function(el){\n\n          var src=link(\n            el.getAttribute('src')\n          );\n\n          if(\n            src \u0026\u0026\n            video(src) \u0026\u0026\n            fromShopify(src)\n          ){\n            animations.push(src);\n          }\n        });\n\n      return {\n        images:dedupe(images),\n        animations:dedupe(animations)\n      };\n    }\n\n    \/* Verify actual image loads *\/\n\n    function testPhoto(src){\n\n      return new Promise(\n        function(resolve){\n\n          var img=new Image();\n\n          img.onload=function(){\n\n            resolve(\n              img.naturalWidth\n                ? src\n                : null\n            );\n          };\n\n          img.onerror=function(){\n            resolve(null);\n          };\n\n          img.src=src;\n        }\n      );\n    }\n\n    \/* Static photos in story sections *\/\n\n    function photo(holder,src,index){\n\n      if(!holder || !src){\n        return;\n      }\n\n      var img=new Image();\n\n      img.src=src;\n\n      img.alt=\n        'Cat or dog rear-wiper decal, actual product photo';\n\n      img.decoding='async';\n\n      img.loading=index===0\n        ? 'eager'\n        : 'lazy';\n\n      holder.insertBefore(\n        img,\n        holder.firstChild\n      );\n\n      holder.classList.add('visible');\n\n      var layout=holder.closest(\n        '[data-pw-layout]'\n      );\n\n      if(layout){\n        layout.classList.add('has-media');\n      }\n    }\n\n    \/* Hero auto carousel *\/\n\n    function showPhotos(images){\n\n      if(!images.length){\n        return;\n      }\n\n      var hero=one(\n        '[data-pw-hero]',root\n      );\n\n      var slides=one(\n        '[data-pw-slides]',root\n      );\n\n      var dots=one(\n        '[data-pw-dots]',root\n      );\n\n      var heroList=images.slice(\n        0,\n        Math.min(4,images.length)\n      );\n\n      var items=[];\n      var markers=[];\n      var active=0;\n\n      heroList.forEach(function(src,i){\n\n        var frame=document.createElement(\n          'div'\n        );\n\n        frame.className=\n          'pw-slide'+\n          (i===0?' active':'');\n\n        var img=new Image();\n\n        img.src=src;\n\n        img.loading=i===0\n          ? 'eager'\n          : 'lazy';\n\n        img.alt=\n          'Actual pet rear-wiper decal product image '+\n          (i+1);\n\n        frame.appendChild(img);\n\n        slides.appendChild(frame);\n\n        items.push(frame);\n\n        var dot=document.createElement(\n          'i'\n        );\n\n        if(i===0){\n          dot.className='active';\n        }\n\n        dots.appendChild(dot);\n        markers.push(dot);\n\n      });\n\n      hero.classList.add('visible');\n\n      one('.pw-hero',root)\n        .classList.add('has-media');\n\n      function go(n){\n\n        active=\n          (n+items.length)%\n          items.length;\n\n        items.forEach(function(item,i){\n\n          item.classList.toggle(\n            'active',\n            i===active\n          );\n\n          markers[i].classList.toggle(\n            'active',\n            i===active\n          );\n        });\n      }\n\n      if(items.length\u003e1){\n\n        window.setInterval(function(){\n\n          if(\n            !document.hidden \u0026\u0026\n            !hero.matches(':hover')\n          ){\n            go(active+1);\n          }\n\n        },4800);\n\n        var startX=null;\n\n        hero.addEventListener(\n          'touchstart',\n          function(e){\n\n            startX=\n              e.touches[0].clientX;\n\n          },\n          {passive:true}\n        );\n\n        hero.addEventListener(\n          'touchend',\n          function(e){\n\n            if(startX===null){\n              return;\n            }\n\n            var delta=\n              e.changedTouches[0].clientX-\n              startX;\n\n            if(Math.abs(delta)\u003e40){\n\n              go(\n                active+\n                (delta\u003c0?1:-1)\n              );\n            }\n\n            startX=null;\n\n          },\n          {passive:true}\n        );\n      }\n\n      \/* Static image sections *\/\n\n      if(images[1]){\n\n        photo(\n          one(\n            '[data-pw-photo=\"1\"]',\n            root\n          ),\n          images[1],\n          1\n        );\n      }\n\n      if(images[2]){\n\n        photo(\n          one(\n            '[data-pw-photo=\"2\"]',\n            root\n          ),\n          images[2],\n          2\n        );\n      }\n\n      \/* Extra product photos *\/\n\n      var extra=images.slice(3,9);\n\n      var gallery=one(\n        '[data-pw-gallery]',root\n      );\n\n      var grid=one(\n        '[data-pw-grid]',root\n      );\n\n      extra.forEach(function(src,i){\n\n        var fig=document.createElement(\n          'figure'\n        );\n\n        fig.className='pw-tile';\n\n        var im=new Image();\n\n        im.src=src;\n        im.loading='lazy';\n\n        im.alt=\n          'Pet wiper decal product photo '+\n          (i+4);\n\n        var caption=document.createElement(\n          'figcaption'\n        );\n\n        caption.textContent=\n          'Product View '+(i+4);\n\n        fig.appendChild(im);\n        fig.appendChild(caption);\n\n        grid.appendChild(fig);\n      });\n\n      if(extra.length){\n\n        gallery.classList.add(\n          'visible'\n        );\n      }\n    }\n\n    \/* Keep original GIF \/ MP4 animated *\/\n\n    function showAnimation(src){\n\n      if(!src){\n        return;\n      }\n\n      var holder=one(\n        '[data-pw-motion-stage]',root\n      );\n\n      var section=one(\n        '[data-pw-motion]',root\n      );\n\n      if(video(src)){\n\n        var v=document.createElement(\n          'video'\n        );\n\n        v.src=src;\n        v.autoplay=true;\n        v.muted=true;\n        v.loop=true;\n        v.playsInline=true;\n        v.controls=true;\n        v.preload='metadata';\n\n        v.addEventListener(\n          'loadedmetadata',\n          function(){\n\n            section.classList.add(\n              'visible'\n            );\n\n            v.play().catch(\n              function(){}\n            );\n          },\n          {once:true}\n        );\n\n        holder.appendChild(v);\n\n      }else{\n\n        var image=new Image();\n\n        image.alt=\n          'Original animated pet rear-wiper decal demonstration';\n\n        image.onload=function(){\n\n          section.classList.add(\n            'visible'\n          );\n        };\n\n        image.src=src;\n\n        holder.appendChild(image);\n      }\n    }\n\n    \/* Read the product's actual variants *\/\n\n    function showOptions(product){\n\n      if(\n        !product ||\n        !Array.isArray(product.variants)\n      ){\n        return;\n      }\n\n      var titles=[];\n\n      product.variants.forEach(\n        function(v){\n\n          var t=String(\n            v.title||''\n          ).trim();\n\n          if(\n            t \u0026\u0026\n            !\/^default title$\/i.test(t) \u0026\u0026\n            titles.indexOf(t)===-1\n          ){\n            titles.push(t);\n          }\n        }\n      );\n\n      if(titles.length\u003c2){\n        return;\n      }\n\n      var container=one(\n        '[data-pw-options]',root\n      );\n\n      var chips=one(\n        '[data-pw-chips]',root\n      );\n\n      titles.slice(0,12)\n        .forEach(function(t){\n\n          var el=document.createElement(\n            'span'\n          );\n\n          el.textContent=t;\n\n          chips.appendChild(el);\n        });\n\n      container.classList.add(\n        'visible'\n      );\n    }\n\n    \/* Load only this product's data *\/\n\n    async function load(){\n\n      var old=originalMedia();\n\n      var images=[];\n      var animations=[];\n      var product=null;\n\n      try{\n\n        var response=await fetch(\n          '\/products\/'+HANDLE+'.js',\n          {\n            credentials:'same-origin'\n          }\n        );\n\n        if(response.ok){\n\n          var data=await response.json();\n\n          if(\n            data \u0026\u0026\n            data.handle===HANDLE\n          ){\n            product=data;\n          }\n        }\n\n      }catch(e){}\n\n      if(product){\n\n        (product.images||[])\n          .forEach(function(item){\n\n            var src=link(item);\n\n            if(motion(src)){\n              animations.push(src);\n\n            }else if(src){\n              images.push(src);\n            }\n          });\n\n        if(Array.isArray(product.media)){\n\n          product.media.forEach(\n            function(item){\n\n              var src=link(\n                item.sources \u0026\u0026\n                item.sources[0] ||\n                item.src ||\n                item.preview_image\n              );\n\n              if(video(src)){\n                animations.push(src);\n              }\n            }\n          );\n        }\n\n        var described=descriptionMedia(\n          product.description||''\n        );\n\n        images=images.concat(\n          described.images\n        );\n\n        animations=animations.concat(\n          described.animations\n        );\n\n        showOptions(product);\n      }\n\n      images=dedupe(\n        images.concat(old.images)\n      ).filter(function(s){\n\n        return !motion(s);\n      });\n\n      animations=dedupe(\n        animations.concat(old.animations)\n      ).filter(motion);\n\n      if(animations.length){\n\n        showAnimation(\n          animations[0]\n        );\n      }\n\n      if(images.length){\n\n        var valid=(\n          await Promise.all(\n            images.slice(0,16)\n              .map(testPhoto)\n          )\n        ).filter(Boolean);\n\n        showPhotos(valid);\n      }\n    }\n\n    load();\n  }\n\n  if(document.readyState==='loading'){\n\n    document.addEventListener(\n      'DOMContentLoaded',\n      init,\n      {once:true}\n    );\n\n  }else{\n    init();\n  }\n\n  document.addEventListener(\n    'shopify:section:load',\n    init\n  );\n\n})();\n\u003c\/script\u003e\n\u003cstyle\u003e\n  #aj-pet-wiper-effect[hidden] {\n    display: none !important;\n  }\n\n  #aj-pet-wiper-effect {\n    position: fixed;\n    inset: 0;\n    z-index: 9998;\n    pointer-events: none;\n  }\n\n  #aj-pet-wiper-effect canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n    pointer-events: none;\n  }\n\n  #aj-pet-wiper-effect .aj-wiper-close {\n    position: absolute;\n    top: calc(env(safe-area-inset-top, 0px) + 64px);\n    right: calc(env(safe-area-inset-right, 0px) + 12px);\n    min-width: 44px;\n    min-height: 44px;\n    padding: 8px 13px;\n    border: 1px solid #d2e4ee;\n    border-radius: 22px;\n    background: #183449;\n    color: #fff;\n    font: 600 12px\/1.3 Arial, sans-serif;\n    cursor: pointer;\n    pointer-events: auto;\n    box-shadow: 0 2px 12px rgba(15, 38, 55, 0.18);\n  }\n\n  #aj-pet-wiper-effect .aj-wiper-close:focus-visible {\n    outline: 2px solid #fff;\n    outline-offset: 3px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #aj-pet-wiper-effect {\n      display: none !important;\n    }\n  }\n\u003c\/style\u003e\n\n\u003cdiv id=\"aj-pet-wiper-effect\" hidden\u003e\n  \u003ccanvas aria-hidden=\"true\"\u003e\u003c\/canvas\u003e\n  \u003cbutton type=\"button\" class=\"aj-wiper-close\" aria-label=\"Close the rain and paw print effect\"\u003e\n    Skip effect ×\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  (() =\u003e {\n    const productPath = '\/products\/funny-pet-rear-wiper-decal-cat-dog-car-window-sticker';\n    const path = window.location.pathname.replace(\/\\\/+$\/, '');\n    const layer = document.getElementById('aj-pet-wiper-effect');\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n    const themeEditor = Boolean(window.Shopify \u0026\u0026 window.Shopify.designMode);\n    const sessionKey = 'alasjoy:pet-wiper-effect:v1';\n\n    if (!layer || !path.endsWith(productPath) || reducedMotion.matches || document.hidden) return;\n    if (layer.dataset.started === 'true') return;\n\n    const canvas = layer.querySelector('canvas');\n    const closeButton = layer.querySelector('button');\n    const context = canvas.getContext('2d');\n    if (!context) return;\n\n    try {\n      if (!themeEditor \u0026\u0026 sessionStorage.getItem(sessionKey)) return;\n      if (!themeEditor) sessionStorage.setItem(sessionKey, 'played');\n    } catch (error) {\n      \/\/ The effect still works if the browser disables session storage.\n    }\n\n    layer.dataset.started = 'true';\n    layer.hidden = false;\n\n    const duration = 4800;\n    const sweepStart = 1050;\n    const sweepEnd = 2080;\n    const startTime = performance.now();\n    const section = layer.closest('.shopify-section');\n    let width = 0;\n    let height = 0;\n    let frame = 0;\n    let drops = [];\n\n    const paws = [\n      { x: 0.12, y: 0.65, angle: -0.45, color: '#ffffff' },\n      { x: 0.24, y: 0.42, angle: 0.20, color: '#a7dcf5' },\n      { x: 0.37, y: 0.24, angle: -0.22, color: '#f8bed5' },\n      { x: 0.62, y: 0.24, angle: 0.18, color: '#ffffff' },\n      { x: 0.77, y: 0.43, angle: -0.20, color: '#fbe1a6' },\n      { x: 0.89, y: 0.66, angle: 0.40, color: '#a7dcf5' }\n    ];\n\n    const clamp = (value) =\u003e Math.max(0, Math.min(1, value));\n\n    function resize() {\n      const bounds = layer.getBoundingClientRect();\n      width = Math.max(1, bounds.width);\n      height = Math.max(1, bounds.height);\n\n      const density = Math.min(window.devicePixelRatio || 1, 1.5);\n      canvas.width = Math.round(width * density);\n      canvas.height = Math.round(height * density);\n      context.setTransform(canvas.width \/ width, 0, 0, canvas.height \/ height, 0, 0);\n\n      const count = width \u003c 600 ? 52 : 90;\n      drops = Array.from({ length: count }, () =\u003e ({\n        x: Math.random() * width,\n        y: Math.random() * height,\n        speed: 0.05 + Math.random() * 0.13,\n        length: 6 + Math.random() * 15,\n        opacity: 0.18 + Math.random() * 0.32\n      }));\n    }\n\n    function drawPaw(paw, elapsed, fade) {\n      const progress = clamp(elapsed \/ 420);\n      if (progress === 0 || elapsed \u003e 1750) return;\n\n      const size = Math.max(12, Math.min(width * 0.035, 26));\n      context.save();\n      context.translate(paw.x * width, paw.y * height + (1 - progress) * 16);\n      context.rotate(paw.angle);\n      context.scale(size, size);\n      context.globalAlpha = progress * clamp((1750 - elapsed) \/ 500) * fade;\n      context.fillStyle = paw.color;\n      context.shadowColor = 'rgba(26, 75, 103, 0.45)';\n      context.shadowBlur = 8;\n\n      context.beginPath();\n      context.ellipse(0, 0.23, 0.43, 0.33, 0, 0, Math.PI * 2);\n      context.ellipse(-0.47, -0.13, 0.15, 0.20, -0.4, 0, Math.PI * 2);\n      context.ellipse(-0.18, -0.36, 0.15, 0.21, -0.15, 0, Math.PI * 2);\n      context.ellipse(0.18, -0.36, 0.15, 0.21, 0.15, 0, Math.PI * 2);\n      context.ellipse(0.47, -0.13, 0.15, 0.20, 0.4, 0, Math.PI * 2);\n      context.fill();\n      context.restore();\n    }\n\n    function stop() {\n      window.cancelAnimationFrame(frame);\n      layer.hidden = true;\n      window.removeEventListener('resize', resize);\n      document.removeEventListener('visibilitychange', onVisibilityChange);\n      document.removeEventListener('shopify:section:unload', onSectionUnload);\n      reducedMotion.removeEventListener('change', onMotionChange);\n      closeButton.removeEventListener('click', stop);\n    }\n\n    function onVisibilityChange() {\n      if (document.hidden) stop();\n    }\n\n    function onSectionUnload(event) {\n      if (event.target === section || event.target.contains(layer)) stop();\n    }\n\n    function onMotionChange(event) {\n      if (event.matches) stop();\n    }\n\n    function draw(now) {\n      const elapsed = now - startTime;\n      if (elapsed \u003e= duration || !layer.isConnected) {\n        stop();\n        return;\n      }\n\n      const fade = clamp((duration - elapsed) \/ 620);\n      const sweep = clamp((elapsed - sweepStart) \/ (sweepEnd - sweepStart));\n      const pivotX = width * 0.5;\n      const pivotY = height * 1.08;\n      const angle = -Math.PI * 0.94 + Math.PI * 0.88 * sweep;\n      const reach = Math.hypot(width, height * 1.1);\n\n      context.clearRect(0, 0, width, height);\n      context.lineCap = 'round';\n\n      for (const drop of drops) {\n        const y = (drop.y + elapsed * drop.speed) % (height + 20) - 20;\n        const dropAngle = Math.atan2(y - pivotY, drop.x - pivotX);\n        if (sweep \u003e 0 \u0026\u0026 dropAngle \u003c= angle) continue;\n\n        context.globalAlpha = drop.opacity * clamp(elapsed \/ 300) * fade;\n        context.strokeStyle = '#83b9d4';\n        context.lineWidth = 1.3;\n        context.beginPath();\n        context.moveTo(drop.x, y);\n        context.lineTo(drop.x - 3, y + drop.length);\n        context.stroke();\n      }\n\n      if (elapsed \u003e= sweepStart \u0026\u0026 elapsed \u003c= sweepEnd) {\n        context.save();\n        context.translate(pivotX, pivotY);\n        context.rotate(angle);\n        context.globalAlpha = Math.sin(Math.PI * sweep) * 0.75;\n        context.strokeStyle = '#b9e6fb';\n        context.shadowColor = '#77b2cf';\n        context.shadowBlur = 12;\n        context.lineWidth = 5;\n        context.beginPath();\n        context.moveTo(reach * 0.1, 0);\n        context.lineTo(reach, 0);\n        context.stroke();\n        context.restore();\n      }\n\n      context.globalAlpha = 1;\n      paws.forEach((paw, index) =\u003e drawPaw(paw, elapsed - 1770 - index * 165, fade));\n      frame = window.requestAnimationFrame(draw);\n    }\n\n    resize();\n    closeButton.addEventListener('click', stop);\n    window.addEventListener('resize', resize, { passive: true });\n    document.addEventListener('visibilitychange', onVisibilityChange);\n    document.addEventListener('shopify:section:unload', onSectionUnload);\n    reducedMotion.addEventListener('change', onMotionChange);\n    frame = window.requestAnimationFrame(draw);\n  })();\n\u003c\/script\u003e\n\n\u003c!--\n ALASJOY | PAWS ON THE ROAD\n Funny Cat \u0026 Dog Rear Wiper Decal\n Fullscreen Shopify Custom Liquid Effects\n No External Libraries \/ Closeable \/ Mobile Friendly\n--\u003e\n\n\u003cdiv id=\"aj-paws-road-fx\" aria-label=\"Playful cat and dog decorations\"\u003e\n\u003cstyle\u003e\n#aj-paws-road-fx{\n position:fixed;\n inset:0;\n z-index:30;\n pointer-events:none;\n overflow:hidden;\n isolation:isolate;\n font-family:Arial,Helvetica,sans-serif;\n}\n#aj-paws-road-fx,\n#aj-paws-road-fx *{\n box-sizing:border-box;\n}\n#aj-paws-road-fx.fx-hidden{\n display:none!important;\n}\n\n\/* TRANSPARENT EDGE LIGHT *\/\n#aj-paws-road-fx .pr-glow{\n position:absolute;\n inset:0;\n background:\n  radial-gradient(ellipse at 0% 65%,\n   rgba(77,170,209,.10),transparent 20%),\n  radial-gradient(ellipse at 100% 75%,\n   rgba(255,164,99,.09),transparent 20%);\n}\n\n\/* TOP DECORATIVE STRIP *\/\n#aj-paws-road-fx .pr-top{\n position:absolute;\n top:0;\n left:0;\n width:100%;\n height:29px;\n background:linear-gradient(\n  90deg,\n  #65b3d2,\n  #b7d9e5,\n  #f9bd86,\n  #d4a1cd,\n  #65b3d2\n );\n background-size:220% 100%;\n animation:prRainbow 12s linear infinite;\n clip-path:polygon(\n  0 0,100% 0,100% 55%,\n  95% 75%,90% 55%,85% 75%,\n  80% 55%,75% 75%,70% 55%,\n  65% 75%,60% 55%,55% 75%,\n  50% 55%,45% 75%,40% 55%,\n  35% 75%,30% 55%,25% 75%,\n  20% 55%,15% 75%,10% 55%,\n  5% 75%,0 55%\n );\n opacity:.72;\n}\n@keyframes prRainbow{\n from{background-position:0 0}\n to{background-position:220% 0}\n}\n\n\/* FLOATING PAW PRINTS *\/\n#aj-paws-road-fx .pr-paws,\n#aj-paws-road-fx .pr-sparks{\n position:absolute;\n inset:0;\n overflow:hidden;\n}\n#aj-paws-road-fx .pr-paw{\n position:absolute;\n left:var(--x);\n bottom:-60px;\n width:var(--size);\n height:var(--size);\n color:var(--color);\n opacity:0;\n animation:prPawFloat var(--duration) linear infinite;\n animation-delay:var(--delay);\n will-change:transform;\n}\n#aj-paws-road-fx .pr-paw svg{\n width:100%;\n height:100%;\n display:block;\n}\n@keyframes prPawFloat{\n 0%{\n  opacity:0;\n  transform:translate3d(0,0,0) rotate(-20deg);\n }\n 15%{opacity:var(--alpha)}\n 85%{opacity:var(--alpha)}\n 100%{\n  opacity:0;\n  transform:translate3d(var(--drift),-115vh,0)\n  rotate(28deg);\n }\n}\n\n\/* TINY COLORFUL SPARKLES *\/\n#aj-paws-road-fx .pr-spark{\n position:absolute;\n left:var(--x);\n top:var(--y);\n width:var(--size);\n height:var(--size);\n animation:prSpark var(--duration) ease-in-out infinite;\n animation-delay:var(--delay);\n opacity:.1;\n}\n#aj-paws-road-fx .pr-spark:before,\n#aj-paws-road-fx .pr-spark:after{\n content:\"\";\n position:absolute;\n left:50%;\n top:50%;\n transform:translate(-50%,-50%);\n background:var(--color);\n border-radius:20px;\n box-shadow:0 0 7px var(--color);\n}\n#aj-paws-road-fx .pr-spark:before{\n width:2px;height:100%;\n}\n#aj-paws-road-fx .pr-spark:after{\n width:100%;height:2px;\n}\n@keyframes prSpark{\n 0%,100%{opacity:.1;transform:scale(.55)}\n 50%{opacity:.8;transform:scale(1.2)}\n}\n\n\/* CORNER PETS *\/\n#aj-paws-road-fx .pr-cat,\n#aj-paws-road-fx .pr-dog{\n position:absolute;\n bottom:7px;\n width:130px;\n height:150px;\n filter:drop-shadow(0 5px 8px rgba(26,77,97,.12));\n}\n#aj-paws-road-fx .pr-cat{left:7px}\n#aj-paws-road-fx .pr-dog{right:7px}\n#aj-paws-road-fx .pr-cat svg,\n#aj-paws-road-fx .pr-dog svg{\n display:block;\n width:100%;\n height:100%;\n}\n\n\/* REAR WIPER STYLE TAIL WAG *\/\n#aj-paws-road-fx .pr-cat-tail{\n transform-origin:97px 126px;\n animation:prCatWag 2.7s ease-in-out infinite;\n}\n#aj-paws-road-fx .pr-dog-tail{\n transform-origin:101px 123px;\n animation:prDogWag 2.2s ease-in-out infinite;\n}\n@keyframes prCatWag{\n 0%,100%{transform:rotate(-16deg)}\n 50%{transform:rotate(28deg)}\n}\n@keyframes prDogWag{\n 0%,100%{transform:rotate(-25deg)}\n 50%{transform:rotate(31deg)}\n}\n\n\/* ANIMAL BOBBING *\/\n#aj-paws-road-fx .pr-cat-body{\n animation:prPetBob 4s ease-in-out infinite;\n}\n#aj-paws-road-fx .pr-dog-body{\n animation:prPetBob 3.5s ease-in-out infinite;\n animation-delay:-1s;\n}\n@keyframes prPetBob{\n 0%,100%{transform:translateY(0)}\n 50%{transform:translateY(-3px)}\n}\n\n\/* SUBTLE ROAD LINE *\/\n#aj-paws-road-fx .pr-road{\n position:absolute;\n bottom:0;\n left:0;\n width:100%;\n height:9px;\n background:linear-gradient(\n  90deg,\n  rgba(62,146,183,.42),\n  rgba(246,166,106,.40),\n  rgba(62,146,183,.42)\n );\n}\n#aj-paws-road-fx .pr-road:after{\n content:\"\";\n position:absolute;\n inset:0;\n background:repeating-linear-gradient(\n  90deg,\n  rgba(255,255,255,.6) 0 15px,\n  transparent 15px 35px\n );\n animation:prRoadMove 12s linear infinite;\n}\n@keyframes prRoadMove{\n from{background-position:0 0}\n to{background-position:350px 0}\n}\n\n\/* CLOSE BUTTON *\/\n#aj-paws-road-fx .pr-close{\n position:absolute;\n top:8px;\n right:9px;\n width:33px;\n height:33px;\n border-radius:50%;\n border:1px solid #fff;\n background:#398ba9;\n color:#fff;\n font-size:21px;\n line-height:1;\n display:flex;\n align-items:center;\n justify-content:center;\n cursor:pointer;\n pointer-events:auto;\n z-index:20;\n box-shadow:0 3px 10px rgba(20,88,113,.2);\n}\n#aj-paws-road-fx .pr-close:hover{\n background:#e99b64;\n}\n#aj-paws-road-fx .pr-close:focus-visible{\n outline:3px solid #f0bd96;\n outline-offset:3px;\n}\n\n\/* MOBILE *\/\n@media(max-width:600px){\n #aj-paws-road-fx .pr-top{height:16px}\n #aj-paws-road-fx .pr-cat,\n #aj-paws-road-fx .pr-dog{\n  width:67px;\n  height:78px;\n  bottom:4px;\n }\n #aj-paws-road-fx .pr-cat{left:0}\n #aj-paws-road-fx .pr-dog{right:0}\n #aj-paws-road-fx .pr-road{height:5px}\n #aj-paws-road-fx .pr-close{\n  top:5px;right:5px;\n  width:27px;height:27px;\n  font-size:17px;\n }\n}\n\n\/* ACCESSIBILITY *\/\n@media(prefers-reduced-motion:reduce){\n #aj-paws-road-fx .pr-paws,\n #aj-paws-road-fx .pr-sparks{\n  display:none;\n }\n #aj-paws-road-fx .pr-top,\n #aj-paws-road-fx .pr-road:after,\n #aj-paws-road-fx .pr-cat-tail,\n #aj-paws-road-fx .pr-dog-tail,\n #aj-paws-road-fx .pr-cat-body,\n #aj-paws-road-fx .pr-dog-body{\n  animation:none!important;\n }\n}\n\u003c\/style\u003e\n\n\u003cdiv class=\"pr-glow\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"pr-top\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"pr-paws\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"pr-sparks\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\n\u003c!-- WHITE OUTLINE CAT --\u003e\n\u003cdiv class=\"pr-cat\" aria-hidden=\"true\"\u003e\n\u003csvg viewbox=\"0 0 150 170\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n\n \u003c!-- WAGGING TAIL --\u003e\n \u003cg class=\"pr-cat-tail\"\u003e\n  \u003cpath d=\"M97 126\n   Q129 114 127 88\n   Q123 75 114 84\" fill=\"none\" stroke=\"#4D9DBE\" stroke-width=\"11\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n  \u003cpath d=\"M97 126\n   Q129 114 127 88\n   Q123 75 114 84\" fill=\"none\" stroke=\"#fff\" stroke-width=\"7\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n \u003c\/g\u003e\n\n \u003cg class=\"pr-cat-body\"\u003e\n  \u003c!-- Cat silhouette --\u003e\n  \u003cpath d=\"\n   M29 125\n   L29 67\n   L37 35\n   L53 52\n   Q73 45 91 53\n   L108 35\n   L116 67\n   L116 125\n   Q116 149 73 150\n   Q29 149 29 125Z\" fill=\"#fff\" stroke=\"#4D9DBE\" stroke-width=\"4.5\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Eyes --\u003e\n  \u003cpath d=\"M48 86L58 88\n           M87 88L97 86\" fill=\"none\" stroke=\"#365C72\" stroke-width=\"3\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Nose and mouth --\u003e\n  \u003cpath d=\"M69 101L76 101L73 105Z\" fill=\"#EC9BAA\"\u003e\u003c\/path\u003e\n  \u003cpath d=\"M73 105\n   Q68 112 63 107\n   M73 105Q78 112 83 107\" fill=\"none\" stroke=\"#365C72\" stroke-width=\"2\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Whiskers --\u003e\n  \u003cg fill=\"none\" stroke=\"#6399B2\" stroke-width=\"2\" stroke-linecap=\"round\"\u003e\n   \u003cpath d=\"M58 106L35 99\"\u003e\u003c\/path\u003e\n   \u003cpath d=\"M58 112L35 113\"\u003e\u003c\/path\u003e\n   \u003cpath d=\"M88 106L111 99\"\u003e\u003c\/path\u003e\n   \u003cpath d=\"M88 112L111 113\"\u003e\u003c\/path\u003e\n  \u003c\/g\u003e\n\n  \u003c!-- Paws --\u003e\n  \u003cpath d=\"M49 141Q55 131 62 141\n           M84 141Q91 131 98 141\" fill=\"none\" stroke=\"#6399B2\" stroke-width=\"3\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n \u003c\/g\u003e\n\u003c\/svg\u003e\n\u003c\/div\u003e\n\n\u003c!-- WHITE OUTLINE DOG --\u003e\n\u003cdiv class=\"pr-dog\" aria-hidden=\"true\"\u003e\n\u003csvg viewbox=\"0 0 150 170\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n\n \u003c!-- WAGGING TAIL --\u003e\n \u003cg class=\"pr-dog-tail\"\u003e\n  \u003cpath d=\"M101 123\n   Q141 106 127 81\" fill=\"none\" stroke=\"#E9AB7A\" stroke-width=\"11\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n  \u003cpath d=\"M101 123\n   Q141 106 127 81\" fill=\"none\" stroke=\"#fff\" stroke-width=\"7\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n \u003c\/g\u003e\n\n \u003cg class=\"pr-dog-body\"\u003e\n  \u003c!-- Dog head \/ floppy ears --\u003e\n  \u003cpath d=\"\n   M42 51\n   Q21 35 15 60\n   Q12 84 32 88\n   L32 121\n   Q32 149 74 150\n   Q117 149 117 121\n   L117 86\n   Q136 78 131 57\n   Q126 37 108 50\n   Q91 40 76 44\n   Q59 40 42 51Z\" fill=\"#fff\" stroke=\"#E9AB7A\" stroke-width=\"4.5\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Eyes --\u003e\n  \u003ccircle cx=\"57\" cy=\"86\" r=\"3.5\" fill=\"#5F5860\"\u003e\u003c\/circle\u003e\n  \u003ccircle cx=\"93\" cy=\"86\" r=\"3.5\" fill=\"#5F5860\"\u003e\u003c\/circle\u003e\n\n  \u003c!-- Nose --\u003e\n  \u003cellipse cx=\"75\" cy=\"102\" rx=\"7\" ry=\"5\" fill=\"#5F5860\"\u003e\u003c\/ellipse\u003e\n\n  \u003c!-- Smile --\u003e\n  \u003cpath d=\"M75 107\n   Q65 119 58 110\n   M75 107Q85 119 92 110\" fill=\"none\" stroke=\"#6A6064\" stroke-width=\"2.5\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Chest --\u003e\n  \u003cpath d=\"M61 124Q75 138 91 124\" fill=\"none\" stroke=\"#E9AB7A\" stroke-width=\"2.5\"\u003e\u003c\/path\u003e\n\n  \u003c!-- Paws --\u003e\n  \u003cpath d=\"M49 143Q55 133 64 143\n           M85 143Q94 133 101 143\" fill=\"none\" stroke=\"#E9AB7A\" stroke-width=\"3\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e\n \u003c\/g\u003e\n\u003c\/svg\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"pr-road\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\n\u003c!-- CLOSE EFFECTS --\u003e\n\u003cbutton class=\"pr-close\" type=\"button\" aria-label=\"Hide pet decorations\" title=\"Hide pet effects\"\u003e×\u003c\/button\u003e\n\n\u003cscript\u003e\n(function(){\n \"use strict\";\n\n var root=document.getElementById(\"aj-paws-road-fx\");\n if(!root||root.dataset.ready===\"1\")return;\n root.dataset.ready=\"1\";\n\n var key=\"aj_paws_road_hidden\";\n\n try{\n  if(sessionStorage.getItem(key)===\"1\"){\n   root.classList.add(\"fx-hidden\");\n   return;\n  }\n }catch(e){}\n\n var close=root.querySelector(\".pr-close\");\n\n if(close){\n  close.addEventListener(\"click\",function(){\n   root.classList.add(\"fx-hidden\");\n   try{\n    sessionStorage.setItem(key,\"1\");\n   }catch(e){}\n  });\n }\n\n if(window.matchMedia \u0026\u0026\n    window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches){\n  return;\n }\n\n var layer=root.querySelector(\".pr-paws\");\n var sparks=root.querySelector(\".pr-sparks\");\n var mobile=window.innerWidth\u003c=600;\n\n function rnd(min,max){\n  return min+Math.random()*(max-min);\n }\n\n function edge(){\n  return Math.random()\u003c.5\n   ?rnd(1,17)\n   :rnd(83,99);\n }\n\n var pawSVG=\n '\u003csvg viewBox=\"0 0 48 48\" aria-hidden=\"true\"\u003e'+\n '\u003cg fill=\"currentColor\"\u003e'+\n '\u003cellipse cx=\"24\" cy=\"33\" rx=\"13\" ry=\"10\"\/\u003e'+\n '\u003cellipse cx=\"10\" cy=\"17\" rx=\"5\" ry=\"7\"\/\u003e'+\n '\u003cellipse cx=\"21\" cy=\"11\" rx=\"5\" ry=\"7\"\/\u003e'+\n '\u003cellipse cx=\"33\" cy=\"13\" rx=\"5\" ry=\"7\"\/\u003e'+\n '\u003cellipse cx=\"42\" cy=\"23\" rx=\"4\" ry=\"6\"\/\u003e'+\n '\u003c\/g\u003e\u003c\/svg\u003e';\n\n var colors=[\n  \"#74B7D1\",\n  \"#F0B28B\",\n  \"#A9CDD8\",\n  \"#D3A0C4\"\n ];\n\n \/* PAWS RISING ALONG SCREEN EDGES *\/\n var pawCount=mobile?12:27;\n var frag=document.createDocumentFragment();\n\n for(var i=0;i\u003cpawCount;i++){\n  var paw=document.createElement(\"span\");\n  paw.className=\"pr-paw\";\n  paw.innerHTML=pawSVG;\n\n  paw.style.setProperty(\"--x\",edge()+\"%\");\n  paw.style.setProperty(\"--size\",rnd(14,30)+\"px\");\n  paw.style.setProperty(\"--color\",colors[i%4]);\n  paw.style.setProperty(\"--duration\",rnd(13,24)+\"s\");\n  paw.style.setProperty(\"--delay\",-rnd(0,25)+\"s\");\n  paw.style.setProperty(\"--drift\",rnd(-24,24)+\"px\");\n  paw.style.setProperty(\"--alpha\",rnd(.22,.43).toFixed(2));\n\n  frag.appendChild(paw);\n }\n layer.appendChild(frag);\n\n \/* SOFT COLOR SPARKLES *\/\n var sparkCount=mobile?8:18;\n var sf=document.createDocumentFragment();\n\n for(var j=0;j\u003csparkCount;j++){\n  var item=document.createElement(\"span\");\n  item.className=\"pr-spark\";\n\n  item.style.setProperty(\"--x\",edge()+\"%\");\n  item.style.setProperty(\"--y\",rnd(8,94)+\"%\");\n  item.style.setProperty(\"--size\",rnd(5,12)+\"px\");\n  item.style.setProperty(\"--color\",colors[j%4]);\n  item.style.setProperty(\"--duration\",rnd(2,4)+\"s\");\n  item.style.setProperty(\"--delay\",-rnd(0,5)+\"s\");\n\n  sf.appendChild(item);\n }\n sparks.appendChild(sf);\n\n})();\n\u003c\/script\u003e\n\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  #aj-pet-wiper-loop[hidden] {\n    display: none !important;\n  }\n\n  #aj-pet-wiper-loop {\n    position: fixed;\n    inset: 0;\n    z-index: 9998;\n    pointer-events: none;\n  }\n\n  #aj-pet-wiper-loop canvas {\n    display: block;\n    width: 100%;\n    height: 100%;\n    pointer-events: none;\n  }\n\n  #aj-pet-wiper-loop .aj-wiper-hide {\n    position: absolute;\n    top: calc(env(safe-area-inset-top, 0px) + 76px);\n    right: calc(env(safe-area-inset-right, 0px) + 12px);\n    min-height: 44px;\n    padding: 8px 13px;\n    border: 1px solid #c1d9e6;\n    border-radius: 24px;\n    background: #173246;\n    color: #fff;\n    font: 600 13px\/1.3 Arial, sans-serif;\n    cursor: pointer;\n    pointer-events: auto;\n    box-shadow: 0 3px 12px rgba(20, 44, 64, 0.23);\n  }\n\n  #aj-pet-wiper-loop .aj-wiper-hide:focus-visible {\n    outline: 3px solid #7cd0ff;\n    outline-offset: 3px;\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #aj-pet-wiper-loop {\n      display: none !important;\n    }\n  }\n\u003c\/style\u003e\n\n\u003cdiv id=\"aj-pet-wiper-loop\" hidden\u003e\n  \u003ccanvas aria-hidden=\"true\"\u003e\u003c\/canvas\u003e\n  \u003cbutton type=\"button\" class=\"aj-wiper-hide\" aria-label=\"Hide the rain and paw print effect\"\u003e\n    Hide Effect ×\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n","brand":"zhidou","offers":[{"title":"Cat \u0026 Dog Set (2 Pieces) \/ white","offer_id":68247365681389,"sku":"I4Z26110902-白色2","price":16.99,"currency_code":"USD","in_stock":true},{"title":"Cat \u0026 Dog Set (2 Pieces) \/ Multicolor","offer_id":68291278209261,"sku":null,"price":19.99,"currency_code":"USD","in_stock":true},{"title":"Cat \u0026 Dog Set (4 Pieces – White \u0026 Colorful) \/ white","offer_id":68291497033965,"sku":null,"price":29.99,"currency_code":"USD","in_stock":true},{"title":"Cat \u0026 Dog Set (4 Pieces – White \u0026 Colorful) \/ Multicolor","offer_id":68291497066733,"sku":null,"price":29.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0841\/9354\/2381\/files\/98081536682754049.webp?v=1794282602","url":"https:\/\/alasjoy.com\/products\/funny-pet-rear-wiper-decal-cat-dog-car-window-sticker","provider":"alasjoy","version":"1.0","type":"link"}