Changeset 3470708
- Timestamp:
- 02/26/2026 09:54:56 PM (11 days ago)
- Location:
- ultimate-spin-wheel
- Files:
-
- 127 added
- 8 edited
-
tags/2.0.3 (added)
-
tags/2.0.3/assets (added)
-
tags/2.0.3/assets/admin (added)
-
tags/2.0.3/assets/admin/ultimate-spin-wheel-admin.css (added)
-
tags/2.0.3/assets/admin/ultimate-spin-wheel-admin.rtl.css (added)
-
tags/2.0.3/assets/css (added)
-
tags/2.0.3/assets/css/spin-wheel.css (added)
-
tags/2.0.3/assets/css/spin-wheel.rtl.css (added)
-
tags/2.0.3/assets/fonts (added)
-
tags/2.0.3/assets/fonts/icomoon.svg (added)
-
tags/2.0.3/assets/fonts/icomoon.ttf (added)
-
tags/2.0.3/assets/fonts/icomoon.woff (added)
-
tags/2.0.3/assets/images (added)
-
tags/2.0.3/assets/images/logo-menu.svg (added)
-
tags/2.0.3/assets/images/logo.png (added)
-
tags/2.0.3/assets/images/presets (added)
-
tags/2.0.3/assets/images/presets/preset-bg-eight.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-five.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-four.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-one.jpg (added)
-
tags/2.0.3/assets/images/presets/preset-bg-seven.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-six.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-three.png (added)
-
tags/2.0.3/assets/images/presets/preset-bg-two.png (added)
-
tags/2.0.3/assets/images/presets/preset-spin-button-eight.png (added)
-
tags/2.0.3/assets/images/presets/preset-spin-button-five.png (added)
-
tags/2.0.3/assets/images/presets/preset-spin-button-four.png (added)
-
tags/2.0.3/assets/images/presets/preset-spin-button-one.png (added)
-
tags/2.0.3/assets/images/presets/preset-spin-button-six.png (added)
-
tags/2.0.3/assets/images/rocket-bg.jpg (added)
-
tags/2.0.3/assets/images/spin-trigger-1.png (added)
-
tags/2.0.3/assets/images/spin-trigger-2.png (added)
-
tags/2.0.3/assets/images/spin-trigger-3.png (added)
-
tags/2.0.3/assets/js (added)
-
tags/2.0.3/assets/js/spin-wheel.js (added)
-
tags/2.0.3/assets/others (added)
-
tags/2.0.3/assets/others/celebration.mp3 (added)
-
tags/2.0.3/assets/vendor (added)
-
tags/2.0.3/assets/vendor/js (added)
-
tags/2.0.3/assets/vendor/js/canvas-confetti.js (added)
-
tags/2.0.3/assets/vendor/js/lucky-canvas.umd.min.js (added)
-
tags/2.0.3/assets/vendor/js/micromodal.min.js (added)
-
tags/2.0.3/build (added)
-
tags/2.0.3/build/103.js (added)
-
tags/2.0.3/build/165.js (added)
-
tags/2.0.3/build/177.js (added)
-
tags/2.0.3/build/237.js (added)
-
tags/2.0.3/build/263.js (added)
-
tags/2.0.3/build/354.js (added)
-
tags/2.0.3/build/36.js (added)
-
tags/2.0.3/build/368.js (added)
-
tags/2.0.3/build/397-rtl.css (added)
-
tags/2.0.3/build/397.css (added)
-
tags/2.0.3/build/397.js (added)
-
tags/2.0.3/build/418.js (added)
-
tags/2.0.3/build/46.js (added)
-
tags/2.0.3/build/465.js (added)
-
tags/2.0.3/build/468.js (added)
-
tags/2.0.3/build/498-rtl.css (added)
-
tags/2.0.3/build/498.css (added)
-
tags/2.0.3/build/498.js (added)
-
tags/2.0.3/build/592.js (added)
-
tags/2.0.3/build/760.js (added)
-
tags/2.0.3/build/803.js (added)
-
tags/2.0.3/build/83.js (added)
-
tags/2.0.3/build/979.js (added)
-
tags/2.0.3/build/admin (added)
-
tags/2.0.3/build/admin/block.json (added)
-
tags/2.0.3/build/admin/index-rtl.css (added)
-
tags/2.0.3/build/admin/index.asset.php (added)
-
tags/2.0.3/build/admin/index.css (added)
-
tags/2.0.3/build/admin/index.js (added)
-
tags/2.0.3/build/campaign (added)
-
tags/2.0.3/build/campaign/block.json (added)
-
tags/2.0.3/build/campaign/index-rtl.css (added)
-
tags/2.0.3/build/campaign/index.asset.php (added)
-
tags/2.0.3/build/campaign/index.css (added)
-
tags/2.0.3/build/campaign/index.js (added)
-
tags/2.0.3/changelog.txt (added)
-
tags/2.0.3/class-core.php (added)
-
tags/2.0.3/dci (added)
-
tags/2.0.3/dci/assets (added)
-
tags/2.0.3/dci/assets/css (added)
-
tags/2.0.3/dci/assets/css/dci.css (added)
-
tags/2.0.3/dci/assets/js (added)
-
tags/2.0.3/dci/assets/js/dci.js (added)
-
tags/2.0.3/dci/deactivate-feedback.php (added)
-
tags/2.0.3/dci/insights.php (added)
-
tags/2.0.3/dci/notice.php (added)
-
tags/2.0.3/dci/start.php (added)
-
tags/2.0.3/includes (added)
-
tags/2.0.3/includes/addons.php (added)
-
tags/2.0.3/includes/admin (added)
-
tags/2.0.3/includes/admin/Classes (added)
-
tags/2.0.3/includes/admin/Classes/index.php (added)
-
tags/2.0.3/includes/admin/class-admin.php (added)
-
tags/2.0.3/includes/admin/class-menu.php (added)
-
tags/2.0.3/includes/class-admin-feeds.php (added)
-
tags/2.0.3/includes/class-installer.php (added)
-
tags/2.0.3/includes/core (added)
-
tags/2.0.3/includes/core/class-campaigns.php (added)
-
tags/2.0.3/includes/core/class-entries.php (added)
-
tags/2.0.3/includes/core/class-post-type.php (added)
-
tags/2.0.3/includes/core/class-reports.php (added)
-
tags/2.0.3/includes/core/class-settings.php (added)
-
tags/2.0.3/includes/core/class-spin-wheel.php (added)
-
tags/2.0.3/includes/core/class-style-generator.php (added)
-
tags/2.0.3/includes/core/disposable-domains.php (added)
-
tags/2.0.3/includes/core/templates (added)
-
tags/2.0.3/includes/core/templates/email-coupon.php (added)
-
tags/2.0.3/includes/core/themes-default.php (added)
-
tags/2.0.3/includes/core/traits (added)
-
tags/2.0.3/includes/core/traits/trait-init.php (added)
-
tags/2.0.3/includes/feedbacks (added)
-
tags/2.0.3/includes/feedbacks/assets (added)
-
tags/2.0.3/includes/feedbacks/assets/rc.css (added)
-
tags/2.0.3/includes/feedbacks/assets/rc.js (added)
-
tags/2.0.3/includes/feedbacks/index.php (added)
-
tags/2.0.3/includes/feedbacks/notice.php (added)
-
tags/2.0.3/includes/feedbacks/start.php (added)
-
tags/2.0.3/includes/index.php (added)
-
tags/2.0.3/index.php (added)
-
tags/2.0.3/languages (added)
-
tags/2.0.3/languages/ultimate-spin-wheel.pot (added)
-
tags/2.0.3/plugin.php (added)
-
tags/2.0.3/readme.txt (added)
-
tags/2.0.3/ultimate-spin-wheel.php (added)
-
trunk/assets/css/spin-wheel.css (modified) (1 diff)
-
trunk/assets/css/spin-wheel.rtl.css (modified) (1 diff)
-
trunk/assets/js/spin-wheel.js (modified) (1 diff)
-
trunk/changelog.txt (modified) (1 diff)
-
trunk/includes/core/themes-default.php (modified) (1 diff)
-
trunk/languages/ultimate-spin-wheel.pot (modified) (3 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/ultimate-spin-wheel.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ultimate-spin-wheel/trunk/assets/css/spin-wheel.css
r3464555 r3470708 1 .modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);display:flex;justify-content:center;align-items:center;z-index:99999}.modal__container{background:var(--uspw-popup-bg, #fff);padding:var(--uspw-popup-padding, 30px);width:100%;max-width:var(--uspw-popup-max-width, 800px);max-height:100vh;border-radius:var(--uspw-popup-border-radius, 4px);overflow-y:auto;box-sizing:border-box}.modal__header{display:flex;justify-content:space-between;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,0.8)}.modal__footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.modal__btn{font-size:.875rem;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.5rem;background-color:#e6e6e6;color:rgba(0,0,0,0.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}@keyframes mmfadeIn{from{opacity:0}to{opacity:1}}@keyframes mmfadeOut{from{opacity:1}to{opacity:0}}@keyframes mmslideIn{from{transform:translateY(15%)}to{transform:translateY(0)}}@keyframes mmslideOut{from{transform:translateY(0)}to{transform:translateY(-10%)}}.micromodal-slide{display:none}.micromodal-slide.is-open{display:block}.micromodal-slide[aria-hidden="false"] .modal__overlay{animation:mmfadeIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="false"] .modal__container{animation:mmslideIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__overlay{animation:mmfadeOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__container{animation:mmslideOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide .modal__container,.micromodal-slide .modal__overlay{will-change:transform}.ultimate-spin-wheel *{box-sizing:border-box;margin:0;padding:0}.ultimate-spin-wheel .modal__container{padding:var(--uspw-popup-padding, 20px);border-radius:var(--uspw-popup-border-radius, 12px);background:var(--uspw-popup-bg, #fff);max-width:var(--uspw-popup-max-width, 800px);box-shadow:0 20px 60px rgba(0,0,0,0.3);background-size:cover;background-position:center}.ultimate-spin-wheel .modal__header{display:flex;justify-content:space-between;align-items:center;position:absolute;right:20px;top:20px;z-index:10}.ultimate-spin-wheel .modal__close{position:relative;width:40px;height:40px;border-radius:50%;background:var(--uspw-close-bg, linear-gradient(135deg, #f093fb 0%, #f5576c 100%));border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0;transition:all .3s cubic-bezier(.68, -0.55, .265, 1.55);box-shadow:0 4px 15px rgba(245,87,108,0.3)}.ultimate-spin-wheel .modal__close:before,.ultimate-spin-wheel .modal__close:after{content:'';position:absolute;width:18px;height:2px;background-color:var(--uspw-close-color, #ffffff);border-radius:2px;transition:all .3s ease}.ultimate-spin-wheel .modal__close:before{transform:rotate(45deg)}.ultimate-spin-wheel .modal__close:after{transform:rotate(-45deg)}.ultimate-spin-wheel .modal__close:hover{transform:scale(1.1) rotate(90deg)}.ultimate-spin-wheel .modal__close:active{transform:scale(.95) rotate(90deg)}.ultimate-spin-wheel .modal__close:focus{outline:none}.ultimate-spin-wheel .modal__content{display:flex;gap:16px;flex-direction:row;margin-top:0;margin-bottom:0}@media (max-width:767px){.ultimate-spin-wheel .modal__content{flex-direction:column;gap:16px}}.ultimate-spin-wheel .uspw-spin-wrap{flex:1;display:flex;align-items:center;justify-content:center;min-width:50%}.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:340px;height:340px;max-width:100%;margin:0 auto}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:80vw;height:80vw;max-width:90vw;margin:0 auto}}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap{padding:0;min-width:100%}}.ultimate-spin-wheel .uspw-form-wrap{flex:1;padding:16px 30px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:18px;width:100%;min-width:0}.ultimate-spin-wheel .uspw-title{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-title-size, 28px);font-weight:700;color:var(--uspw-form-title-color, #1a1a1a);text-align:center;line-height:1.3;margin:0;padding:0}@media (max-width:768px){.ultimate-spin-wheel .uspw-title{font-size:calc(var(--uspw-form-title-size, 28px) * .85)}}.ultimate-spin-wheel .uspw-description{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-desc-size, 15px);font-weight:400;color:var(--uspw-form-desc-color, #6b7280);text-align:center;line-height:1.5;margin:0;padding:0;max-width:400px}@media (max-width:768px){.ultimate-spin-wheel .uspw-description{font-size:calc(var(--uspw-form-desc-size, 15px) * .9)}}.ultimate-spin-wheel form.uspw-spin-form{display:flex;flex-direction:column;gap:16px;width:100%;max-width:400px}.ultimate-spin-wheel .uspw-form-group{display:flex;flex-direction:column;gap:8px;width:100%}.ultimate-spin-wheel .uspw-label{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-label-size, 14px);font-weight:600;color:var(--uspw-form-label-color, #374151);line-height:1.4;margin:0;padding:0;letter-spacing:.01em}.ultimate-spin-wheel .uspw-input{all:unset;display:block;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;line-height:1.5;color:var(--uspw-form-input-color, #1a1a1a);background-color:var(--uspw-form-input-bg, #ffffff);border:2px solid var(--uspw-form-input-border, #e5e7eb);border-radius:var(--uspw-form-input-radius, 8px) !important;padding:12px 16px;transition:all .2s ease;box-sizing:border-box;outline:none;box-shadow:none}.ultimate-spin-wheel .uspw-input::placeholder{color:var(--uspw-form-input-placeholder, #9ca3af);opacity:1}.ultimate-spin-wheel .uspw-input:hover{border-color:var(--uspw-form-input-border, #d1d5db);opacity:.9}.ultimate-spin-wheel .uspw-input:focus{outline:none;border-width:2px;border-style:solid;border-color:var(--uspw-form-input-focus-border, #667eea);background-color:var(--uspw-form-input-focus-bg, #ffffff);box-shadow:0 0 0 3px rgba(102,126,234,0.1)}.ultimate-spin-wheel .uspw-input:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed}.ultimate-spin-wheel .uspw-input:-webkit-autofill,.ultimate-spin-wheel .uspw-input:-webkit-autofill:hover,.ultimate-spin-wheel .uspw-input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px white inset;-webkit-text-fill-color:#1a1a1a;border-color:#e5e7eb;transition:background-color 5000s ease-in-out 0s}.ultimate-spin-wheel button.uspw-spin{all:unset;display:block;width:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:600;line-height:1.5;color:var(--uspw-form-submit-color, #ffffff);background:var(--uspw-form-submit-bg, linear-gradient(135deg, #6366f1 0%, #4338ca 100%));border:none;border-radius:var(--uspw-form-submit-radius, 8px) !important;padding:var(--uspw-form-submit-padding, 12px) 24px;cursor:pointer;text-align:center;transition:all .3s ease;box-sizing:border-box;margin-top:8px;box-shadow:0 4px 12px rgba(102,126,234,0.3)}.ultimate-spin-wheel button.uspw-spin:hover{transform:scale(1.02);opacity:.95;background:var(--uspw-form-submit-hover-bg, var(--uspw-form-submit-bg))}.ultimate-spin-wheel button.uspw-spin:active{transform:scale(.98)}.ultimate-spin-wheel button.uspw-spin:focus{outline:none}.ultimate-spin-wheel button.uspw-spin:disabled{background:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.ultimate-spin-wheel .uspw-gdpr-group{margin-top:0;margin-bottom:0}.ultimate-spin-wheel .uspw-gdpr-label{display:flex;align-items:flex-start;gap:12px;cursor:pointer;user-select:none;padding:12px;border-radius:8px;transition:background-color .2s ease}.ultimate-spin-wheel .uspw-gdpr-label:hover{background-color:rgba(102,126,234,0.04)}.ultimate-spin-wheel .uspw-gdpr-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text{position:relative;padding-left:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;font-weight:400;color:var(--uspw-form-label-color, #374151);line-height:1.5}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::before{content:'';position:absolute;left:0;top:1px;width:20px;height:20px;border:2px solid var(--uspw-form-input-border, #d1d5db);border-radius:5px;background-color:#ffffff;transition:all .25s cubic-bezier(.4, 0, .2, 1);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::after{content:'';position:absolute;left:7px;top:4px;width:6px;height:10px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .25s cubic-bezier(.4, 0, .2, 1);opacity:0}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::before{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);border-color:#667eea;box-shadow:0 2px 8px rgba(102,126,234,0.3)}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::after{transform:rotate(45deg) scale(1);opacity:1}.ultimate-spin-wheel .uspw-gdpr-checkbox:focus+.uspw-gdpr-text::before{outline:none;border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,0.15)}.ultimate-spin-wheel .uspw-gdpr-checkbox:required:invalid+.uspw-gdpr-text::before{animation:shake .3s ease-in-out}@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown){border-color:#ef4444}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown):focus{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,0.1)}.ultimate-spin-wheel .uspw-input:valid:not(:placeholder-shown){border-color:#10b981}@media (max-width:767px){.ultimate-spin-wheel .uspw-form-wrap{padding:0;gap:10px}.ultimate-spin-wheel form.uspw-spin-form{max-width:100%;gap:12px}.ultimate-spin-wheel .uspw-input{padding:8px 12px}}@media (max-width:767px){.ultimate-spin-wheel .modal__container{max-width:95%;padding:20px}}.uspw-result-modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:100000;align-items:center;justify-content:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.uspw-result-modal.is-open{display:flex}.uspw-result-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);z-index:1}.uspw-result-container{position:relative;z-index:2;background:#fff;width:90%;max-width:450px;border-radius:20px;padding:40px 30px;text-align:center;box-shadow:0 25px 50px -12px rgba(0,0,0,0.25);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275);overflow:hidden}@keyframes uspw-popIn{from{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.uspw-result-header{font-size:28px;font-weight:800;color:#333;margin-bottom:10px;line-height:1.2}.uspw-result-subheader{font-size:16px;color:#666;margin-bottom:25px}.uspw-prize-highlight{font-size:24px;font-weight:700;color:#e74c3c;margin:10px 0}.uspw-coupon-box{background:#fdfdfd;border:2px dashed #e2e8f0;border-radius:12px;margin:24px auto;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.4, 0, .2, 1);max-width:320px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);display:flex;flex-direction:column;overflow:hidden}.uspw-coupon-box:hover{background:#ffffff;border-color:#4f46e5;transform:translateY(-3px);box-shadow:0 12px 25px -5px rgba(79,70,229,0.1),0 8px 10px -6px rgba(79,70,229,0.1)}.uspw-coupon-box:hover .uspw-copy-indicator{transform:scale(1.1);color:#4f46e5}.uspw-coupon-box:hover .uspw-coupon-label{background:#4f46e5;color:#ffffff;border-top-color:#4f46e5}.uspw-coupon-box .uspw-coupon-inner{display:flex;align-items:center;justify-content:center;gap:15px;padding:24px 20px}.uspw-coupon-box .uspw-coupon-code{font-family:'Courier New',Monaco,monospace;font-size:32px;font-weight:800;color:#1a1a1a;letter-spacing:3px;line-height:1}.uspw-coupon-box .uspw-copy-indicator{color:#cbd5e1;transition:all .2s ease;flex-shrink:0}.uspw-coupon-box .uspw-coupon-label{display:block;width:100%;font-size:10px;font-weight:700;text-transform:uppercase;color:#64748b;padding:10px 0;background:#f8fafc;border-top:1px dashed #e2e8f0;letter-spacing:1.5px;transition:all .3s ease}.uspw-result-btn{background:#333;color:#fff;border:none;padding:15px 30px;font-size:16px;font-weight:600;border-radius:50px;cursor:pointer;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);margin-top:10px}.uspw-result-btn:hover{background:#000;transform:translateY(-2px)}.uspw-close-icon{position:absolute;top:15px;right:15px;width:32px;height:32px;cursor:pointer;background:var(--uspw-close-bg, #f1f5f9);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);z-index:1001;text-decoration:none}.uspw-close-icon:hover{background:#e2e8f0;transform:rotate(90deg) scale(1.1);opacity:1}.uspw-close-icon:before,.uspw-close-icon:after{content:'';position:absolute;width:14px;height:2px;background-color:var(--uspw-close-color, #64748b);border-radius:2px;transition:background-color .3s}.uspw-close-icon:hover:before,.uspw-close-icon:hover:after{background-color:#0f172a}.uspw-close-icon:before{transform:rotate(45deg)}.uspw-close-icon:after{transform:rotate(-45deg)}.uspw-confetti-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000}.uspw-already-played-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;width:100%;animation:uspw-popIn .5s ease}.uspw-already-played-container .uspw-already-played-icon{margin-bottom:20px;color:#f97316}.uspw-already-played-container .uspw-already-played-icon svg{filter:drop-shadow(0 4px 6px rgba(249,115,22,0.2))}.uspw-already-played-container .uspw-already-played-title{font-size:24px;font-weight:800;color:#1a1a1a;margin-bottom:12px}.uspw-already-played-container .uspw-already-played-msg{font-size:16px;color:#4b5563;line-height:1.6;margin-bottom:24px;max-width:300px}.uspw-already-played-container .uspw-countdown{margin-bottom:24px;animation:uspw-fadeIn .5s ease}.uspw-already-played-container .uspw-countdown-title{color:#f59e0b;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:12px}.uspw-already-played-container .uspw-countdown-boxes{display:flex;gap:8px;justify-content:center;align-items:center}.uspw-already-played-container .uspw-countdown-box{background:linear-gradient(135deg, #1e293b 0%, #334155 100%);border-radius:8px;padding:10px 14px;min-width:54px;text-align:center;box-shadow:0 4px 12px rgba(0,0,0,0.2);transition:transform .2s ease}.uspw-already-played-container .uspw-countdown-box:hover{transform:translateY(-2px)}.uspw-already-played-container .uspw-countdown-value{color:#fff;font-size:22px;font-weight:700;font-family:'Courier New',Monaco,monospace;line-height:1;margin-bottom:4px}.uspw-already-played-container .uspw-countdown-label{color:#94a3b8;font-size:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.uspw-already-played-container .uspw-countdown-separator{color:#64748b;font-size:22px;font-weight:bold;line-height:1;animation:uspw-blink 1s infinite}.uspw-already-played-container .uspw-countdown-complete{margin-bottom:24px;padding:14px 24px;background:linear-gradient(135deg, #10b981 0%, #059669 100%);border-radius:12px;display:inline-block;box-shadow:0 4px 15px rgba(16,185,129,0.3);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275)}.uspw-already-played-container .uspw-countdown-complete span{color:#fff;font-weight:600;font-size:15px}.uspw-already-played-container .uspw-already-played-timer{background:#fff7ed;border:1px solid #ffedd5;padding:12px 20px;border-radius:12px;margin-bottom:30px;display:flex;flex-direction:column;gap:4px}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#9a3412}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-value{font-size:18px;font-weight:700;color:#7c2d12}@keyframes uspw-blink{0%,100%{opacity:1}50%{opacity:.3}}@keyframes uspw-fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} .uspw-already-played-container .uspw-close-inline-btn{background:#1a1a1a;color:#fff;border:none;padding:12px 30px;border-radius:50px;font-weight:600;cursor:pointer;transition:all .2s ease}.uspw-already-played-container .uspw-close-inline-btn:hover{background:#000;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.15)}1 .modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);display:flex;justify-content:center;align-items:center;z-index:99999}.modal__container{background:var(--uspw-popup-bg, #fff);padding:var(--uspw-popup-padding, 30px);width:100%;max-width:var(--uspw-popup-max-width, 800px);max-height:100vh;border-radius:var(--uspw-popup-border-radius, 4px);overflow-y:auto;box-sizing:border-box}.modal__header{display:flex;justify-content:space-between;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,0.8)}.modal__footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.modal__btn{font-size:.875rem;padding-left:1rem;padding-right:1rem;padding-top:.5rem;padding-bottom:.5rem;background-color:#e6e6e6;color:rgba(0,0,0,0.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}@keyframes mmfadeIn{from{opacity:0}to{opacity:1}}@keyframes mmfadeOut{from{opacity:1}to{opacity:0}}@keyframes mmslideIn{from{transform:translateY(15%)}to{transform:translateY(0)}}@keyframes mmslideOut{from{transform:translateY(0)}to{transform:translateY(-10%)}}.micromodal-slide{display:none}.micromodal-slide.is-open{display:block}.micromodal-slide[aria-hidden="false"] .modal__overlay{animation:mmfadeIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="false"] .modal__container{animation:mmslideIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__overlay{animation:mmfadeOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__container{animation:mmslideOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide .modal__container,.micromodal-slide .modal__overlay{will-change:transform}.ultimate-spin-wheel *{box-sizing:border-box;margin:0;padding:0}.ultimate-spin-wheel .modal__container{padding:var(--uspw-popup-padding, 20px);border-radius:var(--uspw-popup-border-radius, 12px);background:var(--uspw-popup-bg, #fff);max-width:var(--uspw-popup-max-width, 800px);box-shadow:0 20px 60px rgba(0,0,0,0.3);background-size:cover;background-position:center}.ultimate-spin-wheel .modal__header{display:flex;justify-content:space-between;align-items:center;position:absolute;right:20px;top:20px;z-index:10}.ultimate-spin-wheel .modal__close{position:relative;width:40px;height:40px;border-radius:50%;background:var(--uspw-close-bg, linear-gradient(135deg, #f093fb 0%, #f5576c 100%));border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0;transition:all .3s cubic-bezier(.68, -0.55, .265, 1.55);box-shadow:0 4px 15px rgba(245,87,108,0.3)}.ultimate-spin-wheel .modal__close:before,.ultimate-spin-wheel .modal__close:after{content:'';position:absolute;width:18px;height:2px;background-color:var(--uspw-close-color, #ffffff);border-radius:2px;transition:all .3s ease}.ultimate-spin-wheel .modal__close:before{transform:rotate(45deg)}.ultimate-spin-wheel .modal__close:after{transform:rotate(-45deg)}.ultimate-spin-wheel .modal__close:hover{transform:scale(1.1) rotate(90deg)}.ultimate-spin-wheel .modal__close:active{transform:scale(.95) rotate(90deg)}.ultimate-spin-wheel .modal__close:focus{outline:none}.ultimate-spin-wheel .modal__content{display:flex;gap:16px;flex-direction:row;margin-top:0;margin-bottom:0}@media (max-width:767px){.ultimate-spin-wheel .modal__content{flex-direction:column;gap:16px}}.ultimate-spin-wheel .uspw-spin-wrap{flex:1;display:flex;align-items:center;justify-content:center;min-width:50%}.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:340px;height:340px;max-width:100%;margin:0 auto}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:80vw;height:80vw;max-width:90vw;margin:0 auto}}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap{padding:0;min-width:100%}}.ultimate-spin-wheel .uspw-form-wrap{flex:1;padding:16px 30px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:18px;width:100%;min-width:0}.ultimate-spin-wheel .uspw-title{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-title-size, 28px);font-weight:700;color:var(--uspw-form-title-color, #1a1a1a);text-align:center;line-height:1.3;margin:0;padding:0}@media (max-width:768px){.ultimate-spin-wheel .uspw-title{font-size:calc(var(--uspw-form-title-size, 28px) * .85)}}.ultimate-spin-wheel .uspw-description{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-desc-size, 15px);font-weight:400;color:var(--uspw-form-desc-color, #6b7280);text-align:center;line-height:1.5;margin:0;padding:0;max-width:400px}@media (max-width:768px){.ultimate-spin-wheel .uspw-description{font-size:calc(var(--uspw-form-desc-size, 15px) * .9)}}.ultimate-spin-wheel form.uspw-spin-form{display:flex;flex-direction:column;gap:16px;width:100%;max-width:400px}.ultimate-spin-wheel .uspw-form-group{display:flex;flex-direction:column;gap:8px;width:100%}.ultimate-spin-wheel .uspw-label{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-label-size, 14px);font-weight:600;color:var(--uspw-form-label-color, #374151);line-height:1.4;margin:0;padding:0;letter-spacing:.01em}.ultimate-spin-wheel .uspw-input{all:unset;display:block;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;line-height:1.5;color:var(--uspw-form-input-color, #1a1a1a);background-color:var(--uspw-form-input-bg, #ffffff);border:2px solid var(--uspw-form-input-border, #e5e7eb);border-radius:var(--uspw-form-input-radius, 8px) !important;padding:12px 16px;transition:all .2s ease;box-sizing:border-box;outline:none;box-shadow:none}.ultimate-spin-wheel .uspw-input::placeholder{color:var(--uspw-form-input-placeholder, #9ca3af);opacity:1}.ultimate-spin-wheel .uspw-input:hover{border-color:var(--uspw-form-input-border, #d1d5db);opacity:.9}.ultimate-spin-wheel .uspw-input:focus{outline:none;border-width:2px;border-style:solid;border-color:var(--uspw-form-input-focus-border, #667eea);background-color:var(--uspw-form-input-focus-bg, #ffffff);box-shadow:0 0 0 3px rgba(102,126,234,0.1)}.ultimate-spin-wheel .uspw-input:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed}.ultimate-spin-wheel .uspw-input:-webkit-autofill,.ultimate-spin-wheel .uspw-input:-webkit-autofill:hover,.ultimate-spin-wheel .uspw-input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px white inset;-webkit-text-fill-color:#1a1a1a;border-color:#e5e7eb;transition:background-color 5000s ease-in-out 0s}.ultimate-spin-wheel button.uspw-spin{all:unset;display:block;width:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:600;line-height:1.5;color:var(--uspw-form-submit-color, #ffffff);background:var(--uspw-form-submit-bg, linear-gradient(135deg, #6366f1 0%, #4338ca 100%));border:none;border-radius:var(--uspw-form-submit-radius, 8px) !important;padding:var(--uspw-form-submit-padding, 12px) 24px;cursor:pointer;text-align:center;transition:all .3s ease;box-sizing:border-box;margin-top:8px;box-shadow:0 4px 12px rgba(102,126,234,0.3)}.ultimate-spin-wheel button.uspw-spin:hover{transform:scale(1.02);opacity:.95;background:var(--uspw-form-submit-hover-bg, var(--uspw-form-submit-bg))}.ultimate-spin-wheel button.uspw-spin:active{transform:scale(.98)}.ultimate-spin-wheel button.uspw-spin:focus{outline:none}.ultimate-spin-wheel button.uspw-spin:disabled{background:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.ultimate-spin-wheel .uspw-gdpr-group{margin-top:0;margin-bottom:0}.ultimate-spin-wheel .uspw-gdpr-label{display:flex;align-items:flex-start;gap:12px;cursor:pointer;user-select:none;padding:12px;border-radius:8px;transition:background-color .2s ease}.ultimate-spin-wheel .uspw-gdpr-label:hover{background-color:rgba(102,126,234,0.04)}.ultimate-spin-wheel .uspw-gdpr-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text{position:relative;padding-left:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;font-weight:400;color:var(--uspw-form-label-color, #374151);line-height:1.5}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::before{content:'';position:absolute;left:0;top:1px;width:20px;height:20px;border:2px solid var(--uspw-form-input-border, #d1d5db);border-radius:5px;background-color:#ffffff;transition:all .25s cubic-bezier(.4, 0, .2, 1);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::after{content:'';position:absolute;left:7px;top:4px;width:6px;height:10px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg) scale(0);transition:transform .25s cubic-bezier(.4, 0, .2, 1);opacity:0}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::before{background:linear-gradient(135deg, #667eea 0%, #764ba2 100%);border-color:#667eea;box-shadow:0 2px 8px rgba(102,126,234,0.3)}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::after{transform:rotate(45deg) scale(1);opacity:1}.ultimate-spin-wheel .uspw-gdpr-checkbox:focus+.uspw-gdpr-text::before{outline:none;border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,0.15)}.ultimate-spin-wheel .uspw-gdpr-checkbox:required:invalid+.uspw-gdpr-text::before{animation:shake .3s ease-in-out}@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown){border-color:#ef4444}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown):focus{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,0.1)}.ultimate-spin-wheel .uspw-input:valid:not(:placeholder-shown){border-color:#10b981}@media (max-width:767px){.ultimate-spin-wheel .uspw-form-wrap{padding:0;gap:10px}.ultimate-spin-wheel form.uspw-spin-form{max-width:100%;gap:12px}.ultimate-spin-wheel .uspw-input{padding:8px 12px}}@media (max-width:767px){.ultimate-spin-wheel .modal__container{max-width:95%;padding:20px}}.uspw-result-modal{display:none;position:fixed;top:0;left:0;width:100%;height:100%;z-index:100000;align-items:center;justify-content:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.uspw-result-modal.is-open{display:flex}.uspw-result-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);z-index:1}.uspw-result-container{position:relative;z-index:2;background:#fff;width:90%;max-width:450px;border-radius:20px;padding:40px 30px;text-align:center;box-shadow:0 25px 50px -12px rgba(0,0,0,0.25);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275);overflow:hidden}@keyframes uspw-popIn{from{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.uspw-result-header{font-size:28px;font-weight:800;color:#333;margin-bottom:10px;line-height:1.2}.uspw-result-subheader{font-size:16px;color:#666;margin-bottom:25px}.uspw-prize-highlight{font-size:24px;font-weight:700;color:#e74c3c;margin:10px 0}.uspw-coupon-box{background:#fdfdfd;border:2px dashed #e2e8f0;border-radius:12px;margin:24px auto;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.4, 0, .2, 1);max-width:320px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);display:flex;flex-direction:column;overflow:hidden}.uspw-coupon-box:hover{background:#ffffff;border-color:#4f46e5;transform:translateY(-3px);box-shadow:0 12px 25px -5px rgba(79,70,229,0.1),0 8px 10px -6px rgba(79,70,229,0.1)}.uspw-coupon-box:hover .uspw-copy-indicator{transform:scale(1.1);color:#4f46e5}.uspw-coupon-box:hover .uspw-coupon-label{background:#4f46e5;color:#ffffff;border-top-color:#4f46e5}.uspw-coupon-box .uspw-coupon-inner{display:flex;align-items:center;justify-content:center;gap:15px;padding:24px 20px}.uspw-coupon-box .uspw-coupon-code{font-family:'Courier New',Monaco,monospace;font-size:32px;font-weight:800;color:#1a1a1a;letter-spacing:3px;line-height:1}.uspw-coupon-box .uspw-copy-indicator{color:#cbd5e1;transition:all .2s ease;flex-shrink:0}.uspw-coupon-box .uspw-coupon-label{display:block;width:100%;font-size:10px;font-weight:700;text-transform:uppercase;color:#64748b;padding:10px 0;background:#f8fafc;border-top:1px dashed #e2e8f0;letter-spacing:1.5px;transition:all .3s ease}.uspw-result-btn{background:#333;color:#fff;border:none;padding:15px 30px;font-size:16px;font-weight:600;border-radius:50px;cursor:pointer;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);margin-top:10px}.uspw-result-btn:hover{background:#000;transform:translateY(-2px)}.uspw-close-icon{position:absolute;top:15px;right:15px;width:32px;height:32px;cursor:pointer;background:var(--uspw-close-bg, #f1f5f9);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);z-index:1001;text-decoration:none}.uspw-close-icon:hover{background:#e2e8f0;transform:rotate(90deg) scale(1.1);opacity:1}.uspw-close-icon:before,.uspw-close-icon:after{content:'';position:absolute;width:14px;height:2px;background-color:var(--uspw-close-color, #64748b);border-radius:2px;transition:background-color .3s}.uspw-close-icon:hover:before,.uspw-close-icon:hover:after{background-color:#0f172a}.uspw-close-icon:before{transform:rotate(45deg)}.uspw-close-icon:after{transform:rotate(-45deg)}.uspw-confetti-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000}.uspw-already-played-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;width:100%;animation:uspw-popIn .5s ease}.uspw-already-played-container .uspw-already-played-icon{margin-bottom:20px;color:#f97316}.uspw-already-played-container .uspw-already-played-icon svg{filter:drop-shadow(0 4px 6px rgba(249,115,22,0.2))}.uspw-already-played-container .uspw-already-played-title{font-size:24px;font-weight:800;color:#1a1a1a;margin-bottom:12px}.uspw-already-played-container .uspw-already-played-msg{font-size:16px;color:#4b5563;line-height:1.6;margin-bottom:24px;max-width:300px}.uspw-already-played-container .uspw-countdown{margin-bottom:24px;animation:uspw-fadeIn .5s ease}.uspw-already-played-container .uspw-countdown-title{color:#f59e0b;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:12px}.uspw-already-played-container .uspw-countdown-boxes{display:flex;gap:8px;justify-content:center;align-items:center}.uspw-already-played-container .uspw-countdown-box{background:linear-gradient(135deg, #1e293b 0%, #334155 100%);border-radius:8px;padding:10px 14px;min-width:54px;text-align:center;box-shadow:0 4px 12px rgba(0,0,0,0.2);transition:transform .2s ease}.uspw-already-played-container .uspw-countdown-box:hover{transform:translateY(-2px)}.uspw-already-played-container .uspw-countdown-value{color:#fff;font-size:22px;font-weight:700;font-family:'Courier New',Monaco,monospace;line-height:1;margin-bottom:4px}.uspw-already-played-container .uspw-countdown-label{color:#94a3b8;font-size:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.uspw-already-played-container .uspw-countdown-separator{color:#64748b;font-size:22px;font-weight:bold;line-height:1;animation:uspw-blink 1s infinite}.uspw-already-played-container .uspw-countdown-complete{margin-bottom:24px;padding:14px 24px;background:linear-gradient(135deg, #10b981 0%, #059669 100%);border-radius:12px;display:inline-block;box-shadow:0 4px 15px rgba(16,185,129,0.3);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275)}.uspw-already-played-container .uspw-countdown-complete span{color:#fff;font-weight:600;font-size:15px}.uspw-already-played-container .uspw-already-played-timer{background:#fff7ed;border:1px solid #ffedd5;padding:12px 20px;border-radius:12px;margin-bottom:30px;display:flex;flex-direction:column;gap:4px}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#9a3412}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-value{font-size:18px;font-weight:700;color:#7c2d12}@keyframes uspw-blink{0%,100%{opacity:1}50%{opacity:.3}}@keyframes uspw-fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} -
ultimate-spin-wheel/trunk/assets/css/spin-wheel.rtl.css
r3464555 r3470708 1 .modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,0.6);display:flex;justify-content:center;align-items:center;z-index:99999}.modal__container{background:var(--uspw-popup-bg, #fff);padding:var(--uspw-popup-padding, 30px);width:100%;max-width:var(--uspw-popup-max-width, 800px);max-height:100vh;border-radius:var(--uspw-popup-border-radius, 4px);overflow-y:auto;box-sizing:border-box}.modal__header{display:flex;justify-content:space-between;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,0.8)}.modal__footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.modal__btn{font-size:.875rem;padding-right:1rem;padding-left:1rem;padding-top:.5rem;padding-bottom:.5rem;background-color:#e6e6e6;color:rgba(0,0,0,0.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}@keyframes mmfadeIn{from{opacity:0}to{opacity:1}}@keyframes mmfadeOut{from{opacity:1}to{opacity:0}}@keyframes mmslideIn{from{transform:translateY(15%)}to{transform:translateY(0)}}@keyframes mmslideOut{from{transform:translateY(0)}to{transform:translateY(-10%)}}.micromodal-slide{display:none}.micromodal-slide.is-open{display:block}.micromodal-slide[aria-hidden="false"] .modal__overlay{animation:mmfadeIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="false"] .modal__container{animation:mmslideIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__overlay{animation:mmfadeOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__container{animation:mmslideOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide .modal__container,.micromodal-slide .modal__overlay{will-change:transform}.ultimate-spin-wheel *{box-sizing:border-box;margin:0;padding:0}.ultimate-spin-wheel .modal__container{padding:var(--uspw-popup-padding, 20px);border-radius:var(--uspw-popup-border-radius, 12px);background:var(--uspw-popup-bg, #fff);max-width:var(--uspw-popup-max-width, 800px);box-shadow:0 20px 60px rgba(0,0,0,0.3);background-size:cover;background-position:center}.ultimate-spin-wheel .modal__header{display:flex;justify-content:space-between;align-items:center;position:absolute;left:20px;top:20px;z-index:10}.ultimate-spin-wheel .modal__close{position:relative;width:40px;height:40px;border-radius:50%;background:var(--uspw-close-bg, linear-gradient(-135deg, #f093fb 0%, #f5576c 100%));border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0;transition:all .3s cubic-bezier(.68, -0.55, .265, 1.55);box-shadow:0 4px 15px rgba(245,87,108,0.3)}.ultimate-spin-wheel .modal__close:before,.ultimate-spin-wheel .modal__close:after{content:'';position:absolute;width:18px;height:2px;background-color:var(--uspw-close-color, #ffffff);border-radius:2px;transition:all .3s ease}.ultimate-spin-wheel .modal__close:before{transform:rotate(-45deg)}.ultimate-spin-wheel .modal__close:after{transform:rotate(45deg)}.ultimate-spin-wheel .modal__close:hover{transform:scale(1.1) rotate(-90deg)}.ultimate-spin-wheel .modal__close:active{transform:scale(.95) rotate(-90deg)}.ultimate-spin-wheel .modal__close:focus{outline:none}.ultimate-spin-wheel .modal__content{display:flex;gap:16px;flex-direction:row;margin-top:0;margin-bottom:0}@media (max-width:767px){.ultimate-spin-wheel .modal__content{flex-direction:column;gap:16px}}.ultimate-spin-wheel .uspw-spin-wrap{flex:1;display:flex;align-items:center;justify-content:center;min-width:50%}.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:340px;height:340px;max-width:100%;margin:0 auto}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:80vw;height:80vw;max-width:90vw;margin:0 auto}}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap{padding:0;min-width:100%}}.ultimate-spin-wheel .uspw-form-wrap{flex:1;padding:16px 30px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:18px;width:100%;min-width:0}.ultimate-spin-wheel .uspw-title{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-title-size, 28px);font-weight:700;color:var(--uspw-form-title-color, #1a1a1a);text-align:center;line-height:1.3;margin:0;padding:0}@media (max-width:768px){.ultimate-spin-wheel .uspw-title{font-size:calc(var(--uspw-form-title-size, 28px) * .85)}}.ultimate-spin-wheel .uspw-description{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-desc-size, 15px);font-weight:400;color:var(--uspw-form-desc-color, #6b7280);text-align:center;line-height:1.5;margin:0;padding:0;max-width:400px}@media (max-width:768px){.ultimate-spin-wheel .uspw-description{font-size:calc(var(--uspw-form-desc-size, 15px) * .9)}}.ultimate-spin-wheel form.uspw-spin-form{display:flex;flex-direction:column;gap:16px;width:100%;max-width:400px}.ultimate-spin-wheel .uspw-form-group{display:flex;flex-direction:column;gap:8px;width:100%}.ultimate-spin-wheel .uspw-label{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-label-size, 14px);font-weight:600;color:var(--uspw-form-label-color, #374151);line-height:1.4;margin:0;padding:0;letter-spacing:.01em}.ultimate-spin-wheel .uspw-input{all:unset;display:block;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;line-height:1.5;color:var(--uspw-form-input-color, #1a1a1a);background-color:var(--uspw-form-input-bg, #ffffff);border:2px solid var(--uspw-form-input-border, #e5e7eb);border-radius:var(--uspw-form-input-radius, 8px) !important;padding:12px 16px;transition:all .2s ease;box-sizing:border-box;outline:none;box-shadow:none}.ultimate-spin-wheel .uspw-input::placeholder{color:var(--uspw-form-input-placeholder, #9ca3af);opacity:1}.ultimate-spin-wheel .uspw-input:hover{border-color:var(--uspw-form-input-border, #d1d5db);opacity:.9}.ultimate-spin-wheel .uspw-input:focus{outline:none;border-width:2px;border-style:solid;border-color:var(--uspw-form-input-focus-border, #667eea);background-color:var(--uspw-form-input-focus-bg, #ffffff);box-shadow:0 0 0 3px rgba(102,126,234,0.1)}.ultimate-spin-wheel .uspw-input:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed}.ultimate-spin-wheel .uspw-input:-webkit-autofill,.ultimate-spin-wheel .uspw-input:-webkit-autofill:hover,.ultimate-spin-wheel .uspw-input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px white inset;-webkit-text-fill-color:#1a1a1a;border-color:#e5e7eb;transition:background-color 5000s ease-in-out 0s}.ultimate-spin-wheel button.uspw-spin{all:unset;display:block;width:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:600;line-height:1.5;color:var(--uspw-form-submit-color, #ffffff);background:var(--uspw-form-submit-bg, linear-gradient(-135deg, #6366f1 0%, #4338ca 100%));border:none;border-radius:var(--uspw-form-submit-radius, 8px) !important;padding:var(--uspw-form-submit-padding, 12px) 24px;cursor:pointer;text-align:center;transition:all .3s ease;box-sizing:border-box;margin-top:8px;box-shadow:0 4px 12px rgba(102,126,234,0.3)}.ultimate-spin-wheel button.uspw-spin:hover{transform:scale(1.02);opacity:.95;background:var(--uspw-form-submit-hover-bg, var(--uspw-form-submit-bg))}.ultimate-spin-wheel button.uspw-spin:active{transform:scale(.98)}.ultimate-spin-wheel button.uspw-spin:focus{outline:none}.ultimate-spin-wheel button.uspw-spin:disabled{background:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.ultimate-spin-wheel .uspw-gdpr-group{margin-top:0;margin-bottom:0}.ultimate-spin-wheel .uspw-gdpr-label{display:flex;align-items:flex-start;gap:12px;cursor:pointer;user-select:none;padding:12px;border-radius:8px;transition:background-color .2s ease}.ultimate-spin-wheel .uspw-gdpr-label:hover{background-color:rgba(102,126,234,0.04)}.ultimate-spin-wheel .uspw-gdpr-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text{position:relative;padding-right:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;font-weight:400;color:var(--uspw-form-label-color, #374151);line-height:1.5}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::before{content:'';position:absolute;right:0;top:1px;width:20px;height:20px;border:2px solid var(--uspw-form-input-border, #d1d5db);border-radius:5px;background-color:#ffffff;transition:all .25s cubic-bezier(.4, 0, .2, 1);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::after{content:'';position:absolute;right:7px;top:4px;width:6px;height:10px;border:solid white;border-width:0 0 2px 2px;transform:rotate(-45deg) scale(0);transition:transform .25s cubic-bezier(.4, 0, .2, 1);opacity:0}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::before{background:linear-gradient(-135deg, #667eea 0%, #764ba2 100%);border-color:#667eea;box-shadow:0 2px 8px rgba(102,126,234,0.3)}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::after{transform:rotate(-45deg) scale(1);opacity:1}.ultimate-spin-wheel .uspw-gdpr-checkbox:focus+.uspw-gdpr-text::before{outline:none;border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,0.15)}.ultimate-spin-wheel .uspw-gdpr-checkbox:required:invalid+.uspw-gdpr-text::before{animation:shake .3s ease-in-out}@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(4px)}75%{transform:translateX(-4px)}}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown){border-color:#ef4444}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown):focus{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,0.1)}.ultimate-spin-wheel .uspw-input:valid:not(:placeholder-shown){border-color:#10b981}@media (max-width:767px){.ultimate-spin-wheel .uspw-form-wrap{padding:0;gap:10px}.ultimate-spin-wheel form.uspw-spin-form{max-width:100%;gap:12px}.ultimate-spin-wheel .uspw-input{padding:8px 12px}}@media (max-width:767px){.ultimate-spin-wheel .modal__container{max-width:95%;padding:20px}}.uspw-result-modal{display:none;position:fixed;top:0;right:0;width:100%;height:100%;z-index:100000;align-items:center;justify-content:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.uspw-result-modal.is-open{display:flex}.uspw-result-overlay{position:absolute;top:0;right:0;width:100%;height:100%;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);z-index:1}.uspw-result-container{position:relative;z-index:2;background:#fff;width:90%;max-width:450px;border-radius:20px;padding:40px 30px;text-align:center;box-shadow:0 25px 50px -12px rgba(0,0,0,0.25);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275);overflow:hidden}@keyframes uspw-popIn{from{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.uspw-result-header{font-size:28px;font-weight:800;color:#333;margin-bottom:10px;line-height:1.2}.uspw-result-subheader{font-size:16px;color:#666;margin-bottom:25px}.uspw-prize-highlight{font-size:24px;font-weight:700;color:#e74c3c;margin:10px 0}.uspw-coupon-box{background:#fdfdfd;border:2px dashed #e2e8f0;border-radius:12px;margin:24px auto;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.4, 0, .2, 1);max-width:320px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);display:flex;flex-direction:column;overflow:hidden}.uspw-coupon-box:hover{background:#ffffff;border-color:#4f46e5;transform:translateY(-3px);box-shadow:0 12px 25px -5px rgba(79,70,229,0.1),0 8px 10px -6px rgba(79,70,229,0.1)}.uspw-coupon-box:hover .uspw-copy-indicator{transform:scale(1.1);color:#4f46e5}.uspw-coupon-box:hover .uspw-coupon-label{background:#4f46e5;color:#ffffff;border-top-color:#4f46e5}.uspw-coupon-box .uspw-coupon-inner{display:flex;align-items:center;justify-content:center;gap:15px;padding:24px 20px}.uspw-coupon-box .uspw-coupon-code{font-family:'Courier New',Monaco,monospace;font-size:32px;font-weight:800;color:#1a1a1a;letter-spacing:3px;line-height:1}.uspw-coupon-box .uspw-copy-indicator{color:#cbd5e1;transition:all .2s ease;flex-shrink:0}.uspw-coupon-box .uspw-coupon-label{display:block;width:100%;font-size:10px;font-weight:700;text-transform:uppercase;color:#64748b;padding:10px 0;background:#f8fafc;border-top:1px dashed #e2e8f0;letter-spacing:1.5px;transition:all .3s ease}.uspw-result-btn{background:#333;color:#fff;border:none;padding:15px 30px;font-size:16px;font-weight:600;border-radius:50px;cursor:pointer;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);margin-top:10px}.uspw-result-btn:hover{background:#000;transform:translateY(-2px)}.uspw-close-icon{position:absolute;top:15px;left:15px;width:32px;height:32px;cursor:pointer;background:var(--uspw-close-bg, #f1f5f9);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);z-index:1001;text-decoration:none}.uspw-close-icon:hover{background:#e2e8f0;transform:rotate(-90deg) scale(1.1);opacity:1}.uspw-close-icon:before,.uspw-close-icon:after{content:'';position:absolute;width:14px;height:2px;background-color:var(--uspw-close-color, #64748b);border-radius:2px;transition:background-color .3s}.uspw-close-icon:hover:before,.uspw-close-icon:hover:after{background-color:#0f172a}.uspw-close-icon:before{transform:rotate(-45deg)}.uspw-close-icon:after{transform:rotate(45deg)}.uspw-confetti-canvas{position:absolute;top:0;right:0;width:100%;height:100%;pointer-events:none;z-index:1000}.uspw-already-played-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;width:100%;animation:uspw-popIn .5s ease}.uspw-already-played-container .uspw-already-played-icon{margin-bottom:20px;color:#f97316}.uspw-already-played-container .uspw-already-played-icon svg{filter:drop-shadow(0 4px 6px rgba(249,115,22,0.2))}.uspw-already-played-container .uspw-already-played-title{font-size:24px;font-weight:800;color:#1a1a1a;margin-bottom:12px}.uspw-already-played-container .uspw-already-played-msg{font-size:16px;color:#4b5563;line-height:1.6;margin-bottom:24px;max-width:300px}.uspw-already-played-container .uspw-countdown{margin-bottom:24px;animation:uspw-fadeIn .5s ease}.uspw-already-played-container .uspw-countdown-title{color:#f59e0b;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:12px}.uspw-already-played-container .uspw-countdown-boxes{display:flex;gap:8px;justify-content:center;align-items:center}.uspw-already-played-container .uspw-countdown-box{background:linear-gradient(-135deg, #1e293b 0%, #334155 100%);border-radius:8px;padding:10px 14px;min-width:54px;text-align:center;box-shadow:0 4px 12px rgba(0,0,0,0.2);transition:transform .2s ease}.uspw-already-played-container .uspw-countdown-box:hover{transform:translateY(-2px)}.uspw-already-played-container .uspw-countdown-value{color:#fff;font-size:22px;font-weight:700;font-family:'Courier New',Monaco,monospace;line-height:1;margin-bottom:4px}.uspw-already-played-container .uspw-countdown-label{color:#94a3b8;font-size:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.uspw-already-played-container .uspw-countdown-separator{color:#64748b;font-size:22px;font-weight:bold;line-height:1;animation:uspw-blink 1s infinite}.uspw-already-played-container .uspw-countdown-complete{margin-bottom:24px;padding:14px 24px;background:linear-gradient(-135deg, #10b981 0%, #059669 100%);border-radius:12px;display:inline-block;box-shadow:0 4px 15px rgba(16,185,129,0.3);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275)}.uspw-already-played-container .uspw-countdown-complete span{color:#fff;font-weight:600;font-size:15px}.uspw-already-played-container .uspw-already-played-timer{background:#fff7ed;border:1px solid #ffedd5;padding:12px 20px;border-radius:12px;margin-bottom:30px;display:flex;flex-direction:column;gap:4px}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#9a3412}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-value{font-size:18px;font-weight:700;color:#7c2d12}@keyframes uspw-blink{0%,100%{opacity:1}50%{opacity:.3}}@keyframes uspw-fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} .uspw-already-played-container .uspw-close-inline-btn{background:#1a1a1a;color:#fff;border:none;padding:12px 30px;border-radius:50px;font-weight:600;cursor:pointer;transition:all .2s ease}.uspw-already-played-container .uspw-close-inline-btn:hover{background:#000;transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.15)}1 .modal{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.modal__overlay{position:fixed;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,0.6);display:flex;justify-content:center;align-items:center;z-index:99999}.modal__container{background:var(--uspw-popup-bg, #fff);padding:var(--uspw-popup-padding, 30px);width:100%;max-width:var(--uspw-popup-max-width, 800px);max-height:100vh;border-radius:var(--uspw-popup-border-radius, 4px);overflow-y:auto;box-sizing:border-box}.modal__header{display:flex;justify-content:space-between;align-items:center}.modal__title{margin-top:0;margin-bottom:0;font-weight:600;font-size:1.25rem;line-height:1.25;color:#00449e;box-sizing:border-box}.modal__close{background:transparent;border:0}.modal__header .modal__close:before{content:"\2715"}.modal__content{margin-top:2rem;margin-bottom:2rem;line-height:1.5;color:rgba(0,0,0,0.8)}.modal__footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:1rem;border-top:1px solid #e2e8f0}.modal__btn{font-size:.875rem;padding-right:1rem;padding-left:1rem;padding-top:.5rem;padding-bottom:.5rem;background-color:#e6e6e6;color:rgba(0,0,0,0.8);border-radius:.25rem;border-style:none;border-width:0;cursor:pointer;-webkit-appearance:button;text-transform:none;overflow:visible;line-height:1.15;margin:0;will-change:transform;-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.modal__btn:focus,.modal__btn:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.modal__btn-primary{background-color:#00449e;color:#fff}@keyframes mmfadeIn{from{opacity:0}to{opacity:1}}@keyframes mmfadeOut{from{opacity:1}to{opacity:0}}@keyframes mmslideIn{from{transform:translateY(15%)}to{transform:translateY(0)}}@keyframes mmslideOut{from{transform:translateY(0)}to{transform:translateY(-10%)}}.micromodal-slide{display:none}.micromodal-slide.is-open{display:block}.micromodal-slide[aria-hidden="false"] .modal__overlay{animation:mmfadeIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="false"] .modal__container{animation:mmslideIn .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__overlay{animation:mmfadeOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide[aria-hidden="true"] .modal__container{animation:mmslideOut .3s cubic-bezier(0, 0, .2, 1)}.micromodal-slide .modal__container,.micromodal-slide .modal__overlay{will-change:transform}.ultimate-spin-wheel *{box-sizing:border-box;margin:0;padding:0}.ultimate-spin-wheel .modal__container{padding:var(--uspw-popup-padding, 20px);border-radius:var(--uspw-popup-border-radius, 12px);background:var(--uspw-popup-bg, #fff);max-width:var(--uspw-popup-max-width, 800px);box-shadow:0 20px 60px rgba(0,0,0,0.3);background-size:cover;background-position:center}.ultimate-spin-wheel .modal__header{display:flex;justify-content:space-between;align-items:center;position:absolute;left:20px;top:20px;z-index:10}.ultimate-spin-wheel .modal__close{position:relative;width:40px;height:40px;border-radius:50%;background:var(--uspw-close-bg, linear-gradient(-135deg, #f093fb 0%, #f5576c 100%));border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:0;transition:all .3s cubic-bezier(.68, -0.55, .265, 1.55);box-shadow:0 4px 15px rgba(245,87,108,0.3)}.ultimate-spin-wheel .modal__close:before,.ultimate-spin-wheel .modal__close:after{content:'';position:absolute;width:18px;height:2px;background-color:var(--uspw-close-color, #ffffff);border-radius:2px;transition:all .3s ease}.ultimate-spin-wheel .modal__close:before{transform:rotate(-45deg)}.ultimate-spin-wheel .modal__close:after{transform:rotate(45deg)}.ultimate-spin-wheel .modal__close:hover{transform:scale(1.1) rotate(-90deg)}.ultimate-spin-wheel .modal__close:active{transform:scale(.95) rotate(-90deg)}.ultimate-spin-wheel .modal__close:focus{outline:none}.ultimate-spin-wheel .modal__content{display:flex;gap:16px;flex-direction:row;margin-top:0;margin-bottom:0}@media (max-width:767px){.ultimate-spin-wheel .modal__content{flex-direction:column;gap:16px}}.ultimate-spin-wheel .uspw-spin-wrap{flex:1;display:flex;align-items:center;justify-content:center;min-width:50%}.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:340px;height:340px;max-width:100%;margin:0 auto}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap [id^="uspw-wheel-"]{width:80vw;height:80vw;max-width:90vw;margin:0 auto}}@media (max-width:767px){.ultimate-spin-wheel .uspw-spin-wrap{padding:0;min-width:100%}}.ultimate-spin-wheel .uspw-form-wrap{flex:1;padding:16px 30px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:18px;width:100%;min-width:0}.ultimate-spin-wheel .uspw-title{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-title-size, 28px);font-weight:700;color:var(--uspw-form-title-color, #1a1a1a);text-align:center;line-height:1.3;margin:0;padding:0}@media (max-width:768px){.ultimate-spin-wheel .uspw-title{font-size:calc(var(--uspw-form-title-size, 28px) * .85)}}.ultimate-spin-wheel .uspw-description{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-desc-size, 15px);font-weight:400;color:var(--uspw-form-desc-color, #6b7280);text-align:center;line-height:1.5;margin:0;padding:0;max-width:400px}@media (max-width:768px){.ultimate-spin-wheel .uspw-description{font-size:calc(var(--uspw-form-desc-size, 15px) * .9)}}.ultimate-spin-wheel form.uspw-spin-form{display:flex;flex-direction:column;gap:16px;width:100%;max-width:400px}.ultimate-spin-wheel .uspw-form-group{display:flex;flex-direction:column;gap:8px;width:100%}.ultimate-spin-wheel .uspw-label{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:var(--uspw-form-label-size, 14px);font-weight:600;color:var(--uspw-form-label-color, #374151);line-height:1.4;margin:0;padding:0;letter-spacing:.01em}.ultimate-spin-wheel .uspw-input{all:unset;display:block;width:100%;margin:0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:15px;font-weight:400;line-height:1.5;color:var(--uspw-form-input-color, #1a1a1a);background-color:var(--uspw-form-input-bg, #ffffff);border:2px solid var(--uspw-form-input-border, #e5e7eb);border-radius:var(--uspw-form-input-radius, 8px) !important;padding:12px 16px;transition:all .2s ease;box-sizing:border-box;outline:none;box-shadow:none}.ultimate-spin-wheel .uspw-input::placeholder{color:var(--uspw-form-input-placeholder, #9ca3af);opacity:1}.ultimate-spin-wheel .uspw-input:hover{border-color:var(--uspw-form-input-border, #d1d5db);opacity:.9}.ultimate-spin-wheel .uspw-input:focus{outline:none;border-width:2px;border-style:solid;border-color:var(--uspw-form-input-focus-border, #667eea);background-color:var(--uspw-form-input-focus-bg, #ffffff);box-shadow:0 0 0 3px rgba(102,126,234,0.1)}.ultimate-spin-wheel .uspw-input:disabled{background-color:#f9fafb;color:#9ca3af;cursor:not-allowed}.ultimate-spin-wheel .uspw-input:-webkit-autofill,.ultimate-spin-wheel .uspw-input:-webkit-autofill:hover,.ultimate-spin-wheel .uspw-input:-webkit-autofill:focus{-webkit-box-shadow:0 0 0 1000px white inset;-webkit-text-fill-color:#1a1a1a;border-color:#e5e7eb;transition:background-color 5000s ease-in-out 0s}.ultimate-spin-wheel button.uspw-spin{all:unset;display:block;width:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:16px;font-weight:600;line-height:1.5;color:var(--uspw-form-submit-color, #ffffff);background:var(--uspw-form-submit-bg, linear-gradient(-135deg, #6366f1 0%, #4338ca 100%));border:none;border-radius:var(--uspw-form-submit-radius, 8px) !important;padding:var(--uspw-form-submit-padding, 12px) 24px;cursor:pointer;text-align:center;transition:all .3s ease;box-sizing:border-box;margin-top:8px;box-shadow:0 4px 12px rgba(102,126,234,0.3)}.ultimate-spin-wheel button.uspw-spin:hover{transform:scale(1.02);opacity:.95;background:var(--uspw-form-submit-hover-bg, var(--uspw-form-submit-bg))}.ultimate-spin-wheel button.uspw-spin:active{transform:scale(.98)}.ultimate-spin-wheel button.uspw-spin:focus{outline:none}.ultimate-spin-wheel button.uspw-spin:disabled{background:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.ultimate-spin-wheel .uspw-gdpr-group{margin-top:0;margin-bottom:0}.ultimate-spin-wheel .uspw-gdpr-label{display:flex;align-items:flex-start;gap:12px;cursor:pointer;user-select:none;padding:12px;border-radius:8px;transition:background-color .2s ease}.ultimate-spin-wheel .uspw-gdpr-label:hover{background-color:rgba(102,126,234,0.04)}.ultimate-spin-wheel .uspw-gdpr-checkbox{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text{position:relative;padding-right:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,sans-serif;font-size:14px;font-weight:400;color:var(--uspw-form-label-color, #374151);line-height:1.5}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::before{content:'';position:absolute;right:0;top:1px;width:20px;height:20px;border:2px solid var(--uspw-form-input-border, #d1d5db);border-radius:5px;background-color:#ffffff;transition:all .25s cubic-bezier(.4, 0, .2, 1);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.ultimate-spin-wheel .uspw-gdpr-checkbox+.uspw-gdpr-text::after{content:'';position:absolute;right:7px;top:4px;width:6px;height:10px;border:solid white;border-width:0 0 2px 2px;transform:rotate(-45deg) scale(0);transition:transform .25s cubic-bezier(.4, 0, .2, 1);opacity:0}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::before{background:linear-gradient(-135deg, #667eea 0%, #764ba2 100%);border-color:#667eea;box-shadow:0 2px 8px rgba(102,126,234,0.3)}.ultimate-spin-wheel .uspw-gdpr-checkbox:checked+.uspw-gdpr-text::after{transform:rotate(-45deg) scale(1);opacity:1}.ultimate-spin-wheel .uspw-gdpr-checkbox:focus+.uspw-gdpr-text::before{outline:none;border-color:#667eea;box-shadow:0 0 0 3px rgba(102,126,234,0.15)}.ultimate-spin-wheel .uspw-gdpr-checkbox:required:invalid+.uspw-gdpr-text::before{animation:shake .3s ease-in-out}@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(4px)}75%{transform:translateX(-4px)}}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown){border-color:#ef4444}.ultimate-spin-wheel .uspw-input:invalid:not(:placeholder-shown):focus{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,0.1)}.ultimate-spin-wheel .uspw-input:valid:not(:placeholder-shown){border-color:#10b981}@media (max-width:767px){.ultimate-spin-wheel .uspw-form-wrap{padding:0;gap:10px}.ultimate-spin-wheel form.uspw-spin-form{max-width:100%;gap:12px}.ultimate-spin-wheel .uspw-input{padding:8px 12px}}@media (max-width:767px){.ultimate-spin-wheel .modal__container{max-width:95%;padding:20px}}.uspw-result-modal{display:none;position:fixed;top:0;right:0;width:100%;height:100%;z-index:100000;align-items:center;justify-content:center;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif}.uspw-result-modal.is-open{display:flex}.uspw-result-overlay{position:absolute;top:0;right:0;width:100%;height:100%;background:rgba(0,0,0,0.6);backdrop-filter:blur(4px);z-index:1}.uspw-result-container{position:relative;z-index:2;background:#fff;width:90%;max-width:450px;border-radius:20px;padding:40px 30px;text-align:center;box-shadow:0 25px 50px -12px rgba(0,0,0,0.25);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275);overflow:hidden}@keyframes uspw-popIn{from{opacity:0;transform:scale(.8) translateY(20px)}to{opacity:1;transform:scale(1) translateY(0)}}.uspw-result-header{font-size:28px;font-weight:800;color:#333;margin-bottom:10px;line-height:1.2}.uspw-result-subheader{font-size:16px;color:#666;margin-bottom:25px}.uspw-prize-highlight{font-size:24px;font-weight:700;color:#e74c3c;margin:10px 0}.uspw-coupon-box{background:#fdfdfd;border:2px dashed #e2e8f0;border-radius:12px;margin:24px auto;position:relative;cursor:pointer;transition:all .3s cubic-bezier(.4, 0, .2, 1);max-width:320px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);display:flex;flex-direction:column;overflow:hidden}.uspw-coupon-box:hover{background:#ffffff;border-color:#4f46e5;transform:translateY(-3px);box-shadow:0 12px 25px -5px rgba(79,70,229,0.1),0 8px 10px -6px rgba(79,70,229,0.1)}.uspw-coupon-box:hover .uspw-copy-indicator{transform:scale(1.1);color:#4f46e5}.uspw-coupon-box:hover .uspw-coupon-label{background:#4f46e5;color:#ffffff;border-top-color:#4f46e5}.uspw-coupon-box .uspw-coupon-inner{display:flex;align-items:center;justify-content:center;gap:15px;padding:24px 20px}.uspw-coupon-box .uspw-coupon-code{font-family:'Courier New',Monaco,monospace;font-size:32px;font-weight:800;color:#1a1a1a;letter-spacing:3px;line-height:1}.uspw-coupon-box .uspw-copy-indicator{color:#cbd5e1;transition:all .2s ease;flex-shrink:0}.uspw-coupon-box .uspw-coupon-label{display:block;width:100%;font-size:10px;font-weight:700;text-transform:uppercase;color:#64748b;padding:10px 0;background:#f8fafc;border-top:1px dashed #e2e8f0;letter-spacing:1.5px;transition:all .3s ease}.uspw-result-btn{background:#333;color:#fff;border:none;padding:15px 30px;font-size:16px;font-weight:600;border-radius:50px;cursor:pointer;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);margin-top:10px}.uspw-result-btn:hover{background:#000;transform:translateY(-2px)}.uspw-close-icon{position:absolute;top:15px;left:15px;width:32px;height:32px;cursor:pointer;background:var(--uspw-close-bg, #f1f5f9);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:all .3s cubic-bezier(.175, .885, .32, 1.275);z-index:1001;text-decoration:none}.uspw-close-icon:hover{background:#e2e8f0;transform:rotate(-90deg) scale(1.1);opacity:1}.uspw-close-icon:before,.uspw-close-icon:after{content:'';position:absolute;width:14px;height:2px;background-color:var(--uspw-close-color, #64748b);border-radius:2px;transition:background-color .3s}.uspw-close-icon:hover:before,.uspw-close-icon:hover:after{background-color:#0f172a}.uspw-close-icon:before{transform:rotate(-45deg)}.uspw-close-icon:after{transform:rotate(45deg)}.uspw-confetti-canvas{position:absolute;top:0;right:0;width:100%;height:100%;pointer-events:none;z-index:1000}.uspw-already-played-container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;width:100%;animation:uspw-popIn .5s ease}.uspw-already-played-container .uspw-already-played-icon{margin-bottom:20px;color:#f97316}.uspw-already-played-container .uspw-already-played-icon svg{filter:drop-shadow(0 4px 6px rgba(249,115,22,0.2))}.uspw-already-played-container .uspw-already-played-title{font-size:24px;font-weight:800;color:#1a1a1a;margin-bottom:12px}.uspw-already-played-container .uspw-already-played-msg{font-size:16px;color:#4b5563;line-height:1.6;margin-bottom:24px;max-width:300px}.uspw-already-played-container .uspw-countdown{margin-bottom:24px;animation:uspw-fadeIn .5s ease}.uspw-already-played-container .uspw-countdown-title{color:#f59e0b;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:12px}.uspw-already-played-container .uspw-countdown-boxes{display:flex;gap:8px;justify-content:center;align-items:center}.uspw-already-played-container .uspw-countdown-box{background:linear-gradient(-135deg, #1e293b 0%, #334155 100%);border-radius:8px;padding:10px 14px;min-width:54px;text-align:center;box-shadow:0 4px 12px rgba(0,0,0,0.2);transition:transform .2s ease}.uspw-already-played-container .uspw-countdown-box:hover{transform:translateY(-2px)}.uspw-already-played-container .uspw-countdown-value{color:#fff;font-size:22px;font-weight:700;font-family:'Courier New',Monaco,monospace;line-height:1;margin-bottom:4px}.uspw-already-played-container .uspw-countdown-label{color:#94a3b8;font-size:10px;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.uspw-already-played-container .uspw-countdown-separator{color:#64748b;font-size:22px;font-weight:bold;line-height:1;animation:uspw-blink 1s infinite}.uspw-already-played-container .uspw-countdown-complete{margin-bottom:24px;padding:14px 24px;background:linear-gradient(-135deg, #10b981 0%, #059669 100%);border-radius:12px;display:inline-block;box-shadow:0 4px 15px rgba(16,185,129,0.3);animation:uspw-popIn .5s cubic-bezier(.175, .885, .32, 1.275)}.uspw-already-played-container .uspw-countdown-complete span{color:#fff;font-weight:600;font-size:15px}.uspw-already-played-container .uspw-already-played-timer{background:#fff7ed;border:1px solid #ffedd5;padding:12px 20px;border-radius:12px;margin-bottom:30px;display:flex;flex-direction:column;gap:4px}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-label{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#9a3412}.uspw-already-played-container .uspw-already-played-timer .uspw-timer-value{font-size:18px;font-weight:700;color:#7c2d12}@keyframes uspw-blink{0%,100%{opacity:1}50%{opacity:.3}}@keyframes uspw-fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} -
ultimate-spin-wheel/trunk/assets/js/spin-wheel.js
r3464555 r3470708 1 class StorageManager{constructor(e){this.prefix=e}get(e){const t=this.prefix+e;return localStorage.getItem(t)||this.getCookie(t)}set(e,t,s=365){const o=this.prefix+e;localStorage.setItem(o,t),this.setCookie(o,t,s)}remove(e){const t=this.prefix+e;localStorage.removeItem(t),this.setCookie(t,"",-1)}setCookie(e,t,s){let o="";if(s){const e=new Date;e.setTime(e.getTime()+24*s*60*60*1e3),o="; expires="+e.toUTCString()}document.cookie=e+"="+(t||"")+o+"; path=/; SameSite=Lax"}getCookie(e){const t=e+"=",s=document.cookie.split(";");for(let e=0;e<s.length;e++){let o=s[e];for(;" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return null}}class CelebrationManager{constructor(e){this.app=e}trigger(e){window.confetti?(this.runConfetti(e),this.playSound()):console.warn("Canvas Confetti not loaded or disabled")}playSound(){const e=this.app.config.settings;if("yes"!==e.enable_sound)return;const t=e.celebration_sound;if(t)try{const e=new Audio(t);e.volume=.5,e.play().catch(e=>{console.warn("Celebration sound play blocked or failed:",e)})}catch(e){console.warn("Error playing celebration sound:",e)}}runConfetti(e){const t=document.getElementById(`uspw-confetti-canvas-${e}`);if(!t||!window.confetti)return;const s=this.app.config.settings.design_settings?.popup||{},o=parseInt(s.confettiIntensity)||50,i=s.confettiType||"standard",n=window.confetti.create(t,{resize:!0,useWorker:!0});let a=[];if("stars"===i)a=["star"];else if("circles"===i)a=["circle"];else if("emojis"===i)try{"function"==typeof window.confetti.shapeFromText?(a.push(window.confetti.shapeFromText({text:"🎉",scalar:3})),a.push(window.confetti.shapeFromText({text:"✨",scalar:3})),a.push(window.confetti.shapeFromText({text:"🚀",scalar:4})),a.push(window.confetti.shapeFromText({text:"💰",scalar:3})),a.push(window.confetti.shapeFromText({text:"💎",scalar:3}))):a=["square","circle"]}catch(e){a=["square","circle"]}else a=["square","circle"];const r=5e3,l=Date.now()+r,p={startVelocity:45,spread:360,ticks:120,zIndex:1001,shapes:a,colors:["#4f46e5","#7c3aed","#10b981","#f59e0b","#ef4444","#3b82f6"],scalar:"emojis"===i?1:1.2},c=(e,t)=>Math.random()*(t-e)+e,d=setInterval(()=>{const e=l-Date.now();if(e<=0)return clearInterval(d);const t=o/1.25*(e/r);n({...p,particleCount:t,origin:{x:c(.1,.2),y:Math.random()-.2},gravity:1.2,drift:.5}),n({...p,particleCount:t,origin:{x:c(.8,.9),y:Math.random()-.2},gravity:1.2,drift:-.5}),e>1500&&n({...p,particleCount:.5*t,origin:{x:c(.4,.6),y:c(.1,.4)},startVelocity:25,scalar:"emojis"===i?1.5:.9,shapes:["circle","star"]})},250)}}class TriggerManager{constructor(e){this.app=e,this.settings=e.config.settings||{};const t=this.settings.campaign_settings||{};this.popupSettings={popupType:t.triggers?.type||"instant",popup_delayedTime:t.triggers?.delayedTime||"5",popup_scrollDistance:t.triggers?.scrollDistance||"400",popup_reopenClass:t.triggers?.reopenClass||"open-popup",popup_openWithHash:t.triggers?.hashTrigger||"#spin-wheel"},this.displayed=!1,this.timeouts=[]}init(){this.setupManualTriggers(),this.shouldBlockSystemTriggers()?console.log("Spin Wheel: System triggers blocked (cookie/closed/mobile/etc)"):this.setupSystemTriggers()}shouldBlockSystemTriggers(){if(this.app.isPreview)return!1;const e="true"===this.app.storage.get("played"),t="true"===this.app.storage.get("completed");if(e||t){const e=parseInt(this.app.storage.get("play_expiry")||0);if(e>0&&Date.now()<e)return console.log(`Spin Wheel: Blocked. User has already ${t?"won":"played"}.`),!0;t?e>0&&Date.now()>=e&&(this.app.storage.remove("played"),this.app.storage.remove("completed"),this.app.storage.remove("play_expiry") ):(this.app.storage.remove("played"),this.app.storage.remove("play_expiry"))}if("true"===this.app.storage.get("dismissed")){const e=parseInt(this.app.storage.get("dismiss_expiry")||0);if(0===e){if("true"===sessionStorage.getItem(this.app.storage.prefix+"dismissed_session"))return console.log("Spin Wheel: Recently dismissed (session)"),!0;this.app.storage.remove("dismissed"),this.app.storage.remove("dismiss_expiry")}else{if(e>0&&Date.now()<e)return console.log("Spin Wheel: Recently dismissed"),!0;this.app.storage.remove("dismissed"),this.app.storage.remove("dismiss_expiry")}}const s=this.app.getDeviceType();return"yes"===this.settings.hide_on_mobile&&"mobile"===s||"yes"===this.settings.hide_on_desktop&&"desktop"===s}setupSystemTriggers(){switch(this.popupSettings.popupType||"instant"){case"none":console.log('Spin Wheel: System trigger set to "none", waiting for manual trigger');break;case"instant":this.show("instant");break;case"delayed":const e=setTimeout(()=>this.show("delayed"),1e3*(parseInt(this.popupSettings.popup_delayedTime)||1));this.timeouts.push(e);break;case"scrolled":this.setupScrollTrigger();break;case"exit":this.setupExitIntent()}}setupManualTriggers(){const e=this.popupSettings.popup_reopenClass||"open-popup";document.addEventListener("click",t=>{(t.target.closest("."+e)||t.target.closest("#"+e))&&(t.preventDefault(),this.show("manual_click"))});const t=this.popupSettings.popup_openWithHash||"#open-popup",s=()=>{window.location.hash===t&&this.show("manual_hash")};window.addEventListener("hashchange",s),s()}setupScrollTrigger(){const e=this.popupSettings.popup_scrollDistance||"400px",t=()=>{if(this.displayed)return;let s=!1;if(e.includes("%")){window.scrollY/(document.documentElement.scrollHeight-window.innerHeight)*100>=parseInt(e)&&(s=!0)}else window.scrollY>=parseInt(e)&&(s=!0);s&&(this.show("scrolled"),window.removeEventListener("scroll",t))};window.addEventListener("scroll",t,{passive:!0})}setupExitIntent(){const e=t=>{this.displayed||t.clientY<5&&(this.show("exit"),document.removeEventListener("mouseout",e))};document.addEventListener("mouseout",e)}show(e){if(this.displayed)return;const t="manual_click"===e||"manual_hash"===e;t||!this.shouldBlockSystemTriggers()?(console.log(`Spin Wheel: Trigger firing (${e})${t?" [Manual - bypassed checks]":""}`),this.timeouts.forEach(clearTimeout),this.timeouts=[],this.displayed=!0,this.app.ui.openModal(e)):console.log(`Spin Wheel: System trigger blocked (${e}). Cookie found or Preview bypassed.`)}}class CountdownTimer{constructor(e={}){this.campaignId=e.campaignId,this.endsAtTimestamp=e.endsAtTimestamp,this.onComplete=e.onComplete||null,this.interval=null,this.countdownEl=document.getElementById(`uspw-countdown-${this.campaignId}`),this.completeEl=document.getElementById(`uspw-countdown-complete-${this.campaignId}`),this.hoursBox=this.countdownEl?.querySelector(".uspw-countdown-hours"),this.hoursSep=this.countdownEl?.querySelector(".uspw-countdown-hours-sep"),this.hoursValue=this.countdownEl?.querySelector('[data-unit="hours"]'),this.minutesValue=this.countdownEl?.querySelector('[data-unit="minutes"]'),this.secondsValue=this.countdownEl?.querySelector('[data-unit="seconds"]')}start(){if(!this.countdownEl||!this.endsAtTimestamp)return;this.stop(),this.countdownEl.style.display="block",this.completeEl&&(this.completeEl.style.display="none");const e=()=>{const e=Math.floor(Date.now()/1e3),t=this.endsAtTimestamp-e;if(t<=0)return this.stop(),this.showComplete(),void(this.onComplete&&this.onComplete());this.updateValues(t)};e(),this.interval=setInterval(e,1e3)}stop(){this.interval&&(clearInterval(this.interval),this.interval=null)}pad(e){return e.toString().padStart(2,"0")}updateValues(e){const t=Math.floor(e/3600),s=Math.floor(e%3600/60),o=e%60;t>0?(this.hoursBox&&(this.hoursBox.style.display=""),this.hoursSep&&(this.hoursSep.style.display=""),this.hoursValue&&(this.hoursValue.textContent=this.pad(t))):(this.hoursBox&&(this.hoursBox.style.display="none"),this.hoursSep&&(this.hoursSep.style.display="none")),this.minutesValue&&(this.minutesValue.textContent=this.pad(s)),this.secondsValue&&(this.secondsValue.textContent=this.pad(o))}showComplete(){this.countdownEl&&(this.countdownEl.style.display="none"),this.completeEl&&(this.completeEl.style.display="block")}}class UIManager{constructor(e){this.app=e,this.modalId="uspw-modal-"+(e.config.settings.post_id||"0")}init(){"undefined"!=typeof MicroModal&&MicroModal.init({disableScroll:!0,awaitOpenAnimation:!0,awaitCloseAnimation:!0}),this.app.isPreview&&console.log("%c Spin Wheel: Admin Preview Mode Active. Blocking logic is bypassed for testing. ","background: #4f46e5; color: #fff; border-radius: 4px; padding: 2px 4px;")}openModal(e){console.log(`Spin Wheel: Opening modal (${e})`),MicroModal.show(this.modalId,{onShow:e=>this.onShow(e),onClose:()=>this.onClose(e)})}onShow(e){console.log("Spin Wheel: Modal shown");const t=()=>{const e=document.querySelector(`#uspw-wheel-${this.app.config.settings.post_id}`);e&&e.offsetWidth>0?this.app.wheel.init():requestAnimationFrame(t)};setTimeout(()=>{requestAnimationFrame(t)},50),this.trackImpression(),this.handleAlreadyPlayedState()}handleAlreadyPlayedState(){const e="true"===this.app.storage.get("played"),t="true"===this.app.storage.get("completed");if(!e&&!t||this.app.isPreview)return;const s=parseInt(this.app.storage.get("play_expiry")||0),o=Date.now();if(s>0&&o<s){const e=Math.floor(s/1e3);this.showInlineMessage(null,null,{cooldownType:"hours",cooldownEndsAt:e,remainingSeconds:Math.floor((s-o)/1e3)})}else this.showInlineMessage()}showInlineMessage(e,t,s={}){const o=document.getElementById(this.modalId);if(!o)return;const i=o.querySelector(".uspw-spin-form"),n=o.querySelector(".uspw-title"),a=o.querySelector(".uspw-description"),r=o.querySelector(".uspw-already-played-container"),l=o.querySelector(`#uspw-already-played-title-${this.app.config.settings.post_id}`),p=o.querySelector(`#uspw-already-played-msg-${this.app.config.settings.post_id}`);i&&(i.style.display="none"),n&&(n.style.display="none"),a&&(a.style.display="none"),e&&l&&(l.textContent=e),t&&p&&(p.textContent=t),s.cooldownEndsAt&&"never"!==s.cooldownType&&this.startCountdownTimer(s.cooldownEndsAt),r&&(r.style.display="flex")}startCountdownTimer(e){this.countdownTimer&&this.countdownTimer.stop(),this.countdownTimer=new CountdownTimer({campaignId:this.app.config.settings.post_id,endsAtTimestamp:e,onComplete:()=>{console.log("Spin Wheel: Cooldown expired, user can spin again"),setTimeout(()=>{window.location.reload()},1500)}}),this.countdownTimer.start()}trackImpression(){const e=this.app.config.settings,t=parseInt(e.max_impressions||0),s=parseInt(e.impressions_count||0);if(this.app.isPreview)return void console.log("Spin Wheel: Skipping impression count in preview mode");if(0===t)return void console.log("Spin Wheel: Skipping impression count (unlimited)");if(s>=t)return void console.log("Spin Wheel: Impression limit reached, skipping AJAX");const o=new FormData;o.append("action","ultimate_spin_wheel_sc_imp_count"),o.append("nonce",this.app.config.nonce),o.append("campaign_id",e.post_id),fetch(this.app.config.ajax_url,{method:"POST",body:o}).then(e=>e.json()).then(t=>{t.success&&(console.log("Spin Wheel: Impression counted",t.data.count),e.impressions_count=t.data.count)}).catch(e=>console.error("Spin Wheel: Impression tracking failed",e))}closeModal(){MicroModal.close(this.modalId)}onClose(e){console.log(`Spin Wheel: Modal closed (${e})`),this.app.triggers.displayed=!1,document.activeElement&&document.activeElement instanceof HTMLElement&&document.activeElement.blur(),window.focus();if(!("true"===this.app.storage.get("completed"))||"delayed"===e||"scrolled"===e||"exit"===e){const e=this.app.config.settings,t=e.on_dismiss_behavior||"hours",s=parseInt(e.on_dismiss_hours)||6,o=parseInt(e.on_dismiss_days)||1;this.app.storage.set("dismissed","true",1);let i=0;"hours"===t?i=Date.now()+60*s*60*1e3:"days"===t?i=Date.now()+24*o*60*60*1e3:"session"===t&&(i=0,sessionStorage.setItem(this.app.storage.prefix+"dismissed_session","true")),this.app.storage.set("dismiss_expiry",i),console.log(`Spin Wheel: Dismissed recorded. Behavior: ${t}, Expiry: ${i}`)}}openResultModal(e){const t=this.app.config.settings.post_id,s=`uspw-win-modal-${t}`,o=document.getElementById(s);if(!o)return void console.error("Result modal not found:",s);o.style.display="";const i=o.querySelector(`#uspw-win-heading-${t}`),n=o.querySelector(`#uspw-win-message-${t}`),a=o.querySelector(`#uspw-result-win-content-${t}`),r=o.querySelector(`#uspw-result-label-${t}`),l=o.querySelector(`#uspw-result-code-${t}`),p=o.querySelector(".uspw-result-btn"),c=o.querySelector(".uspw-close-icon"),d=e=>{if(e&&e.preventDefault&&e.preventDefault(),o.classList.remove("is-open"),o.setAttribute("aria-hidden","true"),"undefined"!=typeof MicroModal)try{MicroModal.close(s)}catch(e){}else o.style.display="none"};c&&(c.onclick=d);const h=o.dataset.winTitle||"Congratulations!",u=o.dataset.winMessage||"You won a {{discount_label}} discount!",g=o.dataset.winBtn||"Continue";if(i&&(i.textContent=e.heading||h),n){let t=e.message||u;e.label&&(t=t.replace(/{{discount_label}}/g,e.label)),n.innerHTML=t}a&&(a.style.display="block"),r&&(r.textContent=e.label),l&&(l.textContent=e.code||"");const m=o.querySelector(`#uspw-coupon-box-${t}`);if(m&&(m.style.display=e.code?"flex":"none",m.onclick=e=>{e.stopPropagation();const t=l?l.textContent:"";if(!t)return;const s=()=>{const e=o.querySelector(".uspw-coupon-label");if(e){const t=e.textContent;e.textContent="Copied!",setTimeout(()=>e.textContent=t,2e3)}};if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t).then(s);else{const e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.left="-9999px",e.style.top="0",document.body.appendChild(e),e.focus(),e.select();try{document.execCommand("copy"),s()}catch(e){console.error("Spin Wheel: Fallback copy failed",e)}document.body.removeChild(e)}}),p){p.textContent=g;const t="true"===o.dataset.autoApply,s=o.dataset.redirectUrl;e.code&&t&&(document.cookie=`uspw_apply_coupon=${e.code}; path=/; max-age=3600; SameSite=Lax`),p.onclick=t=>{if(t&&t.preventDefault&&t.preventDefault(),e.code&&(localStorage.setItem("uspw_won_coupon",e.code),localStorage.setItem("uspw_won_label",e.label||"")),d(t),s&&""!==s){let t=s;const o=-1!==t.indexOf("?")?"&":"?";e.code&&(t+=`${o}uspw_coupon=${encodeURIComponent(e.code)}`),window.location.href=t}}}"undefined"!=typeof MicroModal?MicroModal.show(s,{awaitOpenAnimation:!0,awaitCloseAnimation:!0,disableScroll:!0,onShow:()=>{"won"===e.status&&this.app.celebration.trigger(t)}}):(o.classList.add("is-open"),o.setAttribute("aria-hidden","false"),"won"===e.status&&this.app.celebration.trigger(t))}}class WheelManager{constructor(e){this.app=e,this.luckyWheel=null,this.isSpinning=!1,this.serverResult=null}init(){if(this.luckyWheel)return;const e=`#uspw-wheel-${this.app.config.settings.post_id}`;if(!document.querySelector(e))return;this.setupForm();const t=this.app.config,s=t.settings.prizes||[],o=(t.settings.design_settings||{}).wheel||{},i=o.defaultStyle||{fontColor:"#ffffff",fontSize:"14px",fontWeight:"600"},n=s.map((e,t)=>{const s=e.color||e.background||"#333",n=e.fonts||[{text:e.label||"",top:"15%",fontSize:i.fontSize||"14px",fontColor:i.fontColor||"#fff",fontWeight:i.fontWeight||"600"}],a=o.imageStyle||{top:35,width:20,height:20};return{background:s,fonts:n,imgs:e.imgs||(e.image_url?[{src:e.image_url,width:`${a.width||30}%`,top:`${a.top||40}%`}]:[]),data:e}});if("undefined"==typeof LuckyCanvas)return void console.error("Spin Wheel: LuckyCanvas not loaded");console.log("Spin Wheel: Initializing LuckyCanvas on",e);const a="mobile"===this.app.getDeviceType(),r=a?"80vw":"340px",l=a?"80vw":"340px",p=o.blocks||[{padding:"10px",background:"#1a1a2e"},{padding:"10px",background:"#ffffff"},{padding:"3px",background:"#e94560"}],c=o.buttons||[{radius:"40%",background:"#ffffff"},{radius:"35%",background:"#f0f0f0"},{radius:"30%",background:"#e94560",fonts:[{text:"SPIN",top:"-10px",fontSize:"16px",fontWeight:"bold",fontColor:"#fff"}]}];this.luckyWheel=new LuckyCanvas.LuckyWheel(e,{width:r,height:l,blocks:p,prizes:n,buttons:c,defaultStyle:o.defaultStyle||{fontColor:"#ffffff",fontSize:"14px",fontWeight:"600"},start:()=>{this.handleStart()},end:e=>this.onResult(e)})}setupForm(){const e=document.querySelector(".uspw-spin-form");if(!e)return;const t=e.querySelector('input[name="phone"]');if(t){const e=/^[\+]?[0-9]{0,3}\W?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im,s=()=>{const s=t.value.trim();s&&!e.test(s)?t.setCustomValidity(USPW_UI_CONFIG.i18n?.invalid_phone||"Please enter a valid phone number."):t.setCustomValidity("")};t.oninput=s,t.onchange=s}e.onsubmit=t=>{if(t.preventDefault(),!e.checkValidity())return void e.reportValidity();const s=new FormData(e),o={};s.forEach((e,t)=>o[t]=e),this.spin(o)}}handleStart(){if(this.isSpinning)return;const e=document.querySelector(".uspw-spin-form");e?"function"==typeof e.requestSubmit?e.requestSubmit():e.reportValidity()&&e.dispatchEvent(new Event("submit",{cancelable:!0})):this.spin({})}checkIdentity(e){return new Promise(t=>{const s=this.app.config.settings;if("yes"!==s.limit_spin_per_user)return void t({allowed:!0});const o=s.identity_check_type||"email";if("email"===o&&!e.email)return void t({allowed:!0});if("phone"===o&&!e.phone)return void t({allowed:!0});if("both"===o&&!e.email&&!e.phone)return void t({allowed:!0});const i=new FormData;i.append("action","ultimate_spin_wheel_check_identity"),i.append("campaign_id",s.post_id),i.append("nonce",this.app.config.nonce),e.email&&i.append("email",e.email),e.phone&&i.append("phone",e.phone),fetch(this.app.config.ajax_url,{method:"POST",body:i}).then(e=>e.json()).then(e=>{if(e.success)if(e.data.already_played){const s=`uspin_cooldown_${this.app.config.settings.post_id}`;e.data.cooldown_ends_at?localStorage.setItem(s,JSON.stringify({endsAt:e.data.cooldown_ends_at,type:e.data.cooldown_type})):"never"===e.data.cooldown_type&&localStorage.setItem(s,JSON.stringify({endsAt:null,type:"never"})),t({allowed:!1,message:e.data.message,cooldownType:e.data.cooldown_type,cooldownEndsAt:e.data.cooldown_ends_at,remainingSeconds:e.data.remaining_seconds})}else t({allowed:!0});else t({allowed:!0})}).catch(e=>{console.error("Identity check error",e),t({allowed:!0})})})}spin(e){this.checkIdentity(e).then(t=>{if(!t.allowed)return void this.app.ui.showInlineMessage(null,t.message,{cooldownType:t.cooldownType,cooldownEndsAt:t.cooldownEndsAt,remainingSeconds:t.remainingSeconds});if(this.isSpinning||!this.luckyWheel)return;this.isSpinning=!0,this.luckyWheel.play();const s=new FormData;s.append("action","ultimate_spin_wheel_process_spin"),s.append("campaign_id",this.app.config.settings.post_id),s.append("nonce",this.app.config.nonce),e.email&&s.append("email",e.email),e.name&&s.append("name",e.name),e.phone&&s.append("phone",e.phone),e.gdpr_optin&&s.append("optin",e.gdpr_optin),fetch(this.app.config.ajax_url,{method:"POST",body:s}).then(e=>e.json()).then(e=>{e.success?(this.serverResult=e.data,this.luckyWheel.stop(this.serverResult.index)):(this.luckyWheel.stop(0),e.data?.already_played||e.data?.disposable_email?(this.serverResult={status:"error",message:e.data?.message||"Error occurred",showInline:!0},this.app.ui.showInlineMessage(null,e.data.message)):(this.serverResult={status:"error",message:e.data?.message||"Error occurred"},alert(e.data?.message||"Error occurred")))}).catch(e=>{console.error(e),this.luckyWheel.stop(0),this.serverResult={status:"error",message:"Network Error"}})})}onResult(e){if(this.isSpinning=!1,("error"!==this.serverResult?.status||!this.serverResult?.showInline)&&(this.app.ui.closeModal(),this.serverResult&&"error"!==this.serverResult.status)){this.app.ui.openResultModal(this.serverResult);const e=this.app.config.settings,t=e.on_play_behavior||"forever",s=parseInt(e.on_play_days)||30,o=parseInt(e.on_play_hours)||24;this.app.storage.set("played","true"),"forever"===t?this.app.storage.set("play_expiry",Date.now()+31536e7):"days"===t?this.app.storage.set("play_expiry",Date.now()+24*s*60*60*1e3):"hours"===t&&this.app.storage.set("play_expiry",Date.now()+60*o*60*1e3),"won"===this.serverResult.status&&this.app.storage.set("completed","true")}}}!function(){"use strict";window.SpinWheelApp=new class{constructor(){if(this.config=window.USPW_UI_CONFIG||{},!this.config.settings)return;this.id=this.config.settings.post_id,this.prefix=`uspw_${this.id}_`;const e=new URLSearchParams(window.location.search);this.isPreview="preview"===e.get("spin_wheel"),this.storage=new StorageManager(this.prefix),this.celebration=new CelebrationManager(this),this.ui=new UIManager(this),this.triggers=new TriggerManager(this),this.wheel=new WheelManager(this),this.init()}init(){console.log("Spin Wheel App Initialized"),this.ui.init(),this.triggers.init()}getDeviceType(){return window.innerWidth<768?"mobile":"desktop"}}}();1 class StorageManager{constructor(e){this.prefix=e}get(e){const t=this.prefix+e;return localStorage.getItem(t)||this.getCookie(t)}set(e,t,s=365){const o=this.prefix+e;localStorage.setItem(o,t),this.setCookie(o,t,s)}remove(e){const t=this.prefix+e;localStorage.removeItem(t),this.setCookie(t,"",-1)}setCookie(e,t,s){let o="";if(s){const e=new Date;e.setTime(e.getTime()+24*s*60*60*1e3),o="; expires="+e.toUTCString()}document.cookie=e+"="+(t||"")+o+"; path=/; SameSite=Lax"}getCookie(e){const t=e+"=",s=document.cookie.split(";");for(let e=0;e<s.length;e++){let o=s[e];for(;" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return null}}class CelebrationManager{constructor(e){this.app=e}trigger(e){window.confetti?(this.runConfetti(e),this.playSound()):console.warn("Canvas Confetti not loaded or disabled")}playSound(){const e=this.app.config.settings;if("yes"!==e.enable_sound)return;const t=e.celebration_sound;if(t)try{const e=new Audio(t);e.volume=.5,e.play().catch(e=>{console.warn("Celebration sound play blocked or failed:",e)})}catch(e){console.warn("Error playing celebration sound:",e)}}runConfetti(e){const t=document.getElementById(`uspw-confetti-canvas-${e}`);if(!t||!window.confetti)return;const s=this.app.config.settings.design_settings?.popup||{},o=parseInt(s.confettiIntensity)||50,i=s.confettiType||"standard",n=window.confetti.create(t,{resize:!0,useWorker:!0});let a=[];if("stars"===i)a=["star"];else if("circles"===i)a=["circle"];else if("emojis"===i)try{"function"==typeof window.confetti.shapeFromText?(a.push(window.confetti.shapeFromText({text:"🎉",scalar:3})),a.push(window.confetti.shapeFromText({text:"✨",scalar:3})),a.push(window.confetti.shapeFromText({text:"🚀",scalar:4})),a.push(window.confetti.shapeFromText({text:"💰",scalar:3})),a.push(window.confetti.shapeFromText({text:"💎",scalar:3}))):a=["square","circle"]}catch(e){a=["square","circle"]}else a=["square","circle"];const r=5e3,l=Date.now()+r,p={startVelocity:45,spread:360,ticks:120,zIndex:1001,shapes:a,colors:["#4f46e5","#7c3aed","#10b981","#f59e0b","#ef4444","#3b82f6"],scalar:"emojis"===i?1:1.2},c=(e,t)=>Math.random()*(t-e)+e,d=setInterval(()=>{const e=l-Date.now();if(e<=0)return clearInterval(d);const t=o/1.25*(e/r);n({...p,particleCount:t,origin:{x:c(.1,.2),y:Math.random()-.2},gravity:1.2,drift:.5}),n({...p,particleCount:t,origin:{x:c(.8,.9),y:Math.random()-.2},gravity:1.2,drift:-.5}),e>1500&&n({...p,particleCount:.5*t,origin:{x:c(.4,.6),y:c(.1,.4)},startVelocity:25,scalar:"emojis"===i?1.5:.9,shapes:["circle","star"]})},250)}}class TriggerManager{constructor(e){this.app=e,this.settings=e.config.settings||{};const t=this.settings.campaign_settings||{};this.popupSettings={popupType:t.triggers?.type||"instant",popup_delayedTime:t.triggers?.delayedTime||"5",popup_scrollDistance:t.triggers?.scrollDistance||"400",popup_reopenClass:t.triggers?.reopenClass||"open-popup",popup_openWithHash:t.triggers?.hashTrigger||"#spin-wheel"},this.displayed=!1,this.timeouts=[]}init(){this.setupManualTriggers(),this.shouldBlockSystemTriggers()?console.log("Spin Wheel: System triggers blocked (cookie/closed/mobile/etc)"):this.setupSystemTriggers()}shouldBlockSystemTriggers(){if(this.app.isPreview)return!1;const e="true"===this.app.storage.get("played"),t="true"===this.app.storage.get("completed");if(e||t){const e=parseInt(this.app.storage.get("play_expiry")||0);if(e>0&&Date.now()<e)return console.log(`Spin Wheel: Blocked. User has already ${t?"won":"played"}.`),!0;t?e>0&&Date.now()>=e&&(this.app.storage.remove("played"),this.app.storage.remove("completed"),this.app.storage.remove("play_expiry"),this.app.storage.remove("play_behavior"),this.app.storage.remove("play_cooldown_expiry")):(this.app.storage.remove("played"),this.app.storage.remove("play_expiry"),this.app.storage.remove("play_behavior"),this.app.storage.remove("play_cooldown_expiry"))}if("true"===this.app.storage.get("dismissed")){const e=parseInt(this.app.storage.get("dismiss_expiry")||0);if(0===e){if("true"===sessionStorage.getItem(this.app.storage.prefix+"dismissed_session"))return console.log("Spin Wheel: Recently dismissed (session)"),!0;this.app.storage.remove("dismissed"),this.app.storage.remove("dismiss_expiry")}else{if(e>0&&Date.now()<e)return console.log("Spin Wheel: Recently dismissed"),!0;this.app.storage.remove("dismissed"),this.app.storage.remove("dismiss_expiry")}}const s=this.app.getDeviceType();return"yes"===this.settings.hide_on_mobile&&"mobile"===s||"yes"===this.settings.hide_on_desktop&&"desktop"===s}setupSystemTriggers(){switch(this.popupSettings.popupType||"instant"){case"none":console.log('Spin Wheel: System trigger set to "none", waiting for manual trigger');break;case"instant":this.show("instant");break;case"delayed":const e=setTimeout(()=>this.show("delayed"),1e3*(parseInt(this.popupSettings.popup_delayedTime)||1));this.timeouts.push(e);break;case"scrolled":this.setupScrollTrigger();break;case"exit":this.setupExitIntent()}}setupManualTriggers(){const e=this.popupSettings.popup_reopenClass||"open-popup";document.addEventListener("click",t=>{(t.target.closest("."+e)||t.target.closest("#"+e))&&(t.preventDefault(),this.show("manual_click"))});const t=this.popupSettings.popup_openWithHash||"#open-popup",s=()=>{window.location.hash===t&&this.show("manual_hash")};window.addEventListener("hashchange",s),s()}setupScrollTrigger(){const e=this.popupSettings.popup_scrollDistance||"400px",t=()=>{if(this.displayed)return;let s=!1;if(e.includes("%")){window.scrollY/(document.documentElement.scrollHeight-window.innerHeight)*100>=parseInt(e)&&(s=!0)}else window.scrollY>=parseInt(e)&&(s=!0);s&&(this.show("scrolled"),window.removeEventListener("scroll",t))};window.addEventListener("scroll",t,{passive:!0})}setupExitIntent(){const e=t=>{this.displayed||t.clientY<5&&(this.show("exit"),document.removeEventListener("mouseout",e))};document.addEventListener("mouseout",e)}show(e){if(this.displayed)return;const t="manual_click"===e||"manual_hash"===e;t||!this.shouldBlockSystemTriggers()?(console.log(`Spin Wheel: Trigger firing (${e})${t?" [Manual - bypassed checks]":""}`),this.timeouts.forEach(clearTimeout),this.timeouts=[],this.displayed=!0,this.app.ui.openModal(e)):console.log(`Spin Wheel: System trigger blocked (${e}). Cookie found or Preview bypassed.`)}}class CountdownTimer{constructor(e={}){this.campaignId=e.campaignId,this.endsAtTimestamp=e.endsAtTimestamp,this.onComplete=e.onComplete||null,this.interval=null,this.countdownEl=document.getElementById(`uspw-countdown-${this.campaignId}`),this.completeEl=document.getElementById(`uspw-countdown-complete-${this.campaignId}`),this.hoursBox=this.countdownEl?.querySelector(".uspw-countdown-hours"),this.hoursSep=this.countdownEl?.querySelector(".uspw-countdown-hours-sep"),this.hoursValue=this.countdownEl?.querySelector('[data-unit="hours"]'),this.minutesValue=this.countdownEl?.querySelector('[data-unit="minutes"]'),this.secondsValue=this.countdownEl?.querySelector('[data-unit="seconds"]')}start(){if(!this.countdownEl||!this.endsAtTimestamp)return;this.stop(),this.countdownEl.style.display="block",this.completeEl&&(this.completeEl.style.display="none");const e=()=>{const e=Math.floor(Date.now()/1e3),t=this.endsAtTimestamp-e;if(t<=0)return this.stop(),this.showComplete(),void(this.onComplete&&this.onComplete());this.updateValues(t)};e(),this.interval=setInterval(e,1e3)}stop(){this.interval&&(clearInterval(this.interval),this.interval=null)}pad(e){return e.toString().padStart(2,"0")}updateValues(e){const t=Math.floor(e/3600),s=Math.floor(e%3600/60),o=e%60;t>0?(this.hoursBox&&(this.hoursBox.style.display=""),this.hoursSep&&(this.hoursSep.style.display=""),this.hoursValue&&(this.hoursValue.textContent=this.pad(t))):(this.hoursBox&&(this.hoursBox.style.display="none"),this.hoursSep&&(this.hoursSep.style.display="none")),this.minutesValue&&(this.minutesValue.textContent=this.pad(s)),this.secondsValue&&(this.secondsValue.textContent=this.pad(o))}showComplete(){this.countdownEl&&(this.countdownEl.style.display="none"),this.completeEl&&(this.completeEl.style.display="block")}}class UIManager{constructor(e){this.app=e,this.modalId="uspw-modal-"+(e.config.settings.post_id||"0")}init(){"undefined"!=typeof MicroModal&&MicroModal.init({disableScroll:!0,awaitOpenAnimation:!0,awaitCloseAnimation:!0}),this.app.isPreview&&console.log("%c Spin Wheel: Admin Preview Mode Active. Blocking logic is bypassed for testing. ","background: #4f46e5; color: #fff; border-radius: 4px; padding: 2px 4px;")}openModal(e){console.log(`Spin Wheel: Opening modal (${e})`),MicroModal.show(this.modalId,{onShow:e=>this.onShow(e),onClose:()=>this.onClose(e)})}onShow(e){console.log("Spin Wheel: Modal shown");const t=()=>{const e=document.querySelector(`#uspw-wheel-${this.app.config.settings.post_id}`);e&&e.offsetWidth>0?this.app.wheel.init():requestAnimationFrame(t)};setTimeout(()=>{requestAnimationFrame(t)},50),this.trackImpression(),this.handleAlreadyPlayedState()}handleAlreadyPlayedState(){const e="true"===this.app.storage.get("played"),t="true"===this.app.storage.get("completed");if(!e&&!t||this.app.isPreview)return;const s=this.app.storage.get("play_behavior")||"never",o=parseInt(this.app.storage.get("play_cooldown_expiry")||0),i=Date.now();if(("hours"===s||"days"===s)&&o>0&&i<o){const e=Math.floor(o/1e3);this.showInlineMessage(null,null,{cooldownType:s,cooldownEndsAt:e,remainingSeconds:Math.floor((o-i)/1e3)})}else this.showInlineMessage()}showInlineMessage(e,t,s={}){const o=document.getElementById(this.modalId);if(!o)return;const i=o.querySelector(".uspw-spin-form"),n=o.querySelector(".uspw-title"),a=o.querySelector(".uspw-description"),r=o.querySelector(".uspw-already-played-container"),l=o.querySelector(`#uspw-already-played-title-${this.app.config.settings.post_id}`),p=o.querySelector(`#uspw-already-played-msg-${this.app.config.settings.post_id}`);i&&(i.style.display="none"),n&&(n.style.display="none"),a&&(a.style.display="none"),e&&l&&(l.textContent=e),t&&p&&(p.textContent=t),s.cooldownEndsAt&&"never"!==s.cooldownType&&this.startCountdownTimer(s.cooldownEndsAt),r&&(r.style.display="flex")}startCountdownTimer(e){this.countdownTimer&&this.countdownTimer.stop(),this.countdownTimer=new CountdownTimer({campaignId:this.app.config.settings.post_id,endsAtTimestamp:e,onComplete:()=>{console.log("Spin Wheel: Cooldown expired, user can spin again"),setTimeout(()=>{window.location.reload()},1500)}}),this.countdownTimer.start()}trackImpression(){const e=this.app.config.settings,t=parseInt(e.max_impressions||0),s=parseInt(e.impressions_count||0);if(this.app.isPreview)return void console.log("Spin Wheel: Skipping impression count in preview mode");if(0===t)return void console.log("Spin Wheel: Skipping impression count (unlimited)");if(s>=t)return void console.log("Spin Wheel: Impression limit reached, skipping AJAX");const o=new FormData;o.append("action","ultimate_spin_wheel_sc_imp_count"),o.append("nonce",this.app.config.nonce),o.append("campaign_id",e.post_id),fetch(this.app.config.ajax_url,{method:"POST",body:o}).then(e=>e.json()).then(t=>{t.success&&(console.log("Spin Wheel: Impression counted",t.data.count),e.impressions_count=t.data.count)}).catch(e=>console.error("Spin Wheel: Impression tracking failed",e))}closeModal(){MicroModal.close(this.modalId)}onClose(e){console.log(`Spin Wheel: Modal closed (${e})`),this.app.triggers.displayed=!1,document.activeElement&&document.activeElement instanceof HTMLElement&&document.activeElement.blur(),window.focus();if(!("true"===this.app.storage.get("completed"))||"delayed"===e||"scrolled"===e||"exit"===e){const e=this.app.config.settings,t=e.on_dismiss_behavior||"hours",s=parseInt(e.on_dismiss_hours)||6,o=parseInt(e.on_dismiss_days)||1;this.app.storage.set("dismissed","true",1);let i=0;"hours"===t?i=Date.now()+60*s*60*1e3:"days"===t?i=Date.now()+24*o*60*60*1e3:"session"===t&&(i=0,sessionStorage.setItem(this.app.storage.prefix+"dismissed_session","true")),this.app.storage.set("dismiss_expiry",i),console.log(`Spin Wheel: Dismissed recorded. Behavior: ${t}, Expiry: ${i}`)}}openResultModal(e){const t=this.app.config.settings.post_id,s=`uspw-win-modal-${t}`,o=document.getElementById(s);if(!o)return void console.error("Result modal not found:",s);o.style.display="";const i=o.querySelector(`#uspw-win-heading-${t}`),n=o.querySelector(`#uspw-win-message-${t}`),a=o.querySelector(`#uspw-result-win-content-${t}`),r=o.querySelector(`#uspw-result-label-${t}`),l=o.querySelector(`#uspw-result-code-${t}`),p=o.querySelector(".uspw-result-btn"),c=o.querySelector(".uspw-close-icon"),d=e=>{if(e&&e.preventDefault&&e.preventDefault(),o.classList.remove("is-open"),o.setAttribute("aria-hidden","true"),"undefined"!=typeof MicroModal)try{MicroModal.close(s)}catch(e){}else o.style.display="none"};c&&(c.onclick=d);const h=o.dataset.winTitle||"Congratulations!",u=o.dataset.winMessage||"You won a {{discount_label}} discount!",g=o.dataset.winBtn||"Continue";if(i&&(i.textContent=e.heading||h),n){let t=e.message||u;e.label&&(t=t.replace(/{{discount_label}}/g,e.label)),n.innerHTML=t}a&&(a.style.display="block"),r&&(r.textContent=e.label),l&&(l.textContent=e.code||"");const m=o.querySelector(`#uspw-coupon-box-${t}`);if(m&&(m.style.display=e.code?"flex":"none",m.onclick=e=>{e.stopPropagation();const t=l?l.textContent:"";if(!t)return;const s=()=>{const e=o.querySelector(".uspw-coupon-label");if(e){const t=e.textContent;e.textContent="Copied!",setTimeout(()=>e.textContent=t,2e3)}};if(navigator.clipboard&&navigator.clipboard.writeText)navigator.clipboard.writeText(t).then(s);else{const e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.left="-9999px",e.style.top="0",document.body.appendChild(e),e.focus(),e.select();try{document.execCommand("copy"),s()}catch(e){console.error("Spin Wheel: Fallback copy failed",e)}document.body.removeChild(e)}}),p){p.textContent=g;const t="true"===o.dataset.autoApply,s=o.dataset.redirectUrl;e.code&&t&&(document.cookie=`uspw_apply_coupon=${e.code}; path=/; max-age=3600; SameSite=Lax`),p.onclick=t=>{if(t&&t.preventDefault&&t.preventDefault(),e.code&&(localStorage.setItem("uspw_won_coupon",e.code),localStorage.setItem("uspw_won_label",e.label||"")),d(t),s&&""!==s){let t=s;const o=-1!==t.indexOf("?")?"&":"?";e.code&&(t+=`${o}uspw_coupon=${encodeURIComponent(e.code)}`);try{const e=new URL(t,window.location.origin),s=new URL(window.location.href);e.origin===s.origin&&e.pathname===s.pathname?(window.location.href=t,setTimeout(()=>window.location.reload(),50)):window.location.href=t}catch(e){window.location.href=t}}}}"undefined"!=typeof MicroModal?MicroModal.show(s,{awaitOpenAnimation:!0,awaitCloseAnimation:!0,disableScroll:!0,onShow:()=>{"won"===e.status&&this.app.celebration.trigger(t)}}):(o.classList.add("is-open"),o.setAttribute("aria-hidden","false"),"won"===e.status&&this.app.celebration.trigger(t))}}class WheelManager{constructor(e){this.app=e,this.luckyWheel=null,this.isSpinning=!1,this.serverResult=null}init(){if(this.luckyWheel)return;const e=`#uspw-wheel-${this.app.config.settings.post_id}`;if(!document.querySelector(e))return;this.setupForm();const t=this.app.config,s=t.settings.prizes||[],o=(t.settings.design_settings||{}).wheel||{},i=o.defaultStyle||{fontColor:"#ffffff",fontSize:"14px",fontWeight:"600"},n=s.map((e,t)=>{const s=e.color||e.background||"#333",n=e.fonts||[{text:e.label||"",top:"15%",fontSize:i.fontSize||"14px",fontColor:i.fontColor||"#fff",fontWeight:i.fontWeight||"600"}],a=o.imageStyle||{top:35,width:20,height:20};return{background:s,fonts:n,imgs:e.imgs||(e.image_url?[{src:e.image_url,width:`${a.width||30}%`,top:`${a.top||40}%`}]:[]),data:e}});if("undefined"==typeof LuckyCanvas)return void console.error("Spin Wheel: LuckyCanvas not loaded");console.log("Spin Wheel: Initializing LuckyCanvas on",e);const a="mobile"===this.app.getDeviceType(),r=a?"80vw":"340px",l=a?"80vw":"340px",p=o.blocks||[{padding:"10px",background:"#1a1a2e"},{padding:"10px",background:"#ffffff"},{padding:"3px",background:"#e94560"}],c=o.buttons||[{radius:"40%",background:"#ffffff"},{radius:"35%",background:"#f0f0f0"},{radius:"30%",background:"#e94560",fonts:[{text:"SPIN",top:"-10px",fontSize:"16px",fontWeight:"bold",fontColor:"#fff"}]}];this.luckyWheel=new LuckyCanvas.LuckyWheel(e,{width:r,height:l,blocks:p,prizes:n,buttons:c,defaultStyle:o.defaultStyle||{fontColor:"#ffffff",fontSize:"14px",fontWeight:"600"},start:()=>{this.handleStart()},end:e=>this.onResult(e)})}setupForm(){const e=document.querySelector(".uspw-spin-form");if(!e)return;const t=e.querySelector('input[name="phone"]');if(t){const e=/^[\+]?[0-9]{0,3}\W?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im,s=()=>{const s=t.value.trim();s&&!e.test(s)?t.setCustomValidity(USPW_UI_CONFIG.i18n?.invalid_phone||"Please enter a valid phone number."):t.setCustomValidity("")};t.oninput=s,t.onchange=s}e.onsubmit=t=>{if(t.preventDefault(),!e.checkValidity())return void e.reportValidity();const s=new FormData(e),o={};s.forEach((e,t)=>o[t]=e),this.spin(o)}}handleStart(){if(this.isSpinning)return;const e=document.querySelector(".uspw-spin-form");e?"function"==typeof e.requestSubmit?e.requestSubmit():e.reportValidity()&&e.dispatchEvent(new Event("submit",{cancelable:!0})):this.spin({})}checkIdentity(e){return new Promise(t=>{const s=this.app.config.settings;if("yes"!==s.limit_spin_per_user)return void t({allowed:!0});const o=s.identity_check_type||"email";if("email"===o&&!e.email)return void t({allowed:!0});if("phone"===o&&!e.phone)return void t({allowed:!0});if("both"===o&&!e.email&&!e.phone)return void t({allowed:!0});const i=new FormData;i.append("action","ultimate_spin_wheel_check_identity"),i.append("campaign_id",s.post_id),i.append("nonce",this.app.config.nonce),e.email&&i.append("email",e.email),e.phone&&i.append("phone",e.phone),fetch(this.app.config.ajax_url,{method:"POST",body:i}).then(e=>e.json()).then(e=>{if(e.success)if(e.data.already_played){const s=`uspin_cooldown_${this.app.config.settings.post_id}`;e.data.cooldown_ends_at?localStorage.setItem(s,JSON.stringify({endsAt:e.data.cooldown_ends_at,type:e.data.cooldown_type})):"never"===e.data.cooldown_type&&localStorage.setItem(s,JSON.stringify({endsAt:null,type:"never"})),t({allowed:!1,message:e.data.message,cooldownType:e.data.cooldown_type,cooldownEndsAt:e.data.cooldown_ends_at,remainingSeconds:e.data.remaining_seconds})}else t({allowed:!0});else t({allowed:!0})}).catch(e=>{console.error("Identity check error",e),t({allowed:!0})})})}spin(e){this.checkIdentity(e).then(t=>{if(!t.allowed)return void this.app.ui.showInlineMessage(null,t.message,{cooldownType:t.cooldownType,cooldownEndsAt:t.cooldownEndsAt,remainingSeconds:t.remainingSeconds});if(this.isSpinning||!this.luckyWheel)return;this.isSpinning=!0,this.luckyWheel.play();const s=new FormData;s.append("action","ultimate_spin_wheel_process_spin"),s.append("campaign_id",this.app.config.settings.post_id),s.append("nonce",this.app.config.nonce),e.email&&s.append("email",e.email),e.name&&s.append("name",e.name),e.phone&&s.append("phone",e.phone),e.gdpr_optin&&s.append("optin",e.gdpr_optin),fetch(this.app.config.ajax_url,{method:"POST",body:s}).then(e=>e.json()).then(e=>{e.success?(this.serverResult=e.data,this.luckyWheel.stop(this.serverResult.index)):(this.luckyWheel.stop(0),e.data?.already_played||e.data?.disposable_email?(this.serverResult={status:"error",message:e.data?.message||"Error occurred",showInline:!0},this.app.ui.showInlineMessage(null,e.data.message)):(this.serverResult={status:"error",message:e.data?.message||"Error occurred"},alert(e.data?.message||"Error occurred")))}).catch(e=>{console.error(e),this.luckyWheel.stop(0),this.serverResult={status:"error",message:"Network Error"}})})}onResult(e){if(this.isSpinning=!1,("error"!==this.serverResult?.status||!this.serverResult?.showInline)&&(this.app.ui.closeModal(),this.serverResult&&"error"!==this.serverResult.status)){this.app.ui.openResultModal(this.serverResult);const e=this.app.config.settings,t=e.on_play_behavior||"forever",s=parseInt(e.on_play_days)||30,o=parseInt(e.on_play_hours)||24;this.app.storage.set("played","true"),"forever"===t?this.app.storage.set("play_expiry",Date.now()+31536e7):"days"===t?this.app.storage.set("play_expiry",Date.now()+24*s*60*60*1e3):"hours"===t&&this.app.storage.set("play_expiry",Date.now()+60*o*60*1e3);const i=e.form_settings?.restrictSpinPerUser||{},n=i.cooldownType||"never",a=parseInt(i.cooldownValue||24);this.app.storage.set("play_behavior",n),"hours"===n?this.app.storage.set("play_cooldown_expiry",Date.now()+60*a*60*1e3):"days"===n?this.app.storage.set("play_cooldown_expiry",Date.now()+24*a*60*60*1e3):this.app.storage.remove("play_cooldown_expiry"),"won"===this.serverResult.status&&this.app.storage.set("completed","true")}}}!function(){"use strict";window.SpinWheelApp=new class{constructor(){if(this.config=window.USPW_UI_CONFIG||{},!this.config.settings)return;this.id=this.config.settings.post_id,this.prefix=`uspw_${this.id}_`;const e=new URLSearchParams(window.location.search);this.isPreview="preview"===e.get("spin_wheel"),this.storage=new StorageManager(this.prefix),this.celebration=new CelebrationManager(this),this.ui=new UIManager(this),this.triggers=new TriggerManager(this),this.wheel=new WheelManager(this),this.init()}init(){console.log("Spin Wheel App Initialized"),this.ui.init(),this.triggers.init()}getDeviceType(){return window.innerWidth<768?"mobile":"desktop"}}}(); -
ultimate-spin-wheel/trunk/changelog.txt
r3464555 r3470708 1 == Changelog == 2 3 = 2.0.3 [27th February 2026] = 4 * **Improved:** Outcome Redirect URL improved 5 * **Improved:** Countdown Timer improved 6 7 = 2.0.2 [17th February 2026] = 8 * **Fixed:** Critical security vulnerability resolved 9 * **Fixed:** Pattern Overlay display issue 10 1 11 = 2.0.0 [4th February 2026] = 2 * **New Feature:** Added stunning new Premium Themes (Neon, Gold, Seasonal) for high-converting designs. 3 * **New Feature:** Introduced AI Assistant for specific campaigns to provide smart insights and optimization tips. 4 * **New Feature:** Added "Leads" management system to view and manage captured emails and data directly from the dashboard. 5 * **New Feature:** Implemented "Smart Auto-Coupons" logic for Pro users - automatically generates single-use coupons for winners. 6 * **Enhanced:** Complete UI/UX overhaul for the admin dashboard with a modern, darker aesthetic and better navigation. 7 * **Enhanced:** Improved License Activation system with a dynamic "Get Pro" upgrade path and 30% discount promotion. 8 * **Enhanced:** Refined Pro feature gating (Exit Intent, Scroll Trigger, Phone Field) with clearer "Pro" badges and upgrade prompts. 9 * **Enhanced:** Security improvements including nonce verification on all AJAX actions and better input sanitization. 10 * **Fixed:** Resolved issue where certain Pro AJAX calls were firing without the Pro plugin active. 11 * **Fixed:** Celebration sound URL issue causing playback errors on some servers. 12 * **Fixed:** Responsive design issues on smaller mobile devices for the spin wheel popup. 12 * **Major Update:** Complete New System Rewrite (v2.0) 13 * **New Feature:** Added 10+ Premium Themes (Midnight Royalty, Neon, etc.) 14 * **New Feature:** AI Assistant for smart campaign insights 15 * **New Feature:** Leads Management Dashboard 16 * **New Feature:** Smart Auto-Coupons & Auto-Apply logic 17 * **Improved:** Modern Dark-Mode Admin UI/UX 18 * **Improved:** License Activation & Upgrade path 19 * **Improved:** Exit Intent & Scroll Trigger logic (Pro) 20 * **Improved:** Security (Nonce verification & Sanitization) 21 * **Fixed:** Mobile responsiveness and sound playback issues 13 22 14 = 1.0.0 [20th September 2025] = 15 * **Initial Release:** Powerful spin wheel for WooCommerce. 23 = 1.0.5 [20th January 2026] = 24 * Added: Complete system improvements 25 * Added: Phone number field in leads export (Thanks to Joy) 26 27 = 1.0.4 [1st November 2025] = 28 * Improved: Complete system improvements 29 30 = 1.0.3 [13th August 2025] = 31 * **Initial Release:** Ultimate Spin Wheel 32 * Added: Complete wheel builder with unlimited customization 33 * Added: Advanced targeting and trigger systems 34 * Added: Built-in email capture with CSV export 35 * Added: Comprehensive analytics dashboard 36 * Added: Professional design templates 37 * Added: Mobile-first responsive design 38 * Added: GDPR compliance tools 39 * Added: Gamification psychology features 40 * Added: Lightning-fast performance optimization 41 * Added: Cross-browser compatibility 42 * Added: Anti-spam protection 43 * Added: Multi-wheel campaigns -
ultimate-spin-wheel/trunk/includes/core/themes-default.php
r3464555 r3470708 206 206 </div> 207 207 208 < button class="uspw-close-inline-btn" data-micromodal-close><?php echo esc_html__( 'Close', 'ultimate-spin-wheel' ); ?></button>208 <!-- <button class="uspw-close-inline-btn" data-micromodal-close><?php //echo esc_html__( 'Close', 'ultimate-spin-wheel' ); ?></button> --> 209 209 </div> 210 210 </div> -
ultimate-spin-wheel/trunk/languages/ultimate-spin-wheel.pot
r3464555 r3470708 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Ultimate Spin Wheel - Gamify Your Store & Boost Sales 2.0. 2\n"5 "Project-Id-Version: Ultimate Spin Wheel - Gamify Your Store & Boost Sales 2.0.3\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ultimate-spin-wheel\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-02- 18T17:02:28+00:00\n"12 "POT-Creation-Date: 2026-02-26T21:51:18+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 629 629 msgstr "" 630 630 631 #: includes/core/themes-default.php:208632 msgid "Close"633 msgstr ""634 635 631 #: includes/core/themes-default.php:245 636 632 msgid "Click to Copy" -
ultimate-spin-wheel/trunk/readme.txt
r3464575 r3470708 3 3 Donate link: https://wowdevs.com/plugins/spin-wheel 4 4 Tags: spin wheel, coupon wheel, discount wheel, WooCommerce, prize wheel 5 Stable tag: 2.0. 25 Stable tag: 2.0.3 6 6 Requires PHP: 7.4 7 7 Requires at least: 6.1 … … 189 189 == Changelog == 190 190 191 = 2.0.3 [27th February 2026] = 192 * **Improved:** Outcome Redirect URL improved 193 * **Improved:** Countdown Timer improved 194 191 195 = 2.0.2 [17th February 2026] = 192 196 * **Fixed:** Critical security vulnerability resolved -
ultimate-spin-wheel/trunk/ultimate-spin-wheel.php
r3464555 r3470708 4 4 * Plugin URI: https://wowdevs.com/plugins/spin-wheel 5 5 * Description: The Ultimate Spin Wheel plugin allows you to engage your visitors with an interactive cart that offers coupons and other rewards, seamlessly integrated with WooCommerce. 6 * Version: 2.0. 26 * Version: 2.0.3 7 7 * Requires at least: 6.1 8 8 * Requires PHP: 7.4 … … 27 27 } 28 28 29 define( 'USPIN_WHEEL_VERSION', '2.0. 2' );29 define( 'USPIN_WHEEL_VERSION', '2.0.3' ); 30 30 31 31 define( 'USPIN_WHEEL_NAME', 'Spin Wheel' );
Note: See TracChangeset
for help on using the changeset viewer.