{"id":65,"date":"2026-01-13T08:01:13","date_gmt":"2026-01-13T08:01:13","guid":{"rendered":"http:\/\/www.ordertowin.com.au\/?page_id=65"},"modified":"2026-03-16T09:58:35","modified_gmt":"2026-03-16T09:58:35","slug":"game","status":"publish","type":"page","link":"https:\/\/www.luckyduckwheel.com.au\/","title":{"rendered":"GAME"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"65\" class=\"elementor elementor-65\"> \t\t\t\t\t\t<section data-ka-cursor-size=\"1\" class=\"elementor-section elementor-top-section elementor-element elementor-element-6ac5793 elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"6ac5793\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\"> \t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\"> \t\t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-87ffb60\" data-id=\"87ffb60\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;none&quot;,&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\"> \t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\"> \t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div> \t\t\t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-element elementor-element-4de0205 elementor-widget elementor-widget-image\" data-id=\"4de0205\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\" data-widget_type=\"image.default\"> \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1600\" height=\"250\" src=\"https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK.png\" class=\"attachment-full size-full wp-image-358\" alt=\"\" srcset=\"https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK.png 1600w, https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK-300x47.png 300w, https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK-1024x160.png 1024w, https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK-768x120.png 768w, https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK-1536x240.png 1536w, https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/02\/PLAY-NOW-HOME-DESK-600x94.png 600w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div> \t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-element elementor-element-978a5a3 elementor-invisible elementor-widget elementor-widget-shortcode\" data-id=\"978a5a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\" data-widget_type=\"shortcode.default\"> \t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div id=\"lucky-wheel-69e4ebf5a1e2a\" class=\"wxgiveaway-lucky-wheel-container\">             <div class=\"wheel-form-container template_one\">         <div>             <div>  <h3>ARE YOU A  <span style=\"color: #8edaf8;font-size: 120%;letter-spacing: -1px\">LUCKY DUCK?<\/span><\/h3>  <\/div>        <\/div>          <div class=\"wheel-form\">                                                                                              <div class=\"lucky-wheel-form-group\">                     <label for=\"customer_email\">Email Address *<\/label>                     <input type=\"email\" id=\"customer_email\" name=\"customer_email\" required>                 <\/div>                                                       <div class=\"lucky-wheel-form-group\" style=\"margin-top: 10px;\">                     <div class=\"checkbox-group\">                         <input type=\"checkbox\" id=\"accept_terms\" name=\"accept_terms\" required>                         <label for=\"accept_terms\"> I AGREE TO THE TERMS AND CONDITIONS (SEE BELOW) *<\/label>                     <\/div>                 <\/div>                                      <small class=\"lucky-wheel-error-success-message\"><\/small>             <button type=\"button\" class=\"lucky-wheel-submit-button\">                 Spin the Wheel!            <\/button>         <\/div>     <\/div>         <div class=\"wheel-container\">                 <div class=\"wheel-wrapper\">             <canvas id=\"lucky-wheel-69e4ebf5a1e2a-canvas\" width=\"400\" height=\"400\"><\/canvas>             <div class=\"wheel-pointer\"><\/div>             <div class=\"wheel-center-circle\">             <\/div>         <\/div>             <\/div>      <script>\n        (function() {\n            const wheelData = [{\"slice_label\":\"a $10 Bronze Rewards Card\",\"probability\":\"5\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#000000\",\"slice_bg_color\":\"#aa2222\",\"slice_font_color\":\"#ffffff\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"25\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"$10 Bronze Rewards Card\",\"existing_coupon_code\":\"$10 Bronze Rewards Card\",\"existing_coupon_wining_description\":\"a $10 Bronze Rewards Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"a $10 Bronze Rewards Card\"},{\"slice_label\":\"a $25 Silver Rewards Card\",\"probability\":\"5\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#000000\",\"slice_bg_color\":\"#03e29f\",\"slice_font_color\":\"#ffffff\",\"slice_bg_image_url\":\"https:\\\/\\\/www.luckyduckwheel.com.au\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/email-header.png\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"fixed\",\"coupon_discount_amount\":\"0\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"$25 Silver Rewards Card\",\"existing_coupon_code\":\"$25 Silver Rewards Card\",\"existing_coupon_wining_description\":\"a $25 Silver Rewards Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"a $25 Silver Rewards Card\"},{\"slice_label\":\"$50 Gold Rewards Card\",\"probability\":\"5\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#000000\",\"slice_bg_color\":\"#e010b3\",\"slice_font_color\":\"#ffffff\",\"slice_bg_image_url\":\"https:\\\/\\\/www.luckyduckwheel.com.au\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/email-header.png\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"$50 Gold Rewards Card.\",\"existing_coupon_code\":\"$50 Gold Rewards Card\",\"existing_coupon_wining_description\":\"a $50 Gold Rewards Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"\"},{\"slice_label\":\"$75 Platinum Rewards Card\",\"probability\":\"2\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#000000\",\"slice_bg_color\":\"#1f11df\",\"slice_font_color\":\"#ffffff\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"a $75 Platinum Rewards Card\",\"existing_coupon_code\":\"$75 Platinum Rewards Card\",\"existing_coupon_wining_description\":\"a $75 Platinum Rewards Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"\"},{\"slice_label\":\"$250 Titanium Rewards Card\",\"probability\":\"2\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#ff0000\",\"slice_bg_color\":\"#ffffff\",\"slice_font_color\":\"#000000\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"$250 Titanium Rewards Card\",\"existing_coupon_code\":\"$250 Titanium Rewards Card\",\"existing_coupon_wining_description\":\"a $250 Titanium Rewards Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"\"},{\"slice_label\":\"$10 Woolies Gift Card\",\"probability\":\"2\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#ff0000\",\"slice_bg_color\":\"#ffffff\",\"slice_font_color\":\"#000000\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"$10 Woolies Gift Card.\",\"existing_coupon_code\":\"$10 Woolworths Gift Card\",\"existing_coupon_wining_description\":\"a $10 Woolworths Gift Card\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"\"},{\"slice_label\":\"Double Entries in the WDPD26 draw\",\"probability\":\"63\",\"slice_no_prize\":\"no\",\"discount_type\":\"existing_coupon\",\"slice_color\":\"#ff0000\",\"slice_bg_color\":\"#ffffff\",\"slice_font_color\":\"#000000\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"Double Entries in the WDPD26 draw.\",\"existing_coupon_code\":\"Triple Entries in the WDPD26 draw\",\"existing_coupon_wining_description\":\"Triple Entries in the WDPD26 draw\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"\"},{\"slice_label\":\"No Win\",\"probability\":\"16\",\"slice_no_prize\":\"yes\",\"discount_type\":\"none\",\"slice_color\":\"#ff0000\",\"slice_bg_color\":\"#8b2323\",\"slice_font_color\":\"#000000\",\"slice_bg_image_url\":\"\",\"expiry_date\":\"1month\",\"coupon_discount_type\":\"percent\",\"coupon_discount_amount\":\"\",\"limit_per_percent\":\"\",\"limit_per_user\":\"\",\"new_coupon_wining_description\":\"You have won a {discount_amount}{discount_type} OFF coupon: {coupon_code} (Valid for {expiry_date})\",\"existing_coupon_code\":\"\",\"existing_coupon_wining_description\":\"You have won a coupon! Code: {coupon_code}\",\"tickets_quantity\":\"\",\"reward_ticket_valid_date_type\":\"specific\",\"reward_ticket_valid_date\":\"\",\"ticket_wining_description\":\"You won {tickets_count} free entries for our {giveaway_products}! Valid for {valid_date}\",\"reward_points\":\"\",\"reward_wining_description\":\"You earned {reward_points} reward points that can be used like coupons!\",\"none_wining_description\":\"Sorry, NOT A WINNER!\"}];\n            const wheelId = 'lucky-wheel-69e4ebf5a1e2a';\n            const fullWheelImageUrl = \"https:\\\/\\\/www.luckyduckwheel.com.au\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/wheel13.png\";\n            const showBordersOverFullImage = false;\n            const canvas = document.getElementById(wheelId + '-canvas');\n            const ctx = canvas.getContext('2d');\n            const fallbackWheelSize = parseInt(canvas.getAttribute('width'), 10) || parseInt(canvas.getAttribute('height'), 10) || 400;\n\n            const totalSlices = wheelData.length;\n            const sliceAngle = (2 * Math.PI) \/ totalSlices;\n            const pointerOffset = -Math.PI \/ 2; \/\/ Start from top (-90\u00b0)\n\n            let currentRotation = 0;\n            const sliceImageCache = {};\n            const fullWheelImage = {\n                loaded: false,\n                image: null\n            };\n\n            function getDisplaySize() {\n                const rect = canvas.getBoundingClientRect();\n\n                if (rect.width) {\n                    return rect.width;\n                }\n\n                if (rect.height) {\n                    return rect.height;\n                }\n\n                return fallbackWheelSize;\n            }\n\n            function ensureCanvasResolution() {\n                const displaySize = getDisplaySize();\n                const pixelRatio = window.devicePixelRatio || 1;\n                const requiredSize = Math.round(displaySize * pixelRatio);\n\n                if (canvas.width !== requiredSize || canvas.height !== requiredSize) {\n                    canvas.width = requiredSize;\n                    canvas.height = requiredSize;\n                }\n\n                ctx.setTransform(1, 0, 0, 1, 0, 0);\n                ctx.scale(pixelRatio, pixelRatio);\n\n                return {\n                    displaySize,\n                    pixelRatio\n                };\n            }\n\n            function loadFullWheelImage(url) {\n                if (!url) {\n                    return;\n                }\n                const img = new Image();\n                fullWheelImage.image = img;\n                img.onload = function() {\n                    fullWheelImage.loaded = true;\n                    drawWheel();\n                };\n                img.onerror = function() {\n                    fullWheelImage.loaded = false;\n                    fullWheelImage.image = null;\n                    drawWheel();\n                };\n                img.src = url;\n            }\n\n            function loadSliceImage(url) {\n                if (!url || sliceImageCache[url]) {\n                    return;\n                }\n\n                const img = new Image();\n                sliceImageCache[url] = { loaded: false, image: img };\n\n                img.onload = function() {\n                    sliceImageCache[url].loaded = true;\n                    drawWheel();\n                };\n                img.onerror = function() {\n                    delete sliceImageCache[url];\n                };\n                img.src = url;\n            }\n\n            if (fullWheelImageUrl) {\n                loadFullWheelImage(fullWheelImageUrl);\n            }\n            wheelData.forEach((slice) => {\n                if (slice.slice_bg_image_url) {\n                    loadSliceImage(slice.slice_bg_image_url);\n                }\n            });\n\n            \/\/ Function to wrap text into multiple lines\n            function wrapText(context, text, maxWidth, maxLines = 2) {\n                const words = text.split(' ');\n                const lines = [];\n                let currentLine = words[0];\n\n                for (let i = 1; i < words.length; i++) {\n                    const word = words[i];\n                    const width = context.measureText(currentLine + \" \" + word).width;\n                    if (width < maxWidth) {\n                        currentLine += \" \" + word;\n                    } else {\n                        lines.push(currentLine);\n                        currentLine = word;\n                        \/\/ Stop if we reach max lines\n                        if (lines.length >= maxLines - 1) {\n                            \/\/ Add ellipsis if text is too long\n                            if (i < words.length - 1) {\n                                currentLine += '...';\n                            }\n                            break;\n                        }\n                    }\n                }\n                lines.push(currentLine);\n                return lines;\n            }\n\n            \/\/ Draw static wheel (no rotation applied in drawing)\n            function drawWheel() {\n                const { displaySize } = ensureCanvasResolution();\n                const centerX = displaySize \/ 2;\n                const centerY = displaySize \/ 2;\n                const radius = Math.min(centerX, centerY) - 2;\n                \/\/ Responsive font size calculation\n                const isMobile = window.innerWidth < 768;\n                const fontSize = isMobile ? 1 : 1;\n\n                \/\/ Calculate maximum text width based on slice geometry\n                const maxTextWidth = radius * 0.8; \/\/ 60% of radius for text area\n\n                ctx.clearRect(0, 0, displaySize, displaySize);\n                ctx.save();\n                ctx.translate(centerX, centerY);\n\n                const isUsingFullImage = !!(fullWheelImageUrl && fullWheelImage.loaded && fullWheelImage.image);\n                if (isUsingFullImage) {\n                    ctx.save();\n                    ctx.beginPath();\n                    ctx.arc(0, 0, radius, 0, 2 * Math.PI);\n                    ctx.closePath();\n                    ctx.clip();\n                    ctx.drawImage(fullWheelImage.image, -radius, -radius, radius * 2, radius * 2);\n                    ctx.restore();\n                }\n\n                wheelData.forEach((slice, index) => {\n                    const startAngle = pointerOffset + (index * sliceAngle);\n                    const endAngle = startAngle + sliceAngle;\n                    const centerAngle = startAngle + (sliceAngle \/ 2);\n                    const borderColor = slice.slice_color || '#ff0000';\n\n                    if (!isUsingFullImage) {\n                        \/\/ Draw slice background (color or per-slice image)\n                        ctx.beginPath();\n                        ctx.moveTo(0, 0);\n                        ctx.arc(0, 0, radius, startAngle, endAngle);\n                        ctx.closePath();\n\n                        const bgColor = slice.slice_bg_color || ['#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FECA57', '#FF9FF3'][index % 6];\n                        const imageUrl = slice.slice_bg_image_url || '';\n                        const cachedImage = imageUrl ? sliceImageCache[imageUrl] : null;\n\n                        if (cachedImage && cachedImage.loaded) {\n                            ctx.save();\n                            ctx.clip();\n\n                            \/\/ Rotate image in the local slice axis (center -> outer edge).\n                            ctx.rotate(centerAngle);\n                            ctx.drawImage(cachedImage.image, -radius, -radius, radius * 2, radius * 2);\n\n                            ctx.restore();\n                        } else {\n                            ctx.fillStyle = bgColor;\n                            ctx.fill();\n                        }\n                        ctx.strokeStyle = borderColor;\n                        ctx.lineWidth = 1;\n                        ctx.stroke();\n                    } else if (showBordersOverFullImage) {\n                        \/\/ Draw slice borders above full wheel image if enabled\n                        ctx.beginPath();\n                        ctx.moveTo(0, 0);\n                        ctx.arc(0, 0, radius, startAngle, endAngle);\n                        ctx.closePath();\n                        ctx.strokeStyle = borderColor;\n                        ctx.lineWidth = 1;\n                        ctx.stroke();\n                    }\n\n                    \/\/ Draw text with wrapping\n                    ctx.save();\n                    ctx.rotate(centerAngle);\n                    ctx.textAlign = 'center';\n                    ctx.textBaseline = 'middle';\n                    ctx.font = `bold ${fontSize}px Arial`;\n                    ctx.fillStyle = slice.slice_font_color || '#000000';\n\n                    const text = slice.slice_label || 'Slice ' + (index + 1);\n\n                    \/\/ Set temporary font to calculate text width\n                    ctx.font = `bold ${fontSize}px Arial`;\n                    const textMetrics = ctx.measureText(text);\n\n                    \/\/ If text is too wide, wrap it\n                    if (textMetrics.width > maxTextWidth) {\n                        const lines = wrapText(ctx, text, maxTextWidth, 3); \/\/ Max 3 lines\n\n                        \/\/ Draw each line with vertical spacing\n                        const lineHeight = fontSize * 1.2;\n                        const totalHeight = lines.length * lineHeight;\n                        const startY = -totalHeight \/ 2 + lineHeight \/ 2;\n\n                        lines.forEach((line, lineIndex) => {\n                            ctx.fillText(line, radius * 0.6, startY + (lineIndex * lineHeight));\n                        });\n                    } else {\n                        \/\/ Single line text\n                        ctx.fillText(text, radius * 0.5, 0);\n                    }\n\n                    ctx.restore();\n                });\n\n                ctx.restore();\n            }\n\n            window[wheelId + '_spinWheel'] = function(winnerSliceIndex) {\n                console.log('Spinning to slice index:', winnerSliceIndex);\n\n                const sliceAngleDeg = 360 \/ totalSlices;\n\n                \/\/ IMPORTANT: Remove transition temporarily to reset position instantly\n                canvas.style.transition = 'none';\n                canvas.style.transform = 'rotate(0deg)';\n                currentRotation = 0;\n\n                \/\/ Force browser to apply the reset before starting new animation\n                void canvas.offsetHeight; \/\/ Trigger reflow\n\n                \/\/ Now calculate the new spin\n                \/\/ Calculate how many degrees to rotate in 5 seconds at a reasonable speed\n                \/\/ 5 full rotations in 5 seconds = 1800 degrees (5 * 360)\n                const extraRotations = 8 * 360; \/\/ 5 full rotations for 5 seconds of spinning\n\n                \/\/ Calculate the center angle of the winning slice\n                const sliceCenterAngle = (winnerSliceIndex * sliceAngleDeg) + (sliceAngleDeg \/ 2);\n\n                \/\/ We want the slice center to land at the top (pointer position)\n                \/\/ Since pointer is at top (-90\u00b0 or 270\u00b0), we need to rotate so slice center aligns\n                const targetAngle = (360 - sliceCenterAngle);\n\n                \/\/ Add extra rotations for the 5 second spin\n                const finalRotation = extraRotations + targetAngle;\n\n                \/\/ Set animation duration to 5 seconds (5000ms) + original spin duration\n                const totalDuration = (8 * 1000) + 4000;\n\n                \/\/ Use setTimeout to ensure the reset has been applied before starting animation\n                setTimeout(() => {\n                    \/\/ Apply CSS rotation with extended duration\n                    canvas.style.transition = `transform ${totalDuration}ms cubic-bezier(0.17, 0.67, 0.12, 0.99)`;\n                    canvas.style.transform = `rotate(${finalRotation}deg)`;\n\n                    currentRotation = finalRotation % 360;\n\n                    console.log('Spinning for:', totalDuration + 'ms', 'Target slice:', winnerSliceIndex, 'Total rotation:', finalRotation + '\u00b0');\n                }, 50); \/\/ Small delay to ensure reset is applied\n\n                \/\/ Return the total duration so the form handler can use it\n                return totalDuration;\n            };\n\n            \/\/ Initial draw\n            drawWheel();\n\n            \/\/ Redraw on window resize for responsive text\n            window.addEventListener('resize', function() {\n                drawWheel();\n            });\n        })();\n    <\/script>         <div class=\"winner-modal\">         <div class=\"winner-content\">                         <div class=\"winner-modal-content\">                 <img decoding=\"async\" class=\"aligncenter\" style=\"padding: 10px\" src=\"https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/03\/welldone1.png\" \/>  <p style=\"text-align: center\"><strong>You have won !<\/strong>  To redeem, please complete this very short survey<\/p>  <p style=\"text-align: center\"><\/p>            <\/div>         <\/div>     <\/div>     <div class=\"wxgiveaway-survey-modal\" style=\"display:none;\">         <div class=\"wxgiveaway-survey-content\">                         <h3>Prize Claim Survey<\/h3>             <form class=\"wxgiveaway-survey-form\">                 <input type=\"hidden\" name=\"winner_id\" value=\"\">                 <div class=\"wxgiveaway-survey-error\" style=\"display:none;\"><\/div>                  <fieldset>                     <legend>Do you have a swimming pool at home?<\/legend>                     <label><input type=\"radio\" name=\"pool_at_home\" value=\"yes\" required> Yes<\/label>                     <label><input type=\"radio\" name=\"pool_at_home\" value=\"no\"> No<\/label>                 <\/fieldset>                  <fieldset>                     <legend>Do you have children living at home?<\/legend>                     <label><input type=\"checkbox\" name=\"children_at_home[]\" value=\"baby_toddler_preschool\"> Yes, Baby\/Toddler\/Pre-school (0-4yr)<\/label>                     <label><input type=\"checkbox\" name=\"children_at_home[]\" value=\"primary_school\"> Yes, Primary School<\/label>                     <label><input type=\"checkbox\" name=\"children_at_home[]\" value=\"high_school\"> Yes, High School<\/label>                     <label><input type=\"checkbox\" name=\"children_at_home[]\" value=\"no_children\"> No<\/label>                 <\/fieldset>                  <fieldset>                     <legend>Have you lived in Australia for the past five years?<\/legend>                     <label><input type=\"radio\" name=\"lived_in_australia_five_years\" value=\"yes\" required> Yes<\/label>                     <label><input type=\"radio\" name=\"lived_in_australia_five_years\" value=\"no\"> No<\/label>                 <\/fieldset>                  <fieldset>                     <legend>Have you been boating or fishing in the past 12 months?<\/legend>                     <label><input type=\"radio\" name=\"boating_or_fishing_last_twelve_months\" value=\"yes\" required> Yes<\/label>                     <label><input type=\"radio\" name=\"boating_or_fishing_last_twelve_months\" value=\"no\"> No<\/label>                 <\/fieldset>                  <fieldset>                     <legend>Which is your age category?<\/legend>                     <select name=\"age_category\" required>                         <option value=\"\">Select age category<\/option>                         <option value=\"18-24\">18-24 years<\/option>                         <option value=\"25-44\">25-44 years<\/option>                         <option value=\"45-64\">45-64 years<\/option>                         <option value=\"65+\">65+<\/option>                     <\/select>                 <\/fieldset>                  <fieldset>                     <legend>Entrant Details<\/legend>                                             <input type=\"text\" name=\"entrant_name\" placeholder=\"Full Name\" required>                                                                                                                             <input type=\"tel\" name=\"entrant_phone\" placeholder=\"Phone Number\" required>                                                                                                         <label style=\"text-align:left;\">                             <input type=\"checkbox\" name=\"entrant_over_18_accepted\" value=\"1\" required>                             I confirm I am over 18 years old                        <\/label>                                     <\/fieldset>                  <button type=\"submit\" class=\"button button-primary\">Claim Prize<\/button>             <\/form>         <\/div>     <\/div>      <style>         .winner-modal {             display: none;             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             background: rgba(0,0,0,0.8);             z-index: 1000;             justify-content: center;             align-items: center;         }          .winner-content {             background: white;             padding: 40px;             border-radius: 20px;             text-align: center;             max-width: 500px;             position: relative;             animation: bounceIn 0.6s ease;         }          .winner-modal-content {             text-align: center;             color: #266ca8;                }          .winner-modal-content h2,         .winner-modal-content h3,         .winner-modal-content h4 {             text-align: center;             margin-bottom: 20px;         }          .winner-modal-content .prize-highlight {             background: linear-gradient(45deg, #ffd700, #ffed4a);             padding: 20px;             border-radius: 10px;             margin: 20px 0;             text-align: center;             font-weight: bold;         }          .winner-modal-content .winner-info {             margin: 20px 0;             padding: 15px;             background: #f8f9fa;             border-radius: 8px;         }          .close-modal {             position: absolute;             top: 10px;             right: 15px;             background: none;             border: none;             font-size: 24px;             cursor: pointer;             z-index: 1001;         }         .wxgiveaway-survey-modal {             display: none;             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             background: rgba(0, 0, 0, 0.8);             z-index: 1002;             justify-content: center;             align-items: center;             overflow-y: auto;             padding: 20px;             box-sizing: border-box;         }         .wxgiveaway-survey-content {             background: #fff;             border-radius: 12px;             max-width: 760px;             width: 100%;             max-height: 90vh;             overflow-y: auto;             padding: 20px;             position: relative;         }         .wxgiveaway-survey-content fieldset {             border: 1px solid #ddd;             border-radius: 8px;             padding: 12px;             margin: 0 0 12px;         }         .wxgiveaway-survey-content label {             display: block;             margin: 6px 0;         }         .wxgiveaway-survey-content select,         .wxgiveaway-survey-content input[type=\"text\"],         .wxgiveaway-survey-content input[type=\"email\"],         .wxgiveaway-survey-content input[type=\"tel\"] {             width: 100%;             margin: 6px 0;         }         .wxgiveaway-survey-close {             position: absolute;             top: 8px;             right: 12px;             border: none;             background: transparent;             font-size: 24px;             cursor: pointer;         }         .wxgiveaway-survey-error {             color: #b00020;             margin-bottom: 10px;         }          @keyframes bounceIn {             0% { transform: scale(0.3); opacity: 0; }             50% { transform: scale(1.05); }             70% { transform: scale(0.9); }             100% { transform: scale(1); opacity: 1; }         }          @media (max-width: 768px) {             .winner-content {                 max-width: 90%;                 padding: 20px;                 margin: 20px;             }         }     <\/style>      <script>\n        (function() {\n            const surveyEnabled = true;\n            window.wxgiveawayRequireSurveyOnWinnerModal = surveyEnabled;\n\n            function escapeHtml(input) {\n                const div = document.createElement('div');\n                div.textContent = input || '';\n                return div.innerHTML;\n            }\n\n            function buildSurveyButton(winnerData) {\n                if (!surveyEnabled || !winnerData || !winnerData.winner_id || winnerData.is_none) {\n                    return '';\n                }\n\n                return `<button type=\"button\" class=\"button button-primary wxgiveaway-open-survey\"\n                            data-winner-id=\"${parseInt(winnerData.winner_id, 10)}\"\n                            data-name=\"${escapeHtml(winnerData.customer_name || '')}\"\n                            data-business=\"${escapeHtml(winnerData.customer_business || '')}\"\n                            data-business-address=\"${escapeHtml(winnerData.customer_business_address || '')}\"\n                            data-email=\"${escapeHtml(winnerData.customer_email || '')}\"\n                            data-phone=\"${escapeHtml(winnerData.customer_phone || '')}\"\n                            data-postcode=\"${escapeHtml(winnerData.customer_postcode || '')}\">\n                            Claim Prize                        <\/button>`;\n            }\n\n            \/\/ Function to update modal content with actual winner data\n            window.wxgiveawayUpdateWinnerModal = function(winnerData, modalElement) {\n                const modal = modalElement || document.querySelector('.winner-modal');\n                const modalContent = modal ? modal.querySelector('.winner-modal-content') : null;\n\n                if (!modal || !modalContent) return;\n\n                \/\/ Replace variables with actual data\n                let content = `<img class=\\\"aligncenter\\\" style=\\\"padding: 10px;\\\" src=\\\"https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/03\/welldone1.png\\\" \/>\r\n<p style=\\\"text-align: center;\\\"><strong>You have won {slice_label}!<\/strong>\r\nTo redeem, please complete this very short survey<\/p>\r\n<p style=\\\"text-align: center;\\\">{survey}<\/p>`;\n\n                if (winnerData && winnerData.is_none) {\n                const noPrizeTitle = winnerData.slice_label || 'No Prize';\n                const noPrizeMessage = winnerData.no_prize_text || winnerData.win_description || 'Better luck next time! Thanks for playing the wheel of fortune.';\n            \n                content = `\n                    <div class=\"no-prize-result\">\n                        <a href=\"https:\/\/loyaltyrewards.aucommerce.com.au\/lucky-duck-draw-entry\"><img decoding=\"async\" src=\"https:\/\/www.luckyduckwheel.com.au\/wp-content\/uploads\/2026\/03\/sorry-1.png\" style=\"width:550px; padding: 20px\"><\/a>\n                       \n                    <\/div>\n                `;\n            } else {\n                    \/\/ Replace all variables for normal winners.\n                    content = content.replace(\/{customer_name}\/g, winnerData.customer_name || '');\n                    content = content.replace(\/{customer_business}\/g, winnerData.customer_business || '');\n                    content = content.replace(\/{customer_business_address}\/g, winnerData.customer_business_address || '');\n                    content = content.replace(\/{customer_email}\/g, winnerData.customer_email || '');\n                    content = content.replace(\/{customer_phone}\/g, winnerData.customer_phone || '');\n                    const fallbackNoPrizeText = winnerData.no_prize_text || '';\n                    content = content.replace(\/{win_description}\/g, winnerData.win_description || fallbackNoPrizeText);\n                    content = content.replace(\/{coupon_code}\/g, winnerData.coupon_code || '');\n                    content = content.replace(\/{slice_label}\/g, winnerData.slice_label || '');\n                    content = content.replace(\/{discount_amount}\/g, winnerData.discount_amount || '');\n                    content = content.replace(\/{discount_type}\/g, winnerData.discount_type || '');\n                    content = content.replace(\/{expiry_date}\/g, winnerData.expiry_date || '');\n                    content = content.replace(\/{tickets_count}\/g, winnerData.tickets_count || '');\n                    content = content.replace(\/{valid_date}\/g, winnerData.valid_date || '');\n                    content = content.replace(\/{giveaway_products}\/g, winnerData.giveaway_products || '');\n                    content = content.replace(\/{reward_points}\/g, winnerData.reward_points || '');\n                    content = content.replace(\/{no_prize_text}\/g, winnerData.no_prize_text || '');\n                    content = content.replace(\/{survey}\/g, buildSurveyButton(winnerData));\n                }\n\n                \/\/ Never allow an empty winner modal; fall back to no-prize\/win text.\n                if (!content || !content.trim()) {\n                    const fallbackMessage = winnerData.no_prize_text || winnerData.win_description || 'Better luck next time! Thanks for playing the wheel of fortune.';\n                    content = `<p>${fallbackMessage}<\/p>`;\n                }\n\n                modalContent.innerHTML = content;\n                modal.dataset.requireSurvey = (surveyEnabled && winnerData && winnerData.winner_id && !winnerData.is_none) ? '1' : '0';\n                modal.style.display = 'flex';\n            };\n\n            window.wxgiveawayShowModalMessage = function(title, message, modalElement) {\n                const modal = modalElement || document.querySelector('.winner-modal');\n                const modalContent = modal ? modal.querySelector('.winner-modal-content') : null;\n\n                if (!modal || !modalContent) return;\n\n                const safeTitle = title || 'Error';\n                modalContent.innerHTML = `<h3>${safeTitle}<\/h3><p>${message}<\/p>`;\n                modal.dataset.requireSurvey = '0';\n                modal.style.display = 'flex';\n            };\n\n            function openSurveyFromButton(button) {\n                const container = button.closest('.wxgiveaway-lucky-wheel-container');\n                if (!container) return;\n\n                const surveyModal = container.querySelector('.wxgiveaway-survey-modal');\n                const form = surveyModal ? surveyModal.querySelector('.wxgiveaway-survey-form') : null;\n                const winnerModal = container.querySelector('.winner-modal');\n                if (!surveyModal || !form) return;\n\n                form.reset();\n                const winnerIdEl = form.querySelector('input[name=\"winner_id\"]');\n                const entrantNameEl = form.querySelector('input[name=\"entrant_name\"]');\n                const entrantBusinessEl = form.querySelector('input[name=\"entrant_business\"]');\n                const entrantBusinessAddressEl = form.querySelector('input[name=\"entrant_business_address\"]');\n                const entrantEmailEl = form.querySelector('input[name=\"entrant_email\"]');\n                const entrantPhoneEl = form.querySelector('input[name=\"entrant_phone\"]');\n                const entrantPostcodeEl = form.querySelector('input[name=\"entrant_postcode\"]');\n\n                if (winnerIdEl) winnerIdEl.value = button.getAttribute('data-winner-id') || '';\n                if (entrantNameEl) entrantNameEl.value = button.getAttribute('data-name') || '';\n                if (entrantBusinessEl) entrantBusinessEl.value = button.getAttribute('data-business') || '';\n                if (entrantBusinessAddressEl) entrantBusinessAddressEl.value = button.getAttribute('data-business-address') || '';\n                if (entrantEmailEl) entrantEmailEl.value = button.getAttribute('data-email') || '';\n                if (entrantPhoneEl) entrantPhoneEl.value = button.getAttribute('data-phone') || '';\n                if (entrantPostcodeEl) entrantPostcodeEl.value = button.getAttribute('data-postcode') || '';\n\n                if (winnerModal) {\n                    winnerModal.style.display = 'none';\n                }\n                surveyModal.style.display = 'flex';\n            }\n\n            function setupSurveyHandlers() {\n                document.addEventListener('click', function(e) {\n                    const surveyTrigger = e.target.closest('.wxgiveaway-open-survey');\n                    if (surveyTrigger) {\n                        e.preventDefault();\n                        openSurveyFromButton(surveyTrigger);\n                        return;\n                    }\n\n                    const closeButton = e.target.closest('.wxgiveaway-survey-close');\n                    if (closeButton) {\n                        const surveyModal = closeButton.closest('.wxgiveaway-survey-modal');\n                        const container = closeButton.closest('.wxgiveaway-lucky-wheel-container');\n                        const winnerModal = container ? container.querySelector('.winner-modal') : null;\n                        if (surveyModal) surveyModal.style.display = 'none';\n                        if (winnerModal) winnerModal.style.display = 'flex';\n                    }\n                });\n\n                document.addEventListener('submit', function(e) {\n                    if (!e.target.classList.contains('wxgiveaway-survey-form')) {\n                        return;\n                    }\n                    e.preventDefault();\n\n                    const form = e.target;\n                    const surveyModal = form.closest('.wxgiveaway-survey-modal');\n                    const container = form.closest('.wxgiveaway-lucky-wheel-container');\n                    const winnerModal = container ? container.querySelector('.winner-modal') : null;\n                    const errorEl = form.querySelector('.wxgiveaway-survey-error');\n                    const selectedChildren = form.querySelectorAll('input[name=\"children_at_home[]\"]:checked');\n\n                    if (selectedChildren.length === 0) {\n                        if (errorEl) {\n                            errorEl.style.display = 'block';\n                            errorEl.textContent = 'Please select at least one option for children living at home.';\n                        }\n                        return;\n                    }\n\n                    if (errorEl) {\n                        errorEl.style.display = 'none';\n                        errorEl.textContent = '';\n                    }\n\n                    const formData = new FormData(form);\n                    formData.append('action', 'wxgiveaway_submit_winner_survey');\n                    formData.append('nonce', '5c5ecb3cfb');\n\n                    fetch('https:\/\/www.luckyduckwheel.com.au\/wp-admin\/admin-ajax.php', {\n                        method: 'POST',\n                        body: formData\n                    })\n                    .then(response => response.json())\n                   .then(data => {\n                    if (!data.success) {\n                        if (errorEl) {\n                            errorEl.style.display = 'block';\n                            errorEl.textContent = (data.data && data.data.message)\n                                ? data.data.message\n                                : 'Unable to submit survey.';\n                        }\n                        return;\n                    }\n                \n                    \/\/ Success: hide survey modal\n                    if (surveyModal) surveyModal.style.display = 'none';\n                \n                    \/\/ Show success image in the winner modal\n                    if (winnerModal) {\n                        if (window.wxgiveawayShowModalMessage) {\n                            const successHtml = \"<a href=\\\"https:\\\/\\\/loyaltyrewards.aucommerce.com.au\\\/lucky-duck-draw-entry\\\"><img src=\\\"https:\\\/\\\/www.luckyduckwheel.com.au\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/win.png\\\" style=\\\"width:550; height:367\\\" alt=\\\"Success\\\" \\\/><\\\/a>\";\n                \n                            window.wxgiveawayShowModalMessage(\n                                'Winner',\n                                successHtml,\n                                winnerModal\n                            );\n                        } else {\n                            \/\/ Fallback: just close the winner modal if helper function missing\n                            winnerModal.style.display = 'none';\n                        }\n                    }\n                })\n                    .catch(() => {\n                        if (errorEl) {\n                            errorEl.style.display = 'block';\n                            errorEl.textContent = 'Network error while submitting survey.';\n                        }\n                    });\n                });\n            }\n\n            setupSurveyHandlers();\n        })();\n    <\/script>         <\/div>      <style>         .wxgiveaway-lucky-wheel-container {             display: flex;             gap: 30px;             background: #ffffff;             border-radius: 10px;             max-width: 1200px;             width: fit-content;             margin: 0 auto;             padding: 20px;             \/*flex-wrap: wrap;*\/             box-shadow: 0 4px 15px rgba(0,0,0,0.1);         }          \/* Popup Styles *\/         .wxgiveaway-lucky-wheel-popup {             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             z-index: 999999;         }          .wxgiveaway-popup-overlay {             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             background: rgba(0,0,0,0.7);             z-index: 1;         }          .wxgiveaway-popup-container {             position: fixed;             top: 50%;             left: 50%;             transform: translate(-50%, -50%);             z-index: 2;             max-width: 90%;             max-height: 90%;             overflow: auto;             background: transparent;         }          .wxgiveaway-popup-content {             position: relative;             background: transparent;             border-radius: 15px;         }          .wxgiveaway-close-popup {             position: absolute;             top: 10px;             right: 15px;             background: none;             border: none;             font-size: 24px;             cursor: pointer;             z-index: 3;             color: #333;         }          \/* Floating Modal Styles *\/         .wxgiveaway-floating-modal {             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             z-index: 999999;         }          .wxgiveaway-modal-overlay {             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             background: rgba(0,0,0,0.7);             z-index: 1;         }          .wxgiveaway-modal-container {             position: fixed;             top: 50%;             left: 50%;             transform: translate(-50%, -50%);             z-index: 2;             max-width: 95%;             max-height: 95%;             width: max-content;             overflow: auto;             background: transparent;         }          .wxgiveaway-modal-content {             position: relative;             background: transparent;             border-radius: 15px;         }          .wxgiveaway-close-modal {             position: absolute;             top: 5px;             right: 5px;             background: none;             border: none;             font-size: 30px;             cursor: pointer;             z-index: 3;             color: white;             width: 40px;             height: 40px;             border-radius: 50%;             display: flex;             align-items: center;             justify-content: center;         }          .wxgiveaway-close-modal:hover {             background: rgba(255,255,255,0.1);         }          \/* Floating Icon Styles *\/         .wxgiveaway-floating-icon {             position: fixed;             bottom: 20px;             left: 20px;             width: 60px;             height: 60px;             background: linear-gradient(45deg, #4ecdc4, #44a08d);             border-radius: 50%;             display: flex;             align-items: center;             justify-content: center;             cursor: pointer;             z-index: 99999;             box-shadow: 0 4px 15px rgba(0,0,0,0.3);             transition: all 0.3s ease;         }          .wxgiveaway-floating-icon:hover {             transform: scale(1.1);             box-shadow: 0 6px 20px rgba(0,0,0,0.4);         }          .wxgiveaway-floating-icon svg {             width: 30px;             height: 30px;             fill: white;         }          .wheel-form-container {             flex: 1;             min-width: 300px;             color: #0071c7;             padding: 30px;         }          .wheel-container {             flex: 1;             min-width: 300px;             display: flex;             flex-direction: column;             align-items: center;             justify-content: center;             text-align: center;         }          .wheel-media img {             max-width: 100%;             height: auto;             display: block;             margin: 0 auto 15px;         }          .wheel-caption {             margin-top: 12px;             max-width: 420px;         }          .wheel-caption p {             margin: 0;         }          .wheel-wrapper {             position: relative;             margin-bottom: 20px;         }          .wheel-wrapper canvas {             width: 100%;             border-radius: 50%;             box-shadow: 0 8px 30px rgba(0,0,0,0.3);             transition: transform 4000ms cubic-bezier(0.23, 1, 0.32, 1);         }          .wheel-pointer {             position: absolute;             top: -10px;             left: 50%;             transform: translateX(-50%);             width: 0;             height: 0;             border-left: 20px solid transparent;             border-right: 20px solid transparent;             border-top: 30px solid #8edaf8;             z-index: 10;             filter: drop-shadow(0 2px 4px rgba(0,0,0,0.3));         }          .wheel-center-circle {             position: absolute;             top: 50%;             left: 50%;             transform: translate(-50%, -50%);             width: 40px;             height: 40px;             background: linear-gradient(145deg, #210099, #123bde);             border-radius: 50%;             box-shadow: 0 0 20px #123bde80;             z-index: 10;             display: flex;             align-items: center;             justify-content: center;         }          .wheel-center-circle::before {             content: '';             position: absolute;             width: 10px;             height: 10px;             background: #fff;             border-radius: 50%;         }          .wheel-form {             display: flex;             flex-direction: column;             margin-top: 20px;         }          .lucky-wheel-form-group {             display: flex;             flex-direction: column;         }          .lucky-wheel-form-group label {             font-weight: 600;         }          .lucky-wheel-form-group input,         .lucky-wheel-form-group select {             padding: 12px;             border: 2px solid #ddd;             border-radius: 8px;             font-size: 16px;             transition: border-color 0.3s ease;         }          .lucky-wheel-form-group input:focus {             outline: none;             border-color: #ff6b6b;         }          .lucky-wheel-form-group input[readonly] {             background-color: #f3f3f3;             color: #666;             cursor: not-allowed;         }          .lucky-wheel-error-success-message{             color: red;         }          .lucky-wheel-submit-button {             padding: 15px;             background: linear-gradient(45deg, #4ecdc4, #44a08d);             color: white;             border: none;             border-radius: 8px;             font-size: 16px;             font-weight: bold;             cursor: pointer;             transition: all 0.3s ease;             outline: none;             margin-top: 10px;         }          .lucky-wheel-submit-button:hover {             background: linear-gradient(45deg, #44a08d, #4ecdc4);             transform: translateY(-2px);             box-shadow: 0 5px 15px rgba(68, 160, 141, 0.3);         }          .checkbox-group {             display: flex;             align-items: flex-start;             gap: 10px;         }          .checkbox-group input[type=\"checkbox\"] {             width: auto;         }          .winner-modal {             display: none;             position: fixed;             top: 0;             left: 0;             width: 100%;             height: 100%;             background: rgba(0,0,0,0.8);             z-index: 1000;             justify-content: center;             align-items: center;         }          .winner-content {             background: white;             padding: 40px;             border-radius: 20px;             text-align: center;             max-width: 500px;             max-height: 90vh;             overflow-y: auto;             position: relative;             animation: bounceIn 0.6s ease;         }          .winner-title {             font-size: 32px;             color: #ff6b6b;             margin-bottom: 20px;             font-weight: bold;         }          .winner-prize {             font-size: 24px;             margin: 20px 0;             padding: 20px;             background: linear-gradient(45deg, #ffd700, #ffed4a);             border-radius: 10px;             font-weight: bold;         }          .close-modal {             position: absolute;             top: 10px;             right: 15px;             background: none;             border: none;             font-size: 24px;             cursor: pointer;         }          @keyframes bounceIn {             0% { transform: scale(0.3); opacity: 0; }             50% { transform: scale(1.05); }             70% { transform: scale(0.9); }             100% { transform: scale(1); opacity: 1; }         }          @media (max-width: 768px) {             .wxgiveaway-lucky-wheel-container {                 flex-direction: column;                 gap: 20px;                 padding: 15px;                 margin: 10px;             }              .wxgiveaway-popup-container,             .wxgiveaway-modal-container {                 max-width: 95%;                 max-height: 95%;             }              .wxgiveaway-modal-content {                 padding: 10px;             }              .wxgiveaway-close-modal {                 top: -35px;                 right: -5px;                 font-size: 25px;             }              .lucky-wheel {                 width: 300px;                 height: 300px;             }              .wheel-slice {                 font-size: 12px;                 padding: 5px;             }         }     <\/style>      <script>\n        (function() {\n            \/\/ Use IIFE and closure to avoid conflicts\n            const wheelId = 'lucky-wheel-69e4ebf5a1e2a';\n            const wxgiveawayMessages = {\"required_fields\":\"Please fill in all required fields.\",\"accept_terms\":\"Please accept the terms and conditions.\",\"accept_over_18\":\"Please confirm that you are over 18 years old.\",\"invalid_email\":\"Please enter a valid email address.\",\"invalid_phone\":\"Please enter a valid phone number.\",\"invalid_phone_digits\":\"Please enter a valid phone number with at least 10 digits.\",\"general_error\":\"Error occurred. Please try again.\",\"network_error\":\"Network error occurred. Please check your connection and try again.\"};\n\n            function initWheel() {\n                const wheelContainer = document.getElementById(wheelId);\n                if (!wheelContainer) {\n                    console.error('Wheel container not found:', wheelId);\n                    return;\n                }\n\n                const form = wheelContainer.querySelector('.wheel-form');\n                const submitButton = form ? form.querySelector('.lucky-wheel-submit-button') : null;\n                const errorMessage = form ? form.querySelector('.lucky-wheel-error-success-message') : null;\n                const modal = wheelContainer.querySelector('.winner-modal');\n                const closeModal = modal ? modal.querySelector('.close-modal') : null;\n\n                if (!form || !submitButton) {\n                    console.error('Form or submit button not found in:', wheelId);\n                    return;\n                }\n\n                let isSpinning = false;\n\n                \/\/ Validation functions\n                function isValidEmail(email) {\n                    const emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n                    return emailRegex.test(email);\n                }\n\n                function isValidPhone(phone) {\n                    \/\/ Basic phone validation - allows numbers, spaces, parentheses, hyphens, plus sign\n                    \/\/ You can adjust this regex based on your specific requirements\n                    const phoneRegex = \/^[\\+]?[0-9\\s\\-\\(\\)]{10,}$\/;\n                    return phoneRegex.test(phone.replace(\/\\s\/g, ''));\n                }\n\n                function validateForm() {\n                    const requiredFields = form.querySelectorAll('[required]');\n                    let isValid = true;\n                    let errorMessages = [];\n\n                    \/\/ Clear previous error styles\n                    requiredFields.forEach(field => {\n                        field.style.borderColor = '';\n                        const label = form.querySelector(`label[for=\"${field.id}\"]`);\n                        if (label) label.style.color = '';\n                    });\n\n                    \/\/ Validate required fields\n                    requiredFields.forEach(field => {\n                        if (field.type === 'checkbox') {\n                            if (!field.checked) {\n                                isValid = false;\n                                field.style.borderColor = '#ff0000';\n                                const label = form.querySelector(`label[for=\"${field.id}\"]`);\n                                if (label) label.style.color = '#ff0000';\n                                if (field.id === 'accept_over_18') {\n                                    errorMessages.push(wxgiveawayMessages.accept_over_18);\n                                } else {\n                                    errorMessages.push(wxgiveawayMessages.accept_terms);\n                                }\n                            }\n                        } else {\n                            if (!field.value.trim()) {\n                                isValid = false;\n                                field.style.borderColor = '#ff0000';\n                                errorMessages.push(wxgiveawayMessages.required_fields);\n                            } else {\n                                \/\/ Specific field validations\n                                if (field.type === 'email' && field.value.trim()) {\n                                    if (!isValidEmail(field.value.trim())) {\n                                        isValid = false;\n                                        field.style.borderColor = '#ff0000';\n                                        errorMessages.push(wxgiveawayMessages.invalid_email);\n                                    }\n                                }\n\n                                if (field.type === 'tel' && field.value.trim()) {\n                                    if (!isValidPhone(field.value.trim())) {\n                                        isValid = false;\n                                        field.style.borderColor = '#ff0000';\n                                        errorMessages.push(wxgiveawayMessages.invalid_phone);\n                                    }\n                                }\n                            }\n                        }\n                    });\n\n                    return {\n                        isValid: isValid,\n                        messages: [...new Set(errorMessages)] \/\/ Remove duplicates\n                    };\n                }\n\n                \/\/ Real-time validation\n                function setupRealTimeValidation() {\n                    const emailField = form.querySelector('#customer_email');\n                    const phoneField = form.querySelector('#customer_phone');\n\n                    if (emailField) {\n                        emailField.addEventListener('blur', function() {\n                            if (this.value.trim() && !isValidEmail(this.value.trim())) {\n                                this.style.borderColor = '#ff0000';\n                                showErrorMessage(wxgiveawayMessages.invalid_email);\n                            } else {\n                                this.style.borderColor = '';\n                            }\n                        });\n                    }\n\n                    if (phoneField) {\n                        phoneField.addEventListener('blur', function() {\n                            if (this.value.trim() && !isValidPhone(this.value.trim())) {\n                                this.style.borderColor = '#ff0000';\n                                showErrorMessage(wxgiveawayMessages.invalid_phone);\n                            } else {\n                                this.style.borderColor = '';\n                            }\n                        });\n                    }\n\n                    \/\/ Clear error message when user starts typing\n                    const inputs = form.querySelectorAll('input, select, textarea');\n                    inputs.forEach(input => {\n                        input.addEventListener('input', function() {\n                            if (errorMessage) {\n                                errorMessage.innerHTML = \"\";\n                                errorMessage.style.display = 'none';\n                            }\n                            this.style.borderColor = '';\n                        });\n                    });\n                }\n\n                function showErrorMessage(message) {\n                    if (window.wxgiveawayShowModalMessage) {\n                        window.wxgiveawayShowModalMessage(\n                            'Error',\n                            message,\n                            modal\n                        );\n                        return;\n                    }\n\n                    if (errorMessage) {\n                        errorMessage.innerHTML = message;\n                        errorMessage.style.display = 'block';\n                        errorMessage.style.color = '#ff0000';\n\n                        setTimeout(function() {\n                            errorMessage.innerHTML = \"\";\n                            errorMessage.style.display = 'none';\n                        }, 7000);\n                    }\n                }\n\n                function showSuccessMessage(message) {\n                    if (errorMessage) {\n                        errorMessage.innerHTML = message;\n                        errorMessage.style.display = 'block';\n                        errorMessage.style.color = '#008000';\n\n                        setTimeout(function() {\n                            errorMessage.innerHTML = \"\";\n                            errorMessage.style.display = 'none';\n                        }, 5000);\n                    }\n                }\n\n                submitButton.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n\n                    const originalButtonText = submitButton.innerHTML;\n                    submitButton.innerHTML = \"Processing...\";\n                    submitButton.disabled = true;\n\n                    if (isSpinning) {\n                        submitButton.innerHTML = originalButtonText;\n                        submitButton.disabled = false;\n                        return;\n                    }\n\n                    \/\/ Validate form\n                    const validation = validateForm();\n\n                    if (!validation.isValid) {\n                        showErrorMessage(validation.messages.join('<br>'));\n                        submitButton.innerHTML = originalButtonText;\n                        submitButton.disabled = false;\n                        return;\n                    }\n\n                    const formData = new FormData();\n                    const inputs = form.querySelectorAll('input, select, textarea');\n                    inputs.forEach(input => {\n                        if (input.type === 'checkbox' || input.type === 'radio') {\n                            if (input.checked) {\n                                formData.append(input.name, input.value || 'on');\n                            }\n                        } else {\n                            formData.append(input.name, input.value);\n                        }\n                    });\n                    formData.append('action', 'wxgiveaway_spin_wheel');\n                    formData.append('nonce', '4d804a66b1');\n\n                    fetch('https:\/\/www.luckyduckwheel.com.au\/wp-admin\/admin-ajax.php', {\n                        method: 'POST',\n                        body: formData\n                    })\n                        .then(response => response.json())\n                        .then(data => {\n                            if (data.success) {\n                                isSpinning = true;\n\n                                inputs.forEach(input => {\n                                    if (input.type === 'checkbox' || input.type === 'radio') {\n                                        input.checked = false;\n                                    } else if (input.type !== 'button' && input.type !== 'submit') {\n                                        input.value = '';\n                                    }\n                                });\n\n                                if (window[wheelId + '_spinWheel']) {\n                                    window[wheelId + '_spinWheel'](data.data.winner_slice_index);\n                                }\n                                const spinTotalDuration = (8 * 1000) + 4000;\n\n                                setTimeout(() => {\n                                    showWinner(data.data.slice_data, data.data.customer_data);\n                                    isSpinning = false;\n                                }, spinTotalDuration + 500);\n\n                                submitButton.innerHTML = originalButtonText;\n                                submitButton.disabled = false;\n                            } else {\n                                console.error('Lucky Wheel error response:', data);\n                                showErrorMessage(data.data.message || wxgiveawayMessages.general_error);\n                                submitButton.innerHTML = originalButtonText;\n                                submitButton.disabled = false;\n                            }\n                        })\n                        .catch(error => {\n                            console.error('Error:', error);\n                            showErrorMessage(wxgiveawayMessages.network_error);\n                            submitButton.innerHTML = originalButtonText;\n                            submitButton.disabled = false;\n                        });\n                });\n\n                function showWinner(sliceData, customerData = {}) {\n                    if (!modal) return;\n\n                    \/\/ Prepare winner data for modal\n                    const winnerData = {\n                        winner_id: customerData.winner_id || 0,\n                        customer_name: customerData.name || '',\n                        customer_business: customerData.business || '',\n                        customer_business_address: customerData.business_address || '',\n                        customer_email: customerData.email || '',\n                        customer_phone: customerData.phone || '',\n                        customer_postcode: customerData.postcode || '',\n                        win_description: sliceData.details || '',\n                        coupon_code: sliceData.coupon_code || '',\n                        discount_amount: sliceData.discount_amount || '',\n                        discount_type: sliceData.discount_type || '',\n                        expiry_date: sliceData.expiry_date || '',\n                        tickets_count: sliceData.tickets_count || '',\n                        valid_date: sliceData.expiry_date || '', \/\/ Using expiry_date for valid_date\n                        giveaway_products: sliceData.giveaway_products || '',\n                        reward_points: sliceData.reward_points || '',\n                        slice_label: sliceData.slice_label || '',\n                        no_prize_text: sliceData.no_prize_text || '',\n                        is_none: sliceData.is_none || false\n                    };\n\n                    \/\/ Use the global function to update modal content\n                    if (window.wxgiveawayUpdateWinnerModal) {\n                        window.wxgiveawayUpdateWinnerModal(winnerData, modal);\n                    } else {\n                        modal.innerHTML = `\n                        <div>\n                            <p>Congratulations!<\/p>\n                            <p>${sliceData.slice_label}<\/p>\n                            <p>${sliceData.details}<\/p>\n                        <\/div>\n                    `;\n                        modal.style.display = 'flex';\n                    }\n                }\n\n                if (closeModal) {\n                    closeModal.addEventListener('click', function() {\n                        if (modal && modal.dataset.requireSurvey === '1') {\n                            return;\n                        }\n                        modal.style.display = 'none';\n                        if (form) form.style.display = 'flex';\n                    });\n                }\n\n                if (modal) {\n                    modal.addEventListener('click', function(e) {\n                        if (modal.dataset.requireSurvey === '1') {\n                            return;\n                        }\n                        if (e.target === modal) {\n                            if (closeModal) {\n                                closeModal.click();\n                            } else {\n                                modal.style.display = 'none';\n                                if (form) form.style.display = 'flex';\n                            }\n                        }\n                    });\n                }\n\n                \/\/ Initialize real-time validation\n                setupRealTimeValidation();\n            }\n\n            \/\/ Initialize when DOM is ready\n            if (document.readyState === 'loading') {\n                document.addEventListener('DOMContentLoaded', initWheel);\n            } else {\n                \/\/ DOM already loaded, initialize immediately\n                initWheel();\n            }\n        })();\n    <\/script>     <\/div> \t\t\t\t\t\t<\/div> \t\t\t\t\t<\/div> \t\t<\/div> \t\t\t\t\t<\/div> \t\t<\/section> \t\t\t\t<section data-ka-cursor-size=\"1\" class=\"elementor-section elementor-top-section elementor-element elementor-element-8a96e8c kng-custom-css-yes elementor-section-boxed elementor-section-height-default elementor-section-height-default wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no\" data-id=\"8a96e8c\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;kng_custom_css_switch&quot;:&quot;yes&quot;,&quot;background_background&quot;:&quot;classic&quot;,&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\"> \t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\"> \t\t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f60fab0\" data-id=\"f60fab0\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\"> \t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\"> \t\t\t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-element elementor-element-6114b42 elementor-widget elementor-widget-menu-anchor\" data-id=\"6114b42\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\" data-widget_type=\"menu-anchor.default\"> \t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"terms\"><\/div> \t\t\t\t\t\t<\/div> \t\t\t\t<div data-ka-cursor-size=\"1\" class=\"elementor-element elementor-element-a4d4315 elementor-widget elementor-widget-text-editor\" data-id=\"a4d4315\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;kng_cursor_interaction&quot;:&quot;default&quot;,&quot;kng_cursor_magnetic&quot;:&quot;none&quot;,&quot;kng_cursor_size_multiplier&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:1,&quot;sizes&quot;:[]}}\" data-widget_type=\"text-editor.default\"> \t\t\t\t\t\t\t\t\t<h3><b>ROYAL<\/b><b> <\/b><b>LIFE<\/b><b> <\/b><b>SAVING<\/b><b> <\/b><b>LUCKY<\/b><b> <\/b><b>DUCK<\/b><b> <\/b><b>PROMOTION<\/b><b> <\/b><b>2025\/26<\/b><\/h3> <p><b>TERMS<\/b><b> <\/b><b>AND<\/b><b> <\/b><b>CONDITIONS<\/b><\/p> <p><b>Participation<\/b><\/p> <ol> <li>The promoter is Loyalty Fundraising Pty Ltd t\/a lnstaprize ABN 51 642 660 928 of 8 <i>I <\/i>8 Trawalla Avenue, Toorak VIC 3142 (NSW Authority Number TP\/04166 and SA Permit Number T25\/1116) in conjunction with the Royal Life Saving Society Western Australia Inc. (Royal Life Saving) ABN 28 083 676 266 of 12 McGillivray Rd, Mt Claremont WA 6010.<\/li> <li>Information on how to enter and the prize(s) form part of these Terms and Conditions. Participation in this promotion is deemed acceptance of these Terms and Conditions.<\/li> <li>The Royal Life Saving Lucky Duck Promotion 2025\/26 is conducted in conjunction with the World Drowning Prevention Day 2026 (WDPD26) Annual Promotion which commences on 01\/0712025 at 12:00am AWST and ends on 30\/06\/2026 at 11:59pm AWST.<\/li> <li>Entry is only open to residents of Western Australia aged 18 years or over.<\/li> <li>The Promoter reserves the right to expand the territory of the promotion, subject to any required permits, and will publish any changes on loyaltyrewards.aucommerce.com.au.<\/li> <li>Directors, Executive, Senior Management and direct marketing &amp; fundraising staff of Royal Life Saving, and direct &amp; indirect marketing and fundraising staff of contractors involved in this promotion and lnstaprize are ineligible to enter the promotion.<\/li> <\/ol> <p><b>How<\/b><b> <\/b><b>To<\/b><b> <\/b><b>Enter<\/b><\/p> <ol start=\"7\"> <li>Entries into this promotion open on 01\/0712025 at 12:00am AWST and close on 30\/06\/2026 at 11:59pm AWST <b>(Promotional Period).<\/b><\/li> <li>To be eligible to enter, individuals must subscribe to receive marketing emails and SMS from the Promoter (if not already subscribed) and remain subscribed for the duration of the Promotional Period. If an entrant unsubscribes from the email and\/or SMS mailing list during the Promotional Period, all their entries will be deemed invalid.<\/li> <li>To enter, during the Promotional Period individuals must: <ul> <li>visit luckyduck.aucommerce.com.au and follow the prompts to the promotion entry page;<\/li> <li>play the digital scratchie (or spinner) game, where entrants will be prompted to scratch (or spin) a digital image to reveal whether or not they have won an instant prize;<\/li> <li>input the requested details (including name, email, mobile phone number and postcode); and<\/li> <li>submit the fully completed survey entry form.<\/li> <\/ul> <\/li> <li>There are two (2) components to this promotion: <ul> <li>instant prizes; and<\/li> <li>a major prize draw.<\/li> <\/ul> <\/li> <\/ol> <p><b>Instant<\/b><b> <\/b><b>Prizes<\/b><\/p> <ol start=\"11\"> <li>Each eligible entrant who enters this promotion will be notified instantly on screen whether or not they are an instant prize winner and, if so, details on how to verify their entry and claim their prize.<\/li> <li>The instant prizes to be won are as follows:<\/li> <\/ol> <table cellspacing=\"0\" cellpadding=\"0\"> <tbody> <tr> <td valign=\"top\"> <ul> <li>Win Nothing<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 6.25 chance)<\/p> <\/td> <td valign=\"top\"> <p>16%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>Triple Entries in the WDPD26 draw<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(3 in 5 chance)<\/p> <\/td> <td valign=\"top\"> <p>60%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$10 Bronze Rewards Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 20 chance)<\/p> <\/td> <td valign=\"top\"> <p>5%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$25 Silver Rewards Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 20 chance)<\/p> <\/td> <td valign=\"top\"> <p>5%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$50 Gold Rewards Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 20 chance)<\/p> <\/td> <td valign=\"top\"> <p>5%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$75 Platinum Rewards Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 20 chance)<\/p> <\/td> <td valign=\"top\"> <p>5%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$250 Titanium Rewards Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 50 chance)<\/p> <\/td> <td valign=\"top\"> <p>2%<\/p> <\/td> <\/tr> <tr> <td valign=\"top\"> <ul> <li>$10 Woolworths Gift Card<\/li> <\/ul> <\/td> <td valign=\"top\"> <p>(1 in 50 chance)<\/p> <\/td> <td valign=\"top\"> <p>2%<\/p> <\/td> <\/tr> <\/tbody> <\/table> <ol start=\"13\"> <li>All winners of the Double or Triple entries in the WDPD26 draw must register for the draw via the entry page on the loyaltyrewards.aucommerce.com.au website. Entrants will be directed to the entry page on successful completion of the survey entry form.<\/li> <li>All winners of a Rewards Card or Woolworths Gift Card will be sent their prize to the email provided at registration within five (5) to seven (7) working days.<\/li> <\/ol> <p><b><br>WDPD26<\/b><b> <\/b><b>Annual<\/b><b> <\/b><b>Prize<\/b><b> <\/b><b>Draw<\/b><\/p> <ol start=\"15\"> <li>All valid entries that wish to enter the WDPD26 Promotion will do so by successfully entering their details during the Promotional Period after playing the digital game, providing all requested details, completing the survey entry form and registering for the draw via the form on the entry page on the loyaltyrewards.aucommerce.com.au website. Entrants will be directed to the entry page on successful completion of the survey entry form.<\/li> <li>Entrants in the Royal Life Saving Lucky Duck Promotion 2025\/26 will NOT be automatically entered into the WDPD26 annual draw.<\/li> <li>Entrants will only be entered into the WDPD26 annual draw by registering for the promotion via the form on the entry page on the loyaltyrewards.aucommerce.com.au website.<\/li> <li>These Terms and Conditions are to be read in conjunction with the full Terms and Conditions of the WDPD26 Annual Promotion: loyaltyrewards.aucommerce.com.au\/terms-and-conditions<\/li> <\/ol> <p><b>General<\/b><\/p> <ol start=\"19\"> <li>Only one (1) entry is permitted per person.<\/li> <li>Only one (1) prize per component is permitted per person.<\/li> <li>The Promoter reserves the right, at any time, to verify the validity of entries and entrants (including an entrant&#8217;s identity, age and place of residence) and reserves the right, in its sole discretion, to disqualify any individual who the Promoter has reason to believe has breached any of these Terms and Conditions, tampered with the entry process or engaged in any unlawful or other improper misconduct calculated to jeopardise fair and proper conduct of the promotion. Errors and omissions may be accepted at the Promoter&#8217;s discretion. Failure by the Promoter to enforce any of its rights at any stage does not constitute a waiver of those rights. The Promoter&#8217;s legal rights to recover damages or other compensation from such an offender are reserved.<\/li> <li>Incomplete, indecipherable, or illegible entries will be deemed invalid.<\/li> <li>If there is a dispute as to the identity of an entrant, the Promoter reserves the right, in its sole discretion, to determine the identity of the entrant.<\/li> <li>If any prize is unavailable, the Promoter, in its discretion, reserves the right to substitute the prize with a prize to the equal value and\/or specification, subject to any written directions from a regulatory authority.<\/li> <li>The potential total prize pool value is up to $232,000.<\/li> <li>Entrants consent to the Promoter using their name, likeness, image and\/or voice in the event they are a winner (including photograph, film and\/or recording of the same) in any media for an unlimited period without remuneration for the purpose of promoting this promotion (including any outcome), and promoting any products manufactured, distributed and\/or supplied by the Promoter.<\/li> <li>If this promotion is interfered with in any way or is not capable of being conducted as reasonably anticipated due to any reason beyond the reasonable control of the Promoter, including but not limited to technical difficulties, unauthorised intervention or fraud, the Promoter reserves the right, in its sole discretion, to the fullest extent permitted by law: (a) to disqualify any entrant; or (bl subject to any written directions from a regulatory authority, to modify, suspend, terminate or cancel the promotion, as appropriate.<\/li> <li>Any cost associated with accessing the promotional website is the entrant&#8217;s responsibility and is dependent on the internet service provider used.<\/li> <li>A maximum of 10,000 unique user games can be played during the Promotional Period.<\/li> <li>For full details of the WDPD26 Annual Promotion, including Draw Details, Prize Pool, Use of Personal Information and Privacy Rules refer to: <a href=\"http:\/\/loyaltyrewards.aucommerce.com.au\/terms-and-conditions\">loyaltyrewards.aucommerce.com.au\/terms-and-conditions<\/a><\/li> <\/ol>\t\t\t\t\t\t\t\t<\/div> \t\t\t\t\t<\/div> \t\t<\/div> \t\t\t\t\t<\/div> \t\t<\/section> \t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>ROYAL LIFE SAVING LUCKY DUCK PROMOTION 2025\/26 TERMS AND CONDITIONS Participation The promoter is Loyalty Fundraising Pty Ltd t\/a lnstaprize ABN 51 642 660 928 of 8 I 8 Trawalla Avenue, Toorak VIC 3142 (NSW Authority Number TP\/04166 and SA Permit Number T25\/1116) in conjunction with the Royal Life Saving Society Western Australia Inc. (Royal Life Saving) ABN 28 083 676 266 of 12 McGillivray Rd, Mt Claremont WA 6010. Information on how to enter and the prize(s) form part of these Terms and Conditions. Participation in this promotion is deemed acceptance of these Terms and Conditions. The Royal Life Saving Lucky Duck Promotion 2025\/26 is conducted in conjunction with the World Drowning Prevention Day 2026 (WDPD26) Annual Promotion which commences on 01\/0712025 at 12:00am AWST and ends on 30\/06\/2026 at 11:59pm AWST. Entry is only open to residents of Western Australia aged 18 years or over. The Promoter reserves the right to expand the territory of the promotion, subject to any required permits, and will publish any changes on loyaltyrewards.aucommerce.com.au. Directors, Executive, Senior Management and direct marketing &amp; fundraising staff of Royal Life Saving, and direct &amp; indirect marketing and fundraising staff of contractors involved in this promotion and lnstaprize are ineligible to enter the promotion. How To Enter Entries into this promotion open on 01\/0712025 at 12:00am AWST and close on 30\/06\/2026 at 11:59pm AWST (Promotional Period). To be eligible to enter, individuals must subscribe to receive marketing emails and SMS from the Promoter (if not already subscribed) and remain subscribed for the duration of the Promotional Period. If an entrant unsubscribes from the email and\/or SMS mailing list during the Promotional Period, all their entries will be deemed invalid. To enter, during the Promotional Period individuals must: visit luckyduck.aucommerce.com.au and follow the prompts to the promotion entry page; play the digital scratchie (or spinner) game, where entrants will be prompted to scratch (or spin) a digital image to reveal whether or not they have won an instant prize; input the requested details (including name, email, mobile phone number and postcode); and submit the fully completed survey entry form. There are two (2) components to this promotion: instant prizes; and a major prize draw. Instant Prizes Each eligible entrant who enters this promotion will be notified instantly on screen whether or not they are an instant prize winner and, if so, details on how to verify their entry and claim their prize. The instant prizes to be won are as follows: Win Nothing (1 in 6.25 chance) 16% Triple Entries in the WDPD26 draw (3 in 5 chance) 60% $10 Bronze Rewards Card (1 in 20 chance) 5% $25 Silver Rewards Card (1 in 20 chance) 5% $50 Gold Rewards Card (1 in 20 chance) 5% $75 Platinum Rewards Card (1 in 20 chance) 5% $250 Titanium Rewards Card (1 in 50 chance) 2% $10 Woolworths Gift Card (1 in 50 chance) 2% All winners of the Double or Triple entries in the WDPD26 draw must register for the draw via the entry page on the loyaltyrewards.aucommerce.com.au website. Entrants will be directed to the entry page on successful completion of the survey entry form. All winners of a Rewards Card or Woolworths Gift Card will be sent their prize to the email provided at registration within five (5) to seven (7) working days. WDPD26 Annual Prize Draw All valid entries that wish to enter the WDPD26 Promotion will do so by successfully entering their details during the Promotional Period after playing the digital game, providing all requested details, completing the survey entry form and registering for the draw via the form on the entry page on the loyaltyrewards.aucommerce.com.au website. Entrants will be directed to the entry page on successful completion of the survey entry form. Entrants in the Royal Life Saving Lucky Duck Promotion 2025\/26 will NOT be automatically entered into the WDPD26 annual draw. Entrants will only be entered into the WDPD26 annual draw by registering for the promotion via the form on the entry page on the loyaltyrewards.aucommerce.com.au website. These Terms and Conditions are to be read in conjunction with the full Terms and Conditions of the WDPD26 Annual Promotion: loyaltyrewards.aucommerce.com.au\/terms-and-conditions General Only one (1) entry is permitted per person. Only one (1) prize per component is permitted per person. The Promoter reserves the right, at any time, to verify the validity of entries and entrants (including an entrant&#8217;s identity, age and place of residence) and reserves the right, in its sole discretion, to disqualify any individual who the Promoter has reason to believe has breached any of these Terms and Conditions, tampered with the entry process or engaged in any unlawful or other improper misconduct calculated to jeopardise fair and proper conduct of the promotion. Errors and omissions may be accepted at the Promoter&#8217;s discretion. Failure by the Promoter to enforce any of its rights at any stage does not constitute a waiver of those rights. The Promoter&#8217;s legal rights to recover damages or other compensation from such an offender are reserved. Incomplete, indecipherable, or illegible entries will be deemed invalid. If there is a dispute as to the identity of an entrant, the Promoter reserves the right, in its sole discretion, to determine the identity of the entrant. If any prize is unavailable, the Promoter, in its discretion, reserves the right to substitute the prize with a prize to the equal value and\/or specification, subject to any written directions from a regulatory authority. The potential total prize pool value is up to $232,000. Entrants consent to the Promoter using their name, likeness, image and\/or voice in the event they are a winner (including photograph, film and\/or recording of the same) in any media for an unlimited period without remuneration for the purpose of promoting this promotion (including any outcome), and promoting any products manufactured, distributed and\/or supplied by the Promoter. If this promotion is interfered with in any way or is not capable of being conducted as reasonably anticipated due to any reason<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","footnotes":""},"class_list":["post-65","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/pages\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":82,"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/pages\/65\/revisions"}],"predecessor-version":[{"id":520,"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/pages\/65\/revisions\/520"}],"wp:attachment":[{"href":"https:\/\/www.luckyduckwheel.com.au\/index.php\/wp-json\/wp\/v2\/media?parent=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}