{"product_id":"duck-magic-christmas-gifts-duck-magic-advent-calendar","title":"🦆HOT SALE 49% OFF✨Duck Magic Christmas Gifts - Duck Magic Advent Calendar🎁","description":"\u003c!-- Duck Magic: Shopify Custom Liquid. AUTO mode adjusts native quantity only if pack variants are not detected. --\u003e\n\u003cstyle\u003e\n\/* Duck Magic PDP v5.2 — scoped, Shopify Custom Liquid compatible *\/\n.duck-pdp-v5{\n  --dk-forest:#183f32;--dk-dark:#102b22;--dk-gold:#be8c43;\n  --dk-ink:#25372c;--dk-muted:#5c6b62;--dk-sand:#faf5eb;\n  --dk-line:#e7e3da;--dk-white:#fff;--dk-cream:#fffdf8;\n  width:100%;max-width:960px;margin:0 auto;padding:12px 14px 46px;\n  color:var(--dk-ink);font:400 15px\/1.62 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;\n  letter-spacing:normal;text-align:left;background:transparent;\n  overflow-wrap:normal;word-break:normal;container-name:duckPdp;container-type:inline-size;\n}\n.duck-pdp-v5,.duck-pdp-v5 *,.duck-pdp-v5 *::before,.duck-pdp-v5 *::after{box-sizing:border-box}\n.duck-pdp-v5 :is(h2,h3,h4,p,figure){margin:0;padding:0;max-width:none;letter-spacing:normal;text-transform:none}\n.duck-pdp-v5 :is(h2,h3,h4){font-family:Georgia,\"Times New Roman\",serif;color:var(--dk-forest);font-weight:700;line-height:1.2;text-wrap:balance}\n.duck-pdp-v5 p{line-height:1.64}\n.duck-pdp-v5 img{display:block;width:100%;max-width:100%;height:auto;border:0;object-position:center}\n.duck-pdp-v5 .dv5-kicker{color:#865d27;font-size:11px;font-weight:800;letter-spacing:.12em;line-height:1.45;text-transform:uppercase}\n.duck-pdp-v5 .dv5-heading{font-size:clamp(29px,4vw,44px);line-height:1.12;letter-spacing:-.025em!important;color:var(--dk-dark)}\n.duck-pdp-v5 .dv5-section-heading{font-size:clamp(26px,3.3vw,35px);line-height:1.17;letter-spacing:-.025em!important}\n.duck-pdp-v5 .dv5-copy{color:var(--dk-muted);font-size:15px;line-height:1.72}\n.duck-pdp-v5 .dv5-center{text-align:center}\n.duck-pdp-v5 .dv5-lead{max-width:680px;margin:12px auto 0;color:var(--dk-muted);font-size:15px;line-height:1.7}\n.duck-pdp-v5 .dv5-section{margin-top:34px;min-width:0}\n.duck-pdp-v5 .dv5-overline{display:inline-block;max-width:100%;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;padding:8px 13px;border-radius:99px;background:#fffdf8;border:1px solid #e8ddcb;color:var(--dk-forest)}\n.duck-pdp-v5 .dv5-hero{padding:38px 24px 30px;text-align:center;border:1px solid #e8dfd0;border-radius:22px;background:radial-gradient(circle at 88% 2%,#f6e8c9 0,transparent 35%),linear-gradient(150deg,#fbf4e7,#fffefa 67%,#eff4ef);overflow:hidden}\n.duck-pdp-v5 .dv5-hero h2{margin:15px auto 0;max-width:780px}\n.duck-pdp-v5 .dv5-hero-desc{max-width:655px;margin:13px auto 0;font-size:16px;color:#526157;line-height:1.7}\n.duck-pdp-v5 .dv5-hero-journey{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px;margin:17px auto 21px;color:var(--dk-forest);font-size:12px;font-weight:750}\n.duck-pdp-v5 .dv5-hero-journey span{padding:5px 10px;border:1px solid #e5e3d8;background:#ffffffd9;border-radius:30px}\n.duck-pdp-v5 .dv5-hero-journey i{font-style:normal;opacity:.75}\n.duck-pdp-v5 :is(.dv5-hero-cta,.dv5-cta,.dv5-set-btn){appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;padding:12px 22px;border:1px solid var(--dk-forest);border-radius:11px;background:var(--dk-forest);color:white!important;font:800 14px\/1.3 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;letter-spacing:normal;text-decoration:none!important;cursor:pointer;white-space:normal;text-align:center;max-width:100%;transition:background .18s,transform .18s}\n.duck-pdp-v5 :is(.dv5-hero-cta,.dv5-cta,.dv5-set-btn):hover{background:#255b47;transform:translateY(-1px)}\n.duck-pdp-v5 :is(button,a,summary):focus-visible{outline:3px solid #b58c49;outline-offset:3px}\n.duck-pdp-v5 .dv5-tiny{margin-top:11px;font-size:12px;line-height:1.45;color:#68776c}\n.duck-pdp-v5 .dv5-hero-product{margin:16px auto 0;border-radius:18px;overflow:hidden;border:1px solid var(--dk-line);background:#fbf7ef}\n.duck-pdp-v5 .dv5-hero-product img{height:auto;object-fit:contain}\n.duck-pdp-v5 .dv5-image{overflow:hidden;border-radius:15px;border:1px solid #e9e6de;background:#f9f5ee;min-width:0}\n.duck-pdp-v5 .dv5-image--crop{aspect-ratio:4\/3}\n.duck-pdp-v5 .dv5-image--crop img{width:100%;height:100%;object-fit:cover}\n.duck-pdp-v5 .dv5-value-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}\n.duck-pdp-v5 .dv5-value{min-width:0;padding:12px 8px;border:1px solid var(--dk-line);border-radius:12px;background:#fffdf8;text-align:center}\n.duck-pdp-v5 .dv5-value strong{display:block;font:800 14px\/1.4 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;color:var(--dk-forest)}\n.duck-pdp-v5 .dv5-value span{display:block;margin-top:2px;font-size:11px;line-height:1.4;color:var(--dk-muted)}\n.duck-pdp-v5 .dv5-story{padding:28px 25px;border:1px solid #ebe1d4;border-radius:22px;background:var(--dk-sand)}\n.duck-pdp-v5 .dv5-story-header{text-align:center;margin-bottom:20px}\n.duck-pdp-v5 .dv5-story-header h2{margin-top:9px}\n.duck-pdp-v5 .dv5-journey-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px}\n.duck-pdp-v5 .dv5-journey-card{min-width:0;display:flex;flex-direction:column;gap:0;padding:12px;border:1px solid #e7e5df;border-radius:16px;background:white}\n.duck-pdp-v5 .dv5-step-content{min-width:0;padding-top:10px}\n.duck-pdp-v5 .dv5-journey-card .dv5-step{display:block;margin-bottom:5px;color:#825c2e;text-transform:uppercase;letter-spacing:.06em;font-size:10px;line-height:1.45;font-weight:800;white-space:normal}\n.duck-pdp-v5 .dv5-journey-card h3{font:750 17px\/1.28 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;color:var(--dk-forest)}\n.duck-pdp-v5 .dv5-journey-card p{font-size:13px;line-height:1.55;color:var(--dk-muted);margin-top:5px}\n.duck-pdp-v5 .dv5-story-strip{font-weight:750;text-align:center;margin-top:17px;color:var(--dk-forest);font-size:13px}\n.duck-pdp-v5 .dv5-two-col{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:22px}\n.duck-pdp-v5 .dv5-feature-text{min-width:0;padding:4px 0}\n.duck-pdp-v5 .dv5-feature-text h2{margin-top:10px}\n.duck-pdp-v5 .dv5-feature-text .dv5-copy{margin-top:13px}\n.duck-pdp-v5 .dv5-feature-chips,.duck-pdp-v5 .dv5-gift-tags{display:flex;gap:7px;flex-wrap:wrap;margin-top:15px}\n.duck-pdp-v5 .dv5-feature-chips span,.duck-pdp-v5 .dv5-gift-tags span{font-size:11px;font-weight:750;line-height:1.35;padding:7px 10px;background:#f3f6ef;border:1px solid #e4e8dd;border-radius:50px;color:var(--dk-forest)}\n.duck-pdp-v5 .dv5-collage-section{padding:32px 24px 26px;border-radius:22px;background:linear-gradient(150deg,#183f31,#0f2b21);color:white;overflow:hidden}\n.duck-pdp-v5 .dv5-collage-section :is(.dv5-section-heading){color:#fff}\n.duck-pdp-v5 .dv5-collage-section .dv5-kicker{color:#e3c898}\n.duck-pdp-v5 .dv5-collage-section .dv5-copy{color:#d6e4da}\n.duck-pdp-v5 .dv5-scenes-photo{margin:18px auto 0;overflow:hidden;border-radius:14px;border:1px solid #ffffff44;max-width:100%;background:#f3efea}\n.duck-pdp-v5 .dv5-scenes-photo img{width:100%;height:auto;object-fit:contain}\n.duck-pdp-v5 .dv5-scenes{display:flex;justify-content:center;flex-wrap:wrap;gap:7px;margin-top:15px}\n.duck-pdp-v5 .dv5-scenes span{font-size:11px;line-height:1.35;padding:6px 10px;border:1px solid #ffffff40;border-radius:40px;background:#ffffff13;color:#fff}\n.duck-pdp-v5 .dv5-gift-banner{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:22px;padding:24px;border:1px solid #e9dcc8;border-radius:20px;background:#f9f0e4}\n.duck-pdp-v5 .dv5-gift-banner .dv5-copy{margin-top:12px}\n.duck-pdp-v5 .dv5-gift-banner .dv5-gift-tags span{background:white;border-color:#e8ded0}\n.duck-pdp-v5 .dv5-gift-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px;margin-top:19px}\n.duck-pdp-v5 .dv5-gift-card{min-width:0;border:1px solid var(--dk-line);border-radius:15px;padding:16px 13px;background:white}\n.duck-pdp-v5 .dv5-gift-card .dv5-gift-icon{width:45px;height:45px;object-fit:contain;margin-bottom:10px;border-radius:9px}\n.duck-pdp-v5 .dv5-gift-card h3{font:750 15px\/1.35 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;color:var(--dk-forest)}\n.duck-pdp-v5 .dv5-gift-card p{font-size:12px;line-height:1.55;color:var(--dk-muted);margin-top:6px}\n.duck-pdp-v5 .dv5-bundle{padding:27px 22px;border:1px solid #e4d5be;border-radius:22px;background:linear-gradient(#fffdf9,#faf6ef)}\n.duck-pdp-v5 .dv5-bundle h2{margin-top:9px}\n.duck-pdp-v5 .dv5-set-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;margin-top:21px;align-items:stretch}\n.duck-pdp-v5 .dv5-set{min-width:0;display:flex;flex-direction:column;align-items:stretch;padding:17px 13px 14px;border:1.5px solid #e7e1d5;border-radius:16px;background:white}\n.duck-pdp-v5 .dv5-set--feature{border:2px solid #bd9555;box-shadow:0 6px 20px #3f321315}\n.duck-pdp-v5 .dv5-set-tag{align-self:flex-start;max-width:100%;font-size:10px;line-height:1.35;font-weight:850;text-transform:uppercase;letter-spacing:.04em;color:#735526;border-radius:99px;padding:5px 9px;background:#f9f0df}\n.duck-pdp-v5 .dv5-set-qty{font:700 clamp(23px,2.7vw,30px)\/1.2 Georgia,\"Times New Roman\",serif;color:var(--dk-forest);margin:12px 0 3px}\n.duck-pdp-v5 .dv5-set-count{font-size:11px;line-height:1.5;color:#785d35;display:block;font-weight:700}\n.duck-pdp-v5 .dv5-set h3{font:750 15px\/1.36 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;color:var(--dk-forest);margin-top:11px}\n.duck-pdp-v5 .dv5-set p{font-size:12px;color:var(--dk-muted);margin:6px 0 17px;flex:1}\n.duck-pdp-v5 .dv5-set-btn{width:100%;padding:10px 8px;min-height:44px;font-size:13px}\n.duck-pdp-v5 .dv5-set--feature .dv5-set-btn{background:#936c32;border-color:#936c32}\n.duck-pdp-v5 .dv5-set--feature .dv5-set-btn:hover{background:#785421}\n.duck-pdp-v5 .dv5-bundle-note{max-width:680px;margin:13px auto 0;text-align:center;color:#67746b;font-size:12px}\n.duck-pdp-v5 .dv5-qty-status{min-height:0;font-size:12px;line-height:1.6;color:var(--dk-forest);font-weight:700;text-align:center;margin-top:9px}\n.duck-pdp-v5 .dv5-qty-status:empty{display:none}\n.duck-pdp-v5 .dv5-qty-status[data-duck-state=\"error\"]{color:#9c352e}\n.duck-pdp-v5 .dv5-set-btn[aria-pressed=\"true\"]{outline:3px solid #be8c43;outline-offset:2px}\n.duck-pdp-v5 .dv5-set-btn:disabled{opacity:.6;cursor:not-allowed}\n.duck-pdp-v5 .dv5-details{border:1px solid var(--dk-line);border-radius:20px;background:#faf7f0;padding:24px 20px}\n.duck-pdp-v5 .dv5-details-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px;margin-top:17px}\n.duck-pdp-v5 .dv5-detail-card{min-width:0;padding:10px;border:1px solid #e9e6e1;border-radius:14px;background:white}\n.duck-pdp-v5 .dv5-detail-card h3{font:750 14px\/1.4 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;color:var(--dk-forest);margin-top:10px}\n.duck-pdp-v5 .dv5-detail-card p{font-size:12px;line-height:1.55;color:var(--dk-muted);margin-top:4px}\n.duck-pdp-v5 .dv5-detail-note{font-size:12px;line-height:1.65;color:var(--dk-muted);margin-top:14px}\n.duck-pdp-v5 .dv5-mini-photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:16px}\n.duck-pdp-v5 .dv5-faq{margin-top:14px}\n.duck-pdp-v5 .dv5-faq details{margin-top:9px;background:white;border:1px solid var(--dk-line);border-radius:12px;overflow:hidden}\n.duck-pdp-v5 .dv5-faq summary{display:flex;gap:10px;justify-content:space-between;align-items:center;list-style:none;cursor:pointer;color:var(--dk-forest);font:800 14px\/1.5 system-ui,-apple-system,\"Segoe UI\",Arial,sans-serif;padding:15px}\n.duck-pdp-v5 .dv5-faq summary::-webkit-details-marker{display:none}\n.duck-pdp-v5 .dv5-faq summary::after{content:'+';color:#906e38;flex:none;font-size:20px}\n.duck-pdp-v5 .dv5-faq details[open] summary::after{content:'−'}\n.duck-pdp-v5 .dv5-answer{padding:0 15px 15px;color:var(--dk-muted);font-size:13px;line-height:1.7}\n.duck-pdp-v5 .dv5-finale{padding:34px 23px 28px;border-radius:22px;background:radial-gradient(circle at 90% 0,#2e6048 0,transparent 45%),linear-gradient(135deg,#154031,#0d271e);color:white;text-align:center}\n.duck-pdp-v5 .dv5-finale h2{font-size:clamp(26px,3.8vw,37px);letter-spacing:-.02em!important;color:white}\n.duck-pdp-v5 .dv5-finale p{max-width:560px;margin:13px auto 19px;font-size:15px;line-height:1.7;color:#d7e3da}\n.duck-pdp-v5 .dv5-finale .dv5-cta{background:#edcb92;border-color:#edcb92;color:var(--dk-dark)!important}\n.duck-pdp-v5 .dv5-finale .dv5-cta:hover{background:#f3dbaa}\n.duck-pdp-v5 .dv5-finale .dv5-tiny{color:#d0ddcf}\n\/* Shopify product descriptions may occupy narrow desktop columns, so use the actual component width. *\/\n@container duckPdp (max-width:700px){\n .duck-pdp-v5 .dv5-journey-grid{grid-template-columns:1fr}\n .duck-pdp-v5 .dv5-journey-card{display:grid;grid-template-columns:120px minmax(0,1fr);gap:12px;align-items:center;padding:10px}\n .duck-pdp-v5 .dv5-journey-card .dv5-image{grid-column:1;grid-row:1;aspect-ratio:1\/1;min-width:0}\n .duck-pdp-v5 .dv5-step-content{grid-column:2;grid-row:1;padding:0;min-width:0;align-self:center}\n .duck-pdp-v5 .dv5-journey-card h3{font-size:15px}\n .duck-pdp-v5 .dv5-journey-card p{font-size:12px}\n .duck-pdp-v5 .dv5-two-col,.duck-pdp-v5 .dv5-gift-banner{grid-template-columns:1fr;gap:14px}\n .duck-pdp-v5 .dv5-gift-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n .duck-pdp-v5 .dv5-set-grid{grid-template-columns:1fr}\n .duck-pdp-v5 .dv5-set{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:12px;padding:16px}\n .duck-pdp-v5 .dv5-set-tag,.duck-pdp-v5 .dv5-set-count,.duck-pdp-v5 .dv5-set h3,.duck-pdp-v5 .dv5-set p,.duck-pdp-v5 .dv5-set-btn{grid-column:1 \/ -1}\n .duck-pdp-v5 .dv5-set-qty{grid-column:1;grid-row:auto;font-size:26px;margin-top:8px}\n .duck-pdp-v5 .dv5-set p{margin-bottom:12px}\n .duck-pdp-v5 .dv5-set h3{margin-top:7px}\n .duck-pdp-v5 .dv5-details-grid{grid-template-columns:1fr}\n .duck-pdp-v5 .dv5-detail-card{display:grid;grid-template-columns:96px minmax(0,1fr);gap:3px 12px;align-items:center}\n .duck-pdp-v5 .dv5-detail-card .dv5-image{grid-column:1;grid-row:1 \/ span 2;aspect-ratio:1\/1}\n .duck-pdp-v5 .dv5-detail-card h3{grid-column:2;grid-row:1;margin:0;align-self:end}\n .duck-pdp-v5 .dv5-detail-card p{grid-column:2;grid-row:2;margin:0;align-self:start}\n .duck-pdp-v5 .dv5-feature-text{padding:0}\n}\n@container duckPdp (max-width:460px){\n .duck-pdp-v5{padding:8px 5px 30px}\n .duck-pdp-v5 .dv5-section{margin-top:24px}\n .duck-pdp-v5 .dv5-hero{padding:28px 15px 24px;border-radius:17px}\n .duck-pdp-v5 .dv5-heading{font-size:clamp(27px,8vw,33px)}\n .duck-pdp-v5 .dv5-section-heading{font-size:clamp(25px,7.5vw,31px)}\n .duck-pdp-v5 .dv5-hero-desc{font-size:14px}\n .duck-pdp-v5 .dv5-hero-journey{gap:5px;font-size:10px}\n .duck-pdp-v5 .dv5-hero-journey span{padding:5px 7px}\n .duck-pdp-v5 :is(.dv5-hero-cta,.dv5-finale .dv5-cta){width:100%}\n .duck-pdp-v5 .dv5-value-row{gap:6px}\n .duck-pdp-v5 .dv5-value{padding:10px 4px}\n .duck-pdp-v5 .dv5-value strong{font-size:12px}\n .duck-pdp-v5 .dv5-value span{font-size:10px}\n .duck-pdp-v5 .dv5-story,.duck-pdp-v5 .dv5-bundle,.duck-pdp-v5 .dv5-details{padding:20px 13px}\n .duck-pdp-v5 .dv5-story-header{margin-bottom:15px}\n .duck-pdp-v5 .dv5-journey-card{grid-template-columns:100px minmax(0,1fr);gap:10px;padding:8px}\n .duck-pdp-v5 .dv5-journey-card .dv5-step{font-size:9px;letter-spacing:.03em}\n .duck-pdp-v5 .dv5-journey-card h3{font-size:14px;line-height:1.3}\n .duck-pdp-v5 .dv5-journey-card p{font-size:11.5px;line-height:1.45}\n .duck-pdp-v5 .dv5-collage-section{padding:25px 14px 21px;border-radius:17px}\n .duck-pdp-v5 .dv5-gift-banner{padding:18px}\n .duck-pdp-v5 .dv5-gift-card{padding:12px 10px}\n .duck-pdp-v5 .dv5-gift-card h3{font-size:13px}\n .duck-pdp-v5 .dv5-gift-card p{font-size:11px}\n .duck-pdp-v5 .dv5-gift-card .dv5-gift-icon{width:39px;height:39px}\n .duck-pdp-v5 .dv5-finale{padding:29px 17px 25px}\n .duck-pdp-v5 .dv5-finale p{font-size:14px}\n}\n@media(max-width:480px){.duck-pdp-v5{padding:8px 5px 30px}}\n@media(max-width:380px){.duck-pdp-v5 .dv5-journey-card{grid-template-columns:88px minmax(0,1fr)}}\n@media(prefers-reduced-motion:reduce){.duck-pdp-v5 :is(.dv5-hero-cta,.dv5-cta,.dv5-set-btn){transition:none;transform:none!important}}\n\u003c\/style\u003e\n\u003cdiv class=\"duck-pdp-v5\" data-duck-multibuy-mode=\"auto\" data-duck-v4-root=\"\" data-duck-version=\"v5.2\"\u003e\n\u003csection class=\"dv5-hero\"\u003e\n\u003cdiv class=\"dv5-overline\"\u003e24-day duck advent calendar\u003c\/div\u003e\n\u003ch2 class=\"dv5-heading\" id=\"dv5-hero-title\"\u003eA New Little Duck Every Day.\u003c\/h2\u003e\n\u003cp class=\"dv5-hero-desc\"\u003e24 days of surprises. 24 lovable duck characters. One cheerful collection to display long after the Christmas countdown ends.\u003c\/p\u003e\n\u003cdiv class=\"dv5-hero-journey\"\u003e\n\u003cspan\u003eUnbox one a day\u003c\/span\u003e\u003ci\u003e→\u003c\/i\u003e\u003cspan\u003eCollect all 24\u003c\/span\u003e\u003ci\u003e→\u003c\/i\u003e\u003cspan\u003eDisplay \u0026amp; enjoy\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"dv5-hero-cta\" data-duck-go=\"\" type=\"button\"\u003eChoose Your Calendar\u003c\/button\u003e\n\u003cdiv class=\"dv5-tiny\"\u003eA whole flock in every box · A playful gift for duck lovers\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cfigure class=\"dv5-hero-product\"\u003e\u003cimg alt=\"Duck Magic Christmas advent calendar product packaging\" decoding=\"async\" loading=\"eager\" src=\"https:\/\/cdn.cloudfastin.top\/image\/5fdb9206b21aae74bc9261b9e79e8757f5333c0a.webp\"\u003e\u003c\/figure\u003e\n\u003cdiv class=\"dv5-value-row\"\u003e\n\u003cdiv class=\"dv5-value\"\u003e\n\u003cstrong\u003e24 Days\u003c\/strong\u003e\u003cspan\u003eDaily reveals\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-value\"\u003e\n\u003cstrong\u003e24 Designs\u003c\/strong\u003e\u003cspan\u003eOne growing flock\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-value\"\u003e\n\u003cstrong\u003eBeyond Dec 25\u003c\/strong\u003e\u003cspan\u003eKeep displaying\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003csection class=\"dv5-section dv5-story\"\u003e\n\u003cdiv class=\"dv5-story-header\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eThe little duck journey\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-story-title\"\u003eFirst a countdown.\u003cbr\u003eThen a collection.\u003c\/h2\u003e\n\u003cp class=\"dv5-lead\"\u003eThe countdown ends on Christmas Eve. The fun of collecting does not have to.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-journey-grid\"\u003e\n\u003carticle class=\"dv5-journey-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Duck Magic advent calendar daily reveal detail\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/df76fa375f238d54a3fca4b1f62bd85f8bf1254d.webp\"\u003e\u003c\/figure\u003e\n\u003cdiv class=\"dv5-step-content\"\u003e\n\u003cspan class=\"dv5-step\"\u003e01 \/ December mornings\u003c\/span\u003e\n\u003ch3\u003eOpen one little surprise\u003c\/h3\u003e\n\u003cp\u003eA tiny reveal to make the countdown more memorable.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-journey-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Collection of different duck designs\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/2a13bca5d30467229e45a1672be49452aa5f7cf3.webp\"\u003e\u003c\/figure\u003e\n\u003cdiv class=\"dv5-step-content\"\u003e\n\u003cspan class=\"dv5-step\"\u003e02 \/ Grow your collection\u003c\/span\u003e\n\u003ch3\u003eMeet all 24 characters\u003c\/h3\u003e\n\u003cp\u003eDiscover a playful new look as your little flock grows.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-journey-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Duck collection arranged for decorative display\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/5ecd8d12c75fc4a6d6e3703e6983a133934cd809.webp\"\u003e\u003c\/figure\u003e\n\u003cdiv class=\"dv5-step-content\"\u003e\n\u003cspan class=\"dv5-step\"\u003e03 \/ Long after Christmas\u003c\/span\u003e\n\u003ch3\u003eLet the cuteness stay\u003c\/h3\u003e\n\u003cp\u003eMake a little display at home or at your workspace.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-story-strip\"\u003e24 daily surprises. A collection that stays.\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-two-col\"\u003e\n\u003cfigure class=\"dv5-image\"\u003e\u003cimg alt=\"Duck Magic calendar and featured duck figures\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/a9593a257115b33da9ac11ca56f20d147069c4fd.webp\"\u003e\u003c\/figure\u003e\n\u003cdiv class=\"dv5-feature-text\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eA gift that lasts past the holidays\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-more-title\"\u003eNot another\u003cbr\u003eone-and-done calendar.\u003c\/h2\u003e\n\u003cp class=\"dv5-copy\"\u003eA classic countdown gives you something to open. This one also gives you something to collect. Turn December's little surprises into a colorful set of duck characters you can arrange, rearrange, and enjoy.\u003c\/p\u003e\n\u003cdiv class=\"dv5-feature-chips\"\u003e\n\u003cspan\u003eDaily surprise\u003c\/span\u003e\u003cspan\u003eCollectible characters\u003c\/span\u003e\u003cspan\u003eDisplay inspiration\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-collage-section\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eLife after the countdown\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-collage-title\" style=\"margin-top: 9px;\"\u003e24 Little Ducks.\u003cbr\u003eSo Many Places to Smile.\u003c\/h2\u003e\n\u003cp class=\"dv5-copy\" style=\"max-width: 620px; margin: 12px auto 22px;\"\u003eFrom a desk to a bookshelf, give your new duck friends a place in the everyday moments you love.\u003c\/p\u003e\n\u003cfigure class=\"dv5-scenes-photo\"\u003e\u003cimg alt=\"Ideas for displaying the collectible duck figures in ten indoor settings\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0675\/5788\/3966\/files\/db79c35de8fc5b78be8d5cb86728b5af.png?v=1791545424\"\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-scenes\"\u003e\n\u003cspan\u003eDesk\u003c\/span\u003e\u003cspan\u003eBookshelf\u003c\/span\u003e\u003cspan\u003eNightstand\u003c\/span\u003e\u003cspan\u003eMantel\u003c\/span\u003e\u003cspan\u003eEntryway\u003c\/span\u003e\u003cspan\u003eStudy nook\u003c\/span\u003e\u003cspan\u003eCoffee table\u003c\/span\u003e\u003cspan\u003eWork desk\u003c\/span\u003e\u003cspan\u003eDisplay shelf\u003c\/span\u003e\u003cspan\u003eHoliday corner\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-gift-banner\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eSmall gift, 24 little moments\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-gift-title\" style=\"margin-top: 9px;\"\u003eTheir new favorite\u003cbr\u003elittle Christmas ritual?\u003c\/h2\u003e\n\u003cp class=\"dv5-copy\"\u003eFor a kid who loves adorable characters, a friend who's impossible to shop for, or the duck enthusiast in your life — one calendar brings a new reveal every day. And the whole flock can stay on display afterwards.\u003c\/p\u003e\n\u003cdiv class=\"dv5-gift-tags\"\u003e\n\u003cspan\u003eFor duck lovers\u003c\/span\u003e\u003cspan\u003eFor friends\u003c\/span\u003e\u003cspan\u003eFor young collectors*\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp style=\"font-size: 11px; color: #7e7667; margin-top: 12px;\"\u003e*Please check the actual product packaging for age suitability. Small collectibles may not be appropriate for very young children.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cfigure class=\"dv5-image\"\u003e\u003cimg alt=\"Duck Magic Christmas countdown calendar with festive character illustrations\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/8d5afbf26d49ad43cc5d04200f4c27a75ccbde3b.webp\"\u003e\u003c\/figure\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eMade for giving\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-gifts-title\" style=\"margin-top: 9px;\"\u003eToo cute to keep to yourself.\u003c\/h2\u003e\n\u003cp class=\"dv5-lead\"\u003eKeep a set for your own holiday tradition — and make someone else's December a little more fun.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-gift-grid\"\u003e\n\u003carticle class=\"dv5-gift-card\"\u003e\u003cimg alt=\"\" class=\"dv5-gift-icon\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/3e72753c5ab354440fb369e4f6fe814218853b57.webp\"\u003e\n\u003ch3\u003eFor the kids\u003c\/h3\u003e\n\u003cp\u003eGive an age-appropriate little collector something to look forward to each December morning.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-gift-card\"\u003e\u003cimg alt=\"\" class=\"dv5-gift-icon\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/e8626c657b2715bfa2f48a9363b85d5859882a9d.webp\"\u003e\n\u003ch3\u003eFor your friends\u003c\/h3\u003e\n\u003cp\u003eA playful, unexpected Christmas gift for someone who appreciates a little whimsy.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-gift-card\"\u003e\u003cimg alt=\"\" class=\"dv5-gift-icon\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/f8544c682d2405703fcbf4dbf83f285245367119.webp\"\u003e\n\u003ch3\u003eFor family traditions\u003c\/h3\u003e\n\u003cp\u003eUnbox together or make separate countdowns for siblings, cousins, and loved ones.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-gift-card\"\u003e\u003cimg alt=\"\" class=\"dv5-gift-icon\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/bff50af8d6175693cb64a8906823d2f89a8934e5.webp\"\u003e\n\u003ch3\u003eFor duck collectors\u003c\/h3\u003e\n\u003cp\u003eA full flock of character designs to enjoy during December and beyond.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-bundle\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eMake their countdown too\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-bundle-title\"\u003eOne to keep.\u003cbr\u003eOne (or two) to gift.\u003c\/h2\u003e\n\u003cp class=\"dv5-lead\"\u003eEach calendar is a complete 24-day gift. Choose one for you, add another for a friend, or make three people’s December brighter.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-set-grid\"\u003e\n\u003carticle class=\"dv5-set\"\u003e\u003cspan class=\"dv5-set-tag\"\u003eYour tradition\u003c\/span\u003e\n\u003cdiv class=\"dv5-set-qty\"\u003e1 Calendar\u003c\/div\u003e\n\u003csmall class=\"dv5-set-count\"\u003e24 collectible ducks in total\u003c\/small\u003e\n\u003ch3\u003eA daily duck for you\u003c\/h3\u003e\n\u003cp\u003eThe complete 24-day countdown, all for you.\u003c\/p\u003e\n\u003cbutton class=\"dv5-set-btn\" data-duck-qty=\"1\" type=\"button\"\u003eChoose 1 set\u003c\/button\u003e\u003c\/article\u003e\n\u003carticle class=\"dv5-set dv5-set--feature\"\u003e\u003cspan class=\"dv5-set-tag\"\u003eKeep one · Gift one\u003c\/span\u003e\n\u003cdiv class=\"dv5-set-qty\"\u003e2 Calendars\u003c\/div\u003e\n\u003csmall class=\"dv5-set-count\"\u003e48 collectible ducks in total\u003c\/small\u003e\n\u003ch3\u003eShare the duck magic\u003c\/h3\u003e\n\u003cp\u003eKeep one and give a complete calendar to someone special.\u003c\/p\u003e\n\u003cbutton class=\"dv5-set-btn\" data-duck-qty=\"2\" type=\"button\"\u003eChoose 2 sets\u003c\/button\u003e\u003c\/article\u003e\n\u003carticle class=\"dv5-set\"\u003e\u003cspan class=\"dv5-set-tag\"\u003eA flock of gifts\u003c\/span\u003e\n\u003cdiv class=\"dv5-set-qty\"\u003e3 Calendars\u003c\/div\u003e\n\u003csmall class=\"dv5-set-count\"\u003e72 collectible ducks in total\u003c\/small\u003e\n\u003ch3\u003eMake three Decembers\u003c\/h3\u003e\n\u003cp\u003eA complete countdown for three people on your list.\u003c\/p\u003e\n\u003cbutton class=\"dv5-set-btn\" data-duck-qty=\"3\" type=\"button\"\u003eChoose 3 sets\u003c\/button\u003e\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cp class=\"dv5-bundle-note\"\u003eSelecting a set count adjusts the store quantity when supported. Please review the product options, final price and any available volume discount before checkout.\u003c\/p\u003e\n\u003cp class=\"dv5-qty-status\" data-duck-status=\"\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/p\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-details\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eAll the little details\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-details-title\" style=\"margin-top: 8px;\"\u003eWhat's in your calendar?\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-details-grid\"\u003e\n\u003carticle class=\"dv5-detail-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Numbered compartments on the advent calendar\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/15ec3be7ca0e0976fc490ec3823e3ac64d60e479.webp\"\u003e\u003c\/figure\u003e\n\u003ch3\u003e24 numbered doors\u003c\/h3\u003e\n\u003cp\u003eA new reveal for each day of the countdown.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-detail-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Duck characters with different themed details\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/219b0ee956c94498595779dc99d0201c0d466b9a.webp\"\u003e\u003c\/figure\u003e\n\u003ch3\u003e24 character designs\u003c\/h3\u003e\n\u003cp\u003eDifferent little duck personalities to discover.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003carticle class=\"dv5-detail-card\"\u003e\n\u003cfigure class=\"dv5-image dv5-image--crop\"\u003e\u003cimg alt=\"Close look at colorful duck designs\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/51f177c865ee11c81bd0afa0e4171708d5e6a2cd.webp\"\u003e\u003c\/figure\u003e\n\u003ch3\u003eDisplay-ready fun\u003c\/h3\u003e\n\u003cp\u003eCollect them and create your own display at home.\u003c\/p\u003e\n\u003c\/article\u003e\n\u003c\/div\u003e\n\u003cp class=\"dv5-detail-note\"\u003e\u003cstrong\u003eIn the package:\u003c\/strong\u003e 1 Duck Magic Advent Calendar with 24 collectible duck figures. Actual material, measurements and age guidance should be confirmed against the delivered product packaging before adding further claims.\u003c\/p\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eGet a closer look\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-closeups-title\" style=\"margin-top: 8px;\"\u003eMeet the little flock.\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-mini-photo-grid\"\u003e\n\u003cfigure class=\"dv5-image\"\u003e\u003cimg alt=\"Duck character assortment detail photo\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/efb83e33ab728580e778caa57c33b978867f380c.webp\"\u003e\u003c\/figure\u003e\n\u003cfigure class=\"dv5-image\"\u003e\u003cimg alt=\"More duck character designs\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/ca4f13a230b84f65e89f9eee7c3354338e440f67.webp\"\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cfigure class=\"dv5-image\" style=\"margin-top: 12px;\"\u003e\u003cimg alt=\"Overview of Duck Magic calendar and collectible ducks\" decoding=\"async\" loading=\"lazy\" src=\"https:\/\/cdn.cloudfastin.top\/image\/a6393a87168d510976ed6878c8d242e311870762.webp\"\u003e\u003c\/figure\u003e\n\u003c!-- Image rights must be confirmed before using any customer-supplied photographs. --\u003e\u003c\/section\u003e\n\u003csection class=\"dv5-section\"\u003e\n\u003cdiv class=\"dv5-center\"\u003e\n\u003cdiv class=\"dv5-kicker\"\u003eGood to know\u003c\/div\u003e\n\u003ch2 class=\"dv5-section-heading\" id=\"dv5-faq-title\" style=\"margin-top: 8px;\"\u003eFrequently asked questions\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dv5-faq\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat comes in one calendar?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eOne Duck Magic 24-day advent calendar containing 24 collectible duck characters, with numbered compartments for daily surprises.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eAre the duck designs different?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eThe calendar is presented as a collection of 24 different character designs. The images show examples of themed outfits and personalities; please check the product photos for the assortment.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat can I do with the ducks after Christmas?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eKeep the characters as a decorative collection and arrange them on suitable indoor shelves, desks and other stable surfaces. Your display can change whenever you like.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCan I buy more than one as gifts?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eYes. Select two or three complete calendars using the quantity suggestions above, or choose another quantity in your store's product selector if available. Each set is a complete 24-day calendar.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIs this a good gift for children?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eIt can be a fun countdown gift for children who enjoy collecting small characters, provided it is age-appropriate. Please follow the actual packaging age guidance and supervise as needed. Small parts may pose a choking hazard to very young children.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhen should I give an advent calendar?\u003c\/summary\u003e\n\u003cdiv class=\"dv5-answer\"\u003eIf the recipient wants to open one door each day from December 1 through December 24, give it before the countdown starts. Delivery timing depends on your location and the shipping option shown at checkout.\u003c\/div\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003csection class=\"dv5-section dv5-finale\"\u003e\n\u003ch2 id=\"dv5-finale-title\"\u003e24 Little Surprises.\u003cbr\u003eOne Whole Flock of Happy.\u003c\/h2\u003e\n\u003cp\u003eA little reveal each day. A whole collection to keep. Choose one for yourself and another for someone who could use more joy this December.\u003c\/p\u003e\n\u003cbutton class=\"dv5-cta\" data-duck-go=\"\" type=\"button\"\u003eChoose Your Calendars \u003cspan\u003e↗\u003c\/span\u003e\u003c\/button\u003e\n\u003cdiv class=\"dv5-tiny\"\u003eFinal price, shipping and any eligible offer are confirmed in the store purchase area.\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\/* Duck Magic PDP v5.2 — Shopify purchase-area buttons, fail-closed pack\/quantity handling *\/\n(function () {\n  'use strict';\n  var script = document.currentScript;\n  var root = script \u0026\u0026 script.previousElementSibling \u0026\u0026 script.previousElementSibling.matches('.duck-pdp-v5')\n    ? script.previousElementSibling\n    : document.querySelector('.duck-pdp-v5:not([data-duck-init])');\n  if (!root || root.dataset.duckInit === '1') return;\n  root.dataset.duckInit = '1';\n\n  var status = root.querySelector('[data-duck-status]');\n  var packButtons = Array.from(root.querySelectorAll('[data-duck-qty]'));\n  var mode = (root.getAttribute('data-duck-multibuy-mode') || 'auto').toLowerCase();\n\n  function message(value, error) {\n    if (!status) return;\n    status.textContent = value || '';\n    status.setAttribute('data-duck-state', error ? 'error' : 'ok');\n  }\n  function visible(element) {\n    if (!element || !element.isConnected || element.closest('[hidden], [aria-hidden=\"true\"]')) return false;\n    var css = window.getComputedStyle(element);\n    return css.display !== 'none' \u0026\u0026 css.visibility !== 'hidden' \u0026\u0026 css.visibility !== 'collapse' \u0026\u0026 element.getClientRects().length \u003e 0;\n  }\n  function smoothScroll(element) {\n    if (!element) return;\n    var reduced = window.matchMedia \u0026\u0026 window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    element.scrollIntoView({ behavior: reduced ? 'auto' : 'smooth', block: 'center' });\n  }\n  function findForm() {\n    var forms = Array.from(document.querySelectorAll('form[action*=\"\/cart\/add\"], product-form form, form[id*=\"product-form\"]'));\n    if (!forms.length) return null;\n    var main = root.closest('main') || document.querySelector('main');\n    forms = forms.filter(function (form) {\n      return form.matches('form') \u0026\u0026 !form.closest('.duck-pdp-v5') \u0026\u0026\n        !form.closest('.cart-drawer, cart-drawer, .quick-add-modal, .quick-add, .cart-notification, .predictive-search');\n    });\n    if (!forms.length) return null;\n    forms.sort(function (a, b) { return score(b) - score(a); });\n    function score(form) {\n      var points = 0;\n      if (main \u0026\u0026 main.contains(form)) points += 35;\n      if (form.querySelector('[name=\"id\"]') || document.querySelector('input[name=\"id\"][form=\"' + CSS.escape(form.id || '__none__') + '\"]')) points += 25;\n      if (form.closest('.product__info-container, .product-info, .product__info-wrapper, [id^=\"MainProduct\"], .main-product')) points += 25;\n      if (form.matches('[action*=\"\/cart\/add\"]')) points += 20;\n      if (form.querySelector('button[name=\"add\"], button[type=\"submit\"]')) points += 8;\n      if (visible(form) || (form.parentElement \u0026\u0026 visible(form.parentElement))) points += 15;\n      if (form.closest('.product-recommendations, .related-products, .featured-product')) points -= 45;\n      return points;\n    }\n    return score(forms[0]) \u003e= 20 ? forms[0] : null;\n  }\n  function purchaseTarget(form) {\n    if (!form) return root.querySelector('.dv5-bundle');\n    return form.closest('product-form, .product-form') || form;\n  }\n  function setActiveButton(number) {\n    packButtons.forEach(function (button) {\n      button.setAttribute('aria-pressed', String(Number(button.dataset.duckQty) === number));\n    });\n  }\n  function setNativeValue(input, value) {\n    var proto = input.tagName === 'SELECT' ? HTMLSelectElement.prototype : HTMLInputElement.prototype;\n    var descriptor = Object.getOwnPropertyDescriptor(proto, 'value');\n    if (descriptor \u0026\u0026 descriptor.set) descriptor.set.call(input, String(value));\n    else input.value = String(value);\n    input.dispatchEvent(new Event('input', { bubbles: true }));\n    input.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n  function associatedQuantityInputs(form) {\n    return Array.from(document.querySelectorAll('input[name=\"quantity\"]')).filter(function (input) {\n      return input.form === form \u0026\u0026 !input.disabled;\n    });\n  }\n  function setQuantity(form, count) {\n    var fields = associatedQuantityInputs(form);\n    var field = fields.find(function (input) { return input.type !== 'hidden' \u0026\u0026 visible(input); }) || fields[0];\n    if (!field) {\n      \/\/ Shopify's add-to-cart form accepts a quantity hidden field when its theme has no quantity picker.\n      field = document.createElement('input');\n      field.type = 'hidden';\n      field.name = 'quantity';\n      field.setAttribute('data-duck-created-quantity', '');\n      form.appendChild(field);\n    }\n    var min = field.min !== '' ? Number(field.min) : 1;\n    var max = field.max !== '' ? Number(field.max) : Infinity;\n    var step = field.step \u0026\u0026 field.step !== 'any' ? Number(field.step) : 1;\n    if (!Number.isFinite(min)) min = 1;\n    if (!Number.isFinite(max)) max = Infinity;\n    if (!Number.isFinite(step) || step \u003c= 0) step = 1;\n    if (count \u003c min || count \u003e max || Math.abs((count - min) \/ step - Math.round((count - min) \/ step)) \u003e 1e-8) {\n      return { ok: false, reason: 'The store quantity selector does not allow ' + count + ' calendar(s). Please check the available options.' };\n    }\n    setNativeValue(field, count);\n    if (Number(field.value) !== count) return { ok: false, reason: 'The store quantity could not be updated. Please choose your quantity manually.' };\n    return { ok: true };\n  }\n  function parsePackCount(raw) {\n    var str = String(raw || '').toLowerCase().replace(\/\\s+\/g, ' ').trim();\n    if (!str) return null;\n    var a = str.match(\/(?:^|\\b)([1-3])\\s*(?:calendars?|sets?|packs?|pcs?|pieces?|boxes|box)(?:\\b|$)\/);\n    if (a) return Number(a[1]);\n    a = str.match(\/\\bbuy\\s*([1-3])(?:\\b|\\s)\/);\n    if (a) return Number(a[1]);\n    a = str.match(\/(?:^|\\b)([1-3])\\s*[x×](?:\\b|$)\/);\n    if (a) return Number(a[1]);\n    if (\/^(?:single|one pack|one calendar)$\/.test(str)) return 1;\n    if (\/^(?:double|two pack|two calendars)$\/.test(str)) return 2;\n    if (\/^(?:triple|three pack|three calendars)$\/.test(str)) return 3;\n    return null;\n  }\n  function getPickerScope(form) {\n    return form.closest('.product__info-container, .product-info, .product__info-wrapper, [data-product-section], [id^=\"MainProduct\"], .main-product, .product') ||\n      form.closest('main') || form.parentElement || document;\n  }\n  function packGroups(form) {\n    var scope = getPickerScope(form);\n    var controls = [];\n    var selects = scope.querySelectorAll('variant-selects select, variant-picker select, .variant-picker select, [data-variant-picker] select, .product-form__input select, .product-option select, select[name^=\"options[\"], select[name=\"id\"]');\n    selects.forEach(function (select) {\n      if (!visible(select)) return;\n      var choices = Array.from(select.options).map(function (option) {\n        return { count: parsePackCount(option.textContent), value: option.value, disabled: option.disabled };\n      }).filter(function (choice) { return choice.count !== null; });\n      if (choices.length) controls.push({ kind: 'select', element: select, choices: choices });\n    });\n    var radios = Array.from(scope.querySelectorAll('variant-radios input[type=\"radio\"], variant-picker input[type=\"radio\"], .variant-picker input[type=\"radio\"], .product-form__input input[type=\"radio\"], .product-option input[type=\"radio\"], input[type=\"radio\"][name^=\"options[\"]'));\n    var byName = new Map();\n    radios.forEach(function (radio) {\n      if (!visible(radio.closest('label') || radio.parentElement)) return;\n      var label = radio.id ? document.querySelector('label[for=\"' + CSS.escape(radio.id) + '\"]') : null;\n      var labelText = label ? label.textContent : radio.closest('label') ? radio.closest('label').textContent : '';\n      var count = parsePackCount(labelText) || parsePackCount(radio.value);\n      if (count === null) return;\n      var groupName = radio.name || radio.closest('fieldset') || radio.parentElement;\n      if (!byName.has(groupName)) byName.set(groupName, []);\n      byName.get(groupName).push({ count: count, element: radio, disabled: radio.disabled });\n    });\n    byName.forEach(function (choices) {\n      if (choices.length) controls.push({ kind: 'radio', choices: choices });\n    });\n    var buttonGroups = scope.querySelectorAll('variant-picker, .variant-picker, [data-variant-picker], .product-form__input, .product-option');\n    buttonGroups.forEach(function (group) {\n      var buttons = Array.from(group.querySelectorAll('button[type=\"button\"], button[role=\"radio\"], [role=\"radio\"]'));\n      var choices = buttons.map(function (button) {\n        return { count: parsePackCount(button.textContent || button.getAttribute('aria-label')), element: button, disabled: button.disabled || button.getAttribute('aria-disabled') === 'true' };\n      }).filter(function (choice) { return choice.count !== null \u0026\u0026 visible(choice.element); });\n      if (choices.length) controls.push({ kind: 'button', choices: choices });\n    });\n    \/\/ Only treat a product option as a pack variant if at least two *different* counts are exposed.\n    var known = controls.filter(function (group) {\n      return new Set(group.choices.map(function (choice) { return choice.count; })).size \u003e= 2;\n    });\n    return { groups: known, scope: scope };\n  }\n  function hasUnrecognizedPackPicker(scope) {\n    \/\/ Fail closed when the theme has a bundle\/pack option we cannot safely map to a calendar count.\n    var wrappers = scope.querySelectorAll('variant-selects, variant-radios, variant-picker, .variant-picker, [data-variant-picker], .product-form__input, .product-option');\n    return Array.from(wrappers).some(function (wrapper) {\n      var select = wrapper.querySelector('select');\n      var radios = wrapper.querySelectorAll('input[type=\"radio\"]');\n      var buttons = wrapper.querySelectorAll('button[type=\"button\"], [role=\"radio\"]');\n      if (!(select \u0026\u0026 select.options.length \u003e= 2) \u0026\u0026 radios.length \u003c 2 \u0026\u0026 buttons.length \u003c 2) return false;\n      var headings = Array.from(wrapper.querySelectorAll('legend, .form__label, .variant-picker__label, [data-option-name], label:not([for])'))\n        .map(function (element) { return element.textContent; }).join(' ');\n      var names = Array.from(wrapper.querySelectorAll('select, input[type=\"radio\"]'))\n        .map(function (element) { return element.getAttribute('name') || ''; }).join(' ');\n      return \/\\b(pack(?:age)?|bundle|set(?:s| size)?|calendars?)\\b\/i.test(headings + ' ' + names);\n    });\n  }\n  function chooseVariant(group, count) {\n    var choice = group.choices.find(function (item) { return item.count === count \u0026\u0026 !item.disabled; });\n    if (!choice) return false;\n    if (group.kind === 'select') {\n      setNativeValue(group.element, choice.value);\n      return group.element.value === choice.value;\n    }\n    choice.element.click();\n    if (group.kind === 'radio') return choice.element.checked;\n    return true; \/\/ A theme-specific picker can finalize its state asynchronously; shopper must confirm price.\n  }\n  function showForm(form) {\n    smoothScroll(purchaseTarget(form));\n  }\n  function chooseCount(count) {\n    var form = findForm();\n    if (!form) {\n      message('The store purchase form was not found. Please use the product selector above or reload the product page.', true);\n      smoothScroll(root.querySelector('.dv5-bundle'));\n      return;\n    }\n    var found = packGroups(form);\n    var useVariant = mode === 'variant' || (mode === 'auto' \u0026\u0026 found.groups.length \u003e 0);\n    var ambiguousPack = mode === 'auto' \u0026\u0026 !found.groups.length \u0026\u0026 hasUnrecognizedPackPicker(found.scope);\n    if (useVariant) {\n      if (found.groups.length === 1 \u0026\u0026 chooseVariant(found.groups[0], count)) {\n        \/\/ A multi-calendar variant already contains the specified count; use one unit of that variant.\n        var qtyReset = setQuantity(form, 1);\n        if (!qtyReset.ok) {\n          message('Pack option selected. Check the quantity is 1 before adding to cart.', true);\n        } else {\n          message((found.groups[0].kind === 'button' ? 'Requested' : 'Selected') + ' the ' + count + '-calendar option. Confirm the product option and final price before adding to cart.', false);\n        }\n        if (found.groups[0].kind !== 'button') setActiveButton(count);\n      } else {\n        message('This product has pack options. Please select the ' + count + '-calendar option in the store picker; the quantity has not been changed.', true);\n      }\n      showForm(form);\n      return;\n    }\n    if (ambiguousPack) {\n      message('A pack\/bundle selector was detected, but its options could not be matched safely. Please choose the option in the store purchase area; quantity was not changed.', true);\n      showForm(form);\n      return;\n    }\n    var result = setQuantity(form, count);\n    if (result.ok) {\n      setActiveButton(count);\n      message('Quantity set to ' + count + ' calendar' + (count === 1 ? '' : 's') + '. Review the final price, then tap Add to cart.', false);\n    } else {\n      message(result.reason, true);\n    }\n    showForm(form);\n  }\n\n  root.addEventListener('click', function (event) {\n    var go = event.target.closest('[data-duck-go]');\n    var qty = event.target.closest('[data-duck-qty]');\n    if ((!go \u0026\u0026 !qty) || !(go || qty).closest('.duck-pdp-v5') || (go || qty).closest('.duck-pdp-v5') !== root) return;\n    if (qty) {\n      var count = Number(qty.getAttribute('data-duck-qty'));\n      if (!Number.isInteger(count) || count \u003c 1 || count \u003e 3) return;\n      chooseCount(count);\n    } else {\n      var form = findForm();\n      if (form) showForm(form);\n      else {\n        message('Store product selector not found. Please choose your calendar from the product purchase section.', true);\n        smoothScroll(root.querySelector('.dv5-bundle'));\n      }\n    }\n  });\n})();\n\u003c\/script\u003e\n","brand":"Everkinaura","offers":[{"title":"🎁 Oh My Quack!","offer_id":67834192003134,"sku":"C118261009DMAC3D-24DUCKS-1PC","price":36.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0675\/5788\/3966\/files\/7ec8884dfc5612e8c37451e3267ecb49f168deb0.jpg?v=1791531799","url":"https:\/\/everkinaura.com\/products\/duck-magic-christmas-gifts-duck-magic-advent-calendar","provider":"Everkinaura","version":"1.0","type":"link"}