{"product_id":"pusun-pt-smart-tennis-ball-machine-app-control-with-12-built-in-training-modes-6-level-spin-28-pt-75-mph-32-6-lbs-100-ball-5h-battery-portable-for-tennis-padel-training-practice-beginners-to-pros","title":"PUSUN｜PT-Smart Tennis Ball Machine: App Control with 12 Built-in Training Modes,6-Level Spin,28-Pt,75 MPH,32.6 lbs,100+ Ball,5H Battery, Portable, for Tennis\/Padel,Training, Practice,Beginners to Pros","description":"\u003cdiv\u003e\u003cdiv lang=\"en_US\"\u003e\n \u003cdiv class=\"aplus-v2 desktop celwidget\" cel_widget_id=\"aplus\"\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n\n\/**\n * Premium-module 11: FAQs - Common Styles (All Devices)\n *\/\n\n.aplus-v2 .premium-aplus-module-11 {\n    background: #fff;\n    position: relative;\n}\n\n.aplus-v2 .premium-aplus-module-11.aplus-secondary-color {\n    background: #000;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-question,\n.aplus-v2 .premium-aplus-module-11 .aplus-answer {\n    display: block;\n    width: 100%;\n    margin: 0;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-answer {\n    visibility: hidden;\n    opacity: 0;\n    height: 0;\n    transition: display 0.1s linear, opacity 0.1s linear, height 0.1s linear;\n    transition-behavior: allow-discrete;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-active .aplus-answer {\n    visibility: visible;\n    opacity: 1;\n    height: auto;\n    height: calc-size(auto);\n    min-height: 40px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-list {\n    margin: 0;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-block {\n    position: relative;\n    list-style-type: none;\n    cursor: pointer;\n    border: 2px solid #E6E6E6;\n    background: #fff;\n    border-radius: 3px;\n    margin-bottom: 10px;\n}\n\n.aplus-v2 .premium-aplus-module-11.aplus-secondary-color .faq-block {\n    border: none;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-question::before,\n.aplus-v2 .premium-aplus-module-11 .aplus-answer::before {\n    text-align: center;\n    border-radius: 3px;\n    display: inline-block;\n    font-weight: 500;\n    position: absolute;\n    color: #fff;\n    top: 10px;\n    left: 10px;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-11 .aplus-question::before,\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-11 .aplus-answer::before {\n    right: 10px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-question::before {\n    content: \"Q\";\n    background: #505050;\n    transition: background 0.1s linear;\n    z-index: 2;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-answer::before {\n    content: \"A\";\n    background: #DF7600;\n    color: #000000;\n    z-index: 1;\n    transform: translateY(0px);\n    transition: transform 0.1s linear;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-block.aplus-active .aplus-question::before {\n    background: #404040;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-block.aplus-active .aplus-answer::before {\n    transform: translateY(40px);\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-arrow {\n    position: absolute;\n    top: 25px;\n    border: 10px solid transparent;\n    border-top-color: #505050;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-11 .faq-arrow {\n    right: auto;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-active .faq-arrow {\n    top: 15px;\n    border-top-color: transparent;\n    border-bottom-color: #404040;\n}\n\n\u003c\/style\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n\n.aplus-v2 .premium-aplus-module-2 .premium-background-wrapper {\n    position: relative;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper {\n    position: absolute;\n    width: 50%;\n    height: 100%;\n    top: 0;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.right {\n    left: 50%;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.right {\n    left: auto;\n    right: 50%;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.secondary-color {\n    color: #fff;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background {\n    padding: 20px;\n}\n\n.aplus-v2 .premium-aplus-module-2 .aplus-module-2-topic {\n    padding-bottom: 10px;\n}\n\n.aplus-v2 .premium-aplus-module-2 .aplus-module-2-heading {\n    padding-bottom: 20px;\n}\n\n.aplus-v2 .premium-aplus-module-2 .aplus-module-2-description {\n    line-height: 1.5em;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.white-background {\n    background: rgba(255,255,255,0.5);\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background {\n    background: rgba(0,0,0,0.5);\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background h1,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background h5,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background ol,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background ul,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background ol .a-list-item,\n.aplus-v2 .premium-aplus-module-2 .premium-intro-background.black-background ul .a-list-item {\n  color: #fff;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-content-container {\n    display: table;\n    height: 100%;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.left .premium-intro-content-container {\n    padding-left: 40px;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.left .premium-intro-content-container {\n\tpadding-left: 0px;\n\tpadding-right: 40px;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.right .premium-intro-content-container {\n    padding-right: 40px;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-2 .premium-intro-wrapper.right .premium-intro-content-container {\n    padding-right: 0px;\n    padding-left: 40px;\n}\n\n.aplus-v2 .premium-aplus-module-2 .premium-intro-content-column {\n    display: table-cell;\n    vertical-align: middle;\n}\n\n\n\u003c\/style\u003e\n  \u003cscript type=\"application\/javascript\"\u003e\n\n    \/**\n     * Common event handler for click and keydown events.\n     * @param {Event} event - The event object.\n     * @param {Function} handleClickOrEnter - Function to handle click or Enter key events.\n     * @param {Function} handleEsc - Function to handle Esc key events.\n     *\/\n    \/\/ [TODO][AplusMantle-8064] Create common event handler util(key events, click events) in AplusModuleResources\n    function handleClickAndKeyEvents(event, handleClickOrEnterOrSpace) {\n        const ENTER_KEY_CODE = 13;\n        const ESCAPE_KEY_CODE = 27;\n        const SPACE_KEY_CODE = 32;\n        const isClick = event.type === 'click';\n        const isKeydown = event.type === 'keydown';\n        const isEnter = isKeydown \u0026\u0026 event.keyCode === ENTER_KEY_CODE;\n        const isSpace = isKeydown \u0026\u0026 event.keyCode === SPACE_KEY_CODE;\n        const isEsc = isKeydown \u0026\u0026 event.keyCode === ESCAPE_KEY_CODE;\n\n        if (isClick || isEnter || isSpace) {\n            handleClickOrEnterOrSpace();\n        } else if (isEsc) {\n            handleEsc(event);\n        }\n    }\n\n    \/**\n    * Function to handle esc key event.\n    * @param {Event} event - The event object.\n    *\/\n    function handleEsc(event) {\n        event.target.blur()  \/\/ force remove focus\n    }\n\n\u003c\/script\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n\n\/**\n * Premium modules global styles\n *\/\n.aplus-v2.desktop {\n  max-width: 1464px;\n  min-width: 800px;\n  margin-left: auto;\n  margin-right: auto;\n  word-wrap: break-word;\n  overflow-wrap: break-word;\n  word-break: break-word;\n}\n\/* Undo this for tech-specs because it breaks table layout *\/\n.aplus-v2.desktop .premium-aplus .aplus-tech-spec-table { word-break: initial; }\n\n.aplus-v2 .premium-aplus,\n.aplus-v2 .premium-aplus .aplus-h1,\n.aplus-v2 .premium-aplus .aplus-h2,\n.aplus-v2 .premium-aplus .aplus-p1,\n.aplus-v2 .premium-aplus .aplus-p2,\n.aplus-v2 .premium-aplus .aplus-p3,\n.aplus-v2 .premium-aplus .aplus-accent1,\n.aplus-v2 .premium-aplus .aplus-accent2\n{ font-family: Arial, sans-serif; }\n\n.aplus-v2 .premium-aplus,\n.aplus-v2 .premium-aplus .aplus-h1,\n.aplus-v2 .premium-aplus .aplus-h2,\n.aplus-v2 .premium-aplus .aplus-p1,\n.aplus-v2 .premium-aplus .aplus-p2,\n.aplus-v2 .premium-aplus .aplus-p3,\n.aplus-v2 .premium-aplus .aplus-accent1,\n.aplus-v2 .premium-aplus .aplus-accent2\n{ font-family: inherit; }\n\n\/* type *\/\n.aplus-v2 .premium-aplus .aplus-h1 { font-size: 32px; line-height: 1.2em; font-weight: 500; }\n.aplus-v2 .premium-aplus .aplus-h2 { font-size: 26px; line-height: 1.25em; font-weight: 500; }\n.aplus-v2 .premium-aplus .aplus-h3 { font-size: 18px; line-height: 1.25em; font-weight: 500; }\n.aplus-v2 .premium-aplus .aplus-p1 { font-size: 20px; line-height: 1.3em; font-weight: 300; }\n.aplus-v2 .premium-aplus .aplus-p2 { font-size: 16px; line-height: 1.4em; font-weight: 300; }\n.aplus-v2 .premium-aplus .aplus-p3 { font-size: 14px; line-height: 1.4em; font-weight: 300; }\n.aplus-v2 .premium-aplus .aplus-accent1 { font-size: 16px; line-height: 1.4em; font-weight: 600; }\n.aplus-v2 .premium-aplus .aplus-accent2 { font-size: 14px; line-height: 1.4em; font-weight: 600; }\n\n\/* spacing *\/\n.aplus-v2 .aplus-container-1 { padding: 40px; }\n.aplus-v2 .aplus-container-1-2 { padding: 40px 80px; }\n.aplus-v2 .aplus-container-2 { padding: 80px; }\n.aplus-v2 .aplus-container-3 { padding: 40px 0; }\n\n\/* Display *\/\n.aplus-v2 .premium-aplus .aplus-display-table { display: table; }\n.aplus-v2 .premium-aplus .aplus-display-table-cell { display: table-cell; }\n.aplus-v2 .premium-aplus .aplus-display-inline-block { display: inline-block; }\n\n\/* Aplus display table with min-width 1000px and fill remaining space inside parent *\/\n.aplus-v2.desktop .premium-aplus .aplus-display-table-width { min-width: 1000px; width: 100% }\n\n\/**\n* Padding and margin for element should be 10, 20, 40, or 80 px. Considering mini 10, small 20, medium 40, large 80.\n*\/\n\n\u003c\/style\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n\n\/**\n * Premium-module 11: FAQs\n *\/\n\n.aplus-v2 .premium-aplus-module-11 .aplus-question {\n    line-height: 25px;\n    padding-bottom: 10px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-block {\n    padding: 10px 80px 15px 100px;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-11 .faq-block {\n    padding-left: 80px;\n    padding-right: 100px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-block.aplus-active {\n    padding-bottom: 35px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .aplus-question::before,\n.aplus-v2 .premium-aplus-module-11 .aplus-answer::before {\n    width: 80px;\n    line-height: 40px;\n    font-size: 25px;\n}\n\n.aplus-v2 .premium-aplus-module-11 .faq-arrow {\n    right: 40px;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-11 .faq-arrow {\n    left: 40px;\n}\n\n\u003c\/style\u003e\n  \u003cscript type=\"text\/javascript\"\u003e(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\nP.now('premium-module-11-faq').execute('init-premium-module-11-faq', function(init) {\n    if (init) {\n        return;\n    }\n    P.register('premium-module-11-faq', function() {\n        return function() {\n            P.when('A', 'jQuery', 'ready').execute('premium-11-faq', function(A, $){\n                function initFaq(module) {                   \n                    const MODULE_CLASS_NAME = 'premium-aplus-module-11';\n                    const FAQ_CONTAINER_CLASS_NAME = 'faqs-container';\n                    const FAQ_BLOCK_CLASS_NAME = 'faq-block';\n                    const moduleId = $(module).data('faq-block');\n                    const $faqBlocks = $('.aplus-v2 .' + MODULE_CLASS_NAME + ' .' + FAQ_CONTAINER_CLASS_NAME + '.' + moduleId + ' .' + FAQ_BLOCK_CLASS_NAME);\n\n                    \/**\n                    * Function to handle click or Enter or Space key events.\n                    * @param {Element} element - The this object from which the event is dispatched\n                    * @param {faqBlocks} faqBlocks - List of all the Question and Answer blocks.\n                    *\/\n                    function handleClickOrEnterOrSpace(element, faqBlocks) {\n                        const $element = $(element);\n                        const isActive = $element.hasClass('aplus-active');\n\n                        faqBlocks.removeClass('aplus-active');\n                        faqBlocks.find('[data-faq-question]').attr('aria-expanded', 'false');\n\n                        if (!isActive) {\n                            $element.addClass('aplus-active');\n                            $element.find('[data-faq-question]').attr('aria-expanded', 'true');\n                        }\n                    }\n\n                    \/* Using jQuery event namespace for preventing duplicate binding on twister refresh *\/\n                    $faqBlocks.unbind('click keydown.premiumAplusModule11ClickHandler').bind('click keydown.premiumAplusModule11ClickHandler', function(event) {\n                        handleClickAndKeyEvents(event, () =\u003e handleClickOrEnterOrSpace(this, $faqBlocks)); \n                    });\n                }\n                $(\".aplus-v2 .premium-aplus-module-11 .faqs-container\").each(function(index, module) {\n                    initFaq(module);\n                });\n            });\n        };\n    });\n});\n}));\u003c\/script\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n\n\/**\n * Premium-module 12: Nav Carousel\n *\/\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-card {\n    position: relative;\n    width: 100%;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-container {\n    position: relative;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-image-carousel-container {\n    \/* Match the aspect ratio of the desktop image uploaded via the editor (1464px x 600px) *\/\n    padding-top: calc(600 \/ 1464 * 100%); \/* ~40.983% *\/\n    height: 0;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-image-carousel-container \u003e div {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n}\n\n\/* Override AUI styles. It poorly attempts to measure the slide heights before waiting until images load. *\/\n.aplus-v2 .premium-aplus-module-12 .a-carousel-viewport {\n    height: 100% !important;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-card-image img {\n    width: 100%;\n    height: auto;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-card-details-wrapper {\n    position: absolute;\n    top: 0;\n    width: 50%;\n    height: 100%;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-card-detail {\n    display: table;\n    width: 100%;\n    height: 100%\n}\n\n.aplus-v2 .premium-aplus-module-12 .card-description {\n    text-align: left;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-12 .card-description {\n    text-align: right;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-table-cell {\n    display: table-cell;\n    vertical-align: middle;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background {\n    padding: 20px;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color {\n    background: rgba(0, 0, 0, 0.5);\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color h1,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color h5,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color ol,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color ul,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color ol .a-list-item,\n.aplus-v2 .premium-aplus-module-12 .aplus-text-background-color ul .a-list-item {\n    color: #fff;\n}\n\n.aplus-v2 .premium-aplus-module-12 .description {\n    margin-top: 20px;\n}\n\n\/* nav *\/\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions {\n    position: absolute;\n    top: 20px;\n    width: 100%;\n    text-align: center;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn {\n    display: inline-block;\n    margin: 7px 10px;\n    cursor: pointer;\n    border-radius: 30px;\n    border: 2px solid #000;\n    line-height: 2.5em;\n    min-width: 200px;\n    background-color: #fff;\n    white-space: nowrap;\n    color: #000;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-index {\n    display: none;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.aplus-active {\n    border-color: #fff;\n    background-color: #000;\n    color: #fff;\n}\n\n\/**\n * Regimen template specific css\n *\/\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.regimen {\n    text-align: right;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions.regimen {\n    text-align: right;\n    top: 50%;\n    width: 250px;\n    right: 75px;\n    -webkit-transform: translateY(-50%);\n    -moz-transform: translateY(-50%);\n    -o-transform: translateY(-50%);\n    transform: translateY(-50%);\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions.regimen {\n    text-align: left;\n    top: 50%;\n    left: 75px;\n    right: auto;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.regimen {\n    display: inline-block;\n    margin: 10px 10px;\n    cursor: pointer;\n    border-radius: 30px;\n    border: 2px solid #000;\n    width: 220px;\n    background-color: #fff;\n    padding: 2px 0 2px;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.regimen.aplus-active {\n    border-color: #fff;\n    background-color: #000;\n    color: #fff;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.regimen.aplus-active .aplus-carousel-index {\n    color: inherit;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-goto-btn.regimen.aplus-active .aplus-carousel-label {\n    color: inherit;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions .regimen .aplus-carousel-index {\n    display: inline-block;\n    width: 12px;\n    color: #000;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions .regimen .aplus-carousel-label {\n    color: #000;\n}\n\nhtml[dir=\"rtl\"] .aplus-v2 .premium-aplus-module-12 .aplus-carousel-actions .regimen .aplus-carousel-index {\n    margin-left: 0px;\n    margin-right: 6px;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-headline-top.regimen {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    background-color: #000;\n    opacity: 0.5;\n    text-align: center;\n}\n\n.aplus-v2 .premium-aplus-module-12 .aplus-headline-top.regimen .aplus-headline {\n    color: #fff;\n    line-height: 2em;\n}\n\n\/**\n * Navigation template specific css\n *\/\n\n.aplus-v2 .premium-aplus-module-12--top-nav .aplus-carousel-actions {\n    background-color: rgba(0, 0, 0, 0.8);\n    top: 0px;\n}\n\n.aplus-v2 .premium-aplus-module-12--top-nav .aplus-goto-btn {\n    padding: 8px;\n    color: #fff;\n    background-color: transparent;\n    border: none;\n}\n\n.aplus-v2 .premium-aplus-module-12--top-nav .aplus-goto-btn.aplus-active {\n    text-decoration: underline;\n    text-underline-offset: 0.8em;\n    text-decoration-thickness: 3px;\n    background-color: transparent;\n    border: none;\n}\n\u003c\/style\u003e\n  \u003cscript type=\"text\/javascript\"\u003e(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\nP.now('premium-module-12-nav-carousel').execute('init-premium-module-12-nav-carousel', function(init) {\n    if (init) {\n        return;\n    }\n    P.register('premium-module-12-nav-carousel', function(){\n        return function() {\n            P.when('A', 'jQuery', 'a-carousel-framework', 'ready').execute('premium-12-nav-carousel', function (A, $, framework) {\n                function initiateCarousel(module) {\n                    var MODULE_ID = $(module).data('module-id');\n                    \/**\n                    * Carousel button element classname\n                    * @const\n                    *\/\n                    var GOTO_BTN_CLASS_NAME = \"aplus-goto-btn-\" + MODULE_ID;\n                    \/**\n                    * Carousel button element active classname\n                    * @const\n                    *\/\n                    var GOTO_BTN_ACTIVE_CLASS_NAME = \"aplus-active\";\n                    \/**\n                    * AUI name for aui carousel\n                    * @const\n                    *\/\n                    var CAROUSEL_NAME = \"premium-aplus-12-carousel-\" + MODULE_ID;\n                    \/**\n                    * Module class name\n                    * @const\n                    *\/\n                    var MODULE_CLASS_NAME = \".aplus-v2 .premium-aplus-module-12\";\n                    \/**\n                    * Carousel text container class name\n                    * @const\n                    *\/\n                    var TEXT_CONTAINER_CLASS_NAME = MODULE_CLASS_NAME + \" .aplus-carousel-text-container-\" + MODULE_ID;\n                    \/**\n                    * Carousel text hidden class name\n                    * @const\n                    *\/\n                    var TEXT_CONTAINER_HIDDEN = \"aplus-hidden\";\n                    \/**\n                    * Carousel horizontal scroll container class name\n                    * @const\n                    *\/\n                    var HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME = MODULE_CLASS_NAME + \" .aplus-horizontal-scroll-container-\" + MODULE_ID;\n\n                    function showCarouselText(oldIndex, newIndex) {\n                        var oldClass = TEXT_CONTAINER_CLASS_NAME + \"-\" + oldIndex;\n                        var newClass= TEXT_CONTAINER_CLASS_NAME + \"-\" + newIndex;\n                        $(oldClass).addClass(TEXT_CONTAINER_HIDDEN);\n                        $(newClass).removeClass(TEXT_CONTAINER_HIDDEN);\n                    }\n\n                    function scrollToCarouselButton(scrollLeft) {\n                        if ($(HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME).length) {\n                            $(HORIZONTAL_SCROLL_CONTAINER_CLASS_NAME).animate({scrollLeft}, 200);\n                        }\n                    }\n\n                    \/**\n                    * Creates a CarouselButton class for provided carousel instance\n                    * @param {object} carousel - AUI Carousel instance\n                    * @returns {Class} - CarouselButton Class\n                    *\/\n                    function CarouselButtonTemplate(carousel) {\n                        \/**\n                        * Button for controlling the active slide\n                        * @constructor\n                        * @param {number} index - slide index\n                        * @param {DOMElement} [elem] - optional DOM element to use as this objects DOM representation\n                        *\/\n                        function CarouselButton(index, elem) {\n                            var self = this;\n                            this.index = index;\n                            this.carousel = carousel;\n\n                            \/* create the button element *\/\n                            this.elem = this.getElem(elem);\n                            this.$elem = $(this.elem);  \/* store jquery version *\/\n                            this.elem.addEventListener('click', self.handleClick.bind(self));\n                            this.elem.setAttribute('role', 'tab');\n\n                            \/* add this object to the object manager *\/\n                            CarouselButton.objects.byId[index] = this;\n                            CarouselButton.objects.all.push(this);\n                        }\n\n                        \/**\n                        * Describe behavior for click events on this.elem\n                        * @memberOf CarouselButton\n                        *\/\n                        CarouselButton.prototype.handleClick = function(e) {\n                            e.preventDefault();\n                            this.carousel.gotoPage(this.index);\n                        };\n\n                        \/**\n                        * Enter active state\n                        * @memberOf CarouselButton\n                        *\/\n                        CarouselButton.prototype.activate = function() {\n                            this.$elem.addClass(GOTO_BTN_ACTIVE_CLASS_NAME).attr('aria-selected', 'true');\n                        };\n\n                        \/**\n                        * Enter inactive state\n                        * @memberOf CarouselButton\n                        *\/\n                        CarouselButton.prototype.deactivate = function() {\n                            this.$elem.removeClass(GOTO_BTN_ACTIVE_CLASS_NAME).attr('aria-selected', 'false');\n                        };\n\n                        \/**\n                        * Returns an existing or creates a new bound element for this object\n                        * @memberOf CarouselButton\n                        * @param {DOMElement} [elem] - optionally provide an existing element in the DOM to use\n                        * @returns {DOMElement} - this objects DOM representation\n                        *\/\n                        CarouselButton.prototype.getElem = function(elem) {\n                            if (this.elem) return this.elem;\n                            if (elem) return elem;\n\n                            var createdElem = document.createElement('span');\n                            createdElem.className = GOTO_BTN_CLASS_NAME;\n\n                            return createdElem;\n                        };\n\n                        \/** @const Object manager *\/\n                        CarouselButton.objects = {\n                            byId: {},\n                            all: [],\n                        };\n\n                        return CarouselButton;\n                    }\n\n                    framework.onInit(CAROUSEL_NAME, function(carousel) {\n                        \/** @const {Class} *\/\n                        var CarouselButton = CarouselButtonTemplate(carousel);\n\n                        \/* create carousel controls *\/\n                        var $carouselBtns = $(safeClassSelector(GOTO_BTN_CLASS_NAME));\n                        var btns = $carouselBtns.map(function(i, btnElem) {\n                            return new CarouselButton(i + 1, btnElem);\n                        });\n\n                        \/* activate first one *\/\n                        CarouselButton.objects.byId[1].activate();\n\n                        \/* Listen to slide changes *\/\n                        A.on(\"a:carousel:\" + CAROUSEL_NAME + \":change:pageNumber\", function (data) {\n                            var newCarouselButton = CarouselButton.objects.byId[data.newValue];\n                            var marginLeft = parseInt(getComputedStyle(newCarouselButton.elem).getPropertyValue('margin-left'));\n                            var positionLeft = newCarouselButton.elem.offsetLeft - marginLeft;\n\n                            newCarouselButton.activate();\n                            CarouselButton.objects.byId[data.oldValue].deactivate();\n                            scrollToCarouselButton(positionLeft);\n                            showCarouselText(data.oldValue, data.newValue);\n                        });\n                    });\n\n                    \/**\n                    * @returns {string} - css classname prefixed with module selector\n                    *\/\n                    function safeClassSelector(className) {\n                        return '.' + MODULE_CLASS_NAME + ' .' + className;\n                    }\n                }\n\n                $('.aplus-v2 .premium-aplus-module-12 .aplus-carousel-container').each(function (index, module) {\n                    initiateCarousel(module);\n                });\n                framework.createAll();\n                framework.initializeAll();\n            });\n        }\n    })\n});\n}));\u003c\/script\u003e\n  \u003cdiv class=\"aplus-content-wrapper\"\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e\n     \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e\n      \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e\n       \u003cimg alt=\"PUSUN tennis ball machine banner: \u0026amp;amp;#34;Step Onto the Court with Confidence.\" class=\"a-lazy-loaded\" data-src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/78dfd9bb-2dcb-4bd4-ba4b-f6ae15e62806.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/78dfd9bb-2dcb-4bd4-ba4b-f6ae15e62806.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003cnoscript\u003e\n        \u003cimg alt=\"PUSUN tennis ball machine banner: \u0026amp;amp;#34;Step Onto the Court with Confidence.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/78dfd9bb-2dcb-4bd4-ba4b-f6ae15e62806.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003c\/noscript\u003e\n      \u003c\/div\u003e\n     \u003c\/div\u003e\n     \u003cdiv class=\"a-section a-text-center\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n   \u003c\/div\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e\n     \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e\n      \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e\n       \u003cimg alt=\"PUSUN tennis ball machine banner: \u0026amp;amp;#34;A program for every player. 12 smart modes.\" class=\"a-lazy-loaded\" data-src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/cca3b0a5-8b29-4b1b-90f4-9a2be4636ceb.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/cca3b0a5-8b29-4b1b-90f4-9a2be4636ceb.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003cnoscript\u003e\n        \u003cimg alt=\"PUSUN tennis ball machine banner: \u0026amp;amp;#34;A program for every player. 12 smart modes.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/cca3b0a5-8b29-4b1b-90f4-9a2be4636ceb.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003c\/noscript\u003e\n      \u003c\/div\u003e\n     \u003c\/div\u003e\n     \u003cdiv class=\"a-section a-text-center\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n   \u003c\/div\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e\n     \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e\n      \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e\n       \u003cimg alt=\"PUSUN tennis machine features banner: \u0026amp;amp;#34;Simple to Use. Built to Last.\u0026amp;amp;#34;\" class=\"a-lazy-loaded\" data-src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/1c6c7a72-fd93-4814-9c81-6f7d62c40930.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/1c6c7a72-fd93-4814-9c81-6f7d62c40930.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003cnoscript\u003e\n        \u003cimg alt=\"PUSUN tennis machine features banner: \u0026amp;amp;#34;Simple to Use. Built to Last.\u0026amp;amp;#34;\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/1c6c7a72-fd93-4814-9c81-6f7d62c40930.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003c\/noscript\u003e\n      \u003c\/div\u003e\n     \u003c\/div\u003e\n     \u003cdiv class=\"a-section a-text-center\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n   \u003c\/div\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-12-nav-carousel aplus-premium\" cel_widget_id=\"aplus-premium-module-12-nav-carousel\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-12 premium-aplus-module-12--top-nav\"\u003e\n     \u003cdiv data-module-id=\"3\" class=\"a-section a-spacing-none aplus-carousel-container\"\u003e\n      \u003cdiv id=\"premium-aplus-12-carousel-3-id\" data-a-carousel-options='{\"peek_percentage\":0,\"minimum_gutter_width\":0,\"show_partial_next\":false,\"name\":\"premium-aplus-12-carousel-3\"}' aria-label=\"Featured content carousel\" aria-roledescription=\"carousel\" data-a-display-strategy=\"single\" data-a-transition-strategy=\"slideCircular\" role=\"region\" class=\"a-begin a-carousel-container a-carousel-static a-carousel-display-single a-carousel-transition-slideCircular aplus-image-carousel-container\"\u003e\n       \u003cinput autocomplete=\"on\" type=\"hidden\" class=\"a-carousel-firstvisibleitem\"\u003e\n       \u003cdiv class=\"a-row a-carousel-controls a-carousel-row a-carousel-has-buttons a-carousel-overlay-buttons a-carousel-rounded-buttons\"\u003e\n        \u003cdiv class=\"a-carousel-row-inner\"\u003e\n         \u003cdiv class=\"a-carousel-col a-carousel-left\"\u003e\n          \u003ca class=\"a-carousel-goto-prevpage\" role=\"button\" href=\"#\"\u003e\u003ci class=\"a-icon a-icon-previous-rounded\"\u003e\u003cspan class=\"a-icon-alt\"\u003ePrevious page\u003c\/span\u003e\u003c\/i\u003e\u003c\/a\u003e\n         \u003c\/div\u003e\n         \u003cdiv class=\"a-carousel-col a-carousel-center\"\u003e\n          \u003cdiv class=\"a-carousel-viewport\" aria-roledescription=\"slide\"\u003e\n           \u003col class=\"a-carousel\" role=\"list\"\u003e\n            \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-card\" aria-setsize=\"4\"\u003e\n             \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e\n              \u003cimg alt=\"PUSUN PT-Smart tennis ball machine vs competitors feature comparison banner.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/f72ae544-42d3-48ba-9dfb-cd531173d167.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n             \u003c\/div\u003e\n            \u003c\/li\u003e\n            \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-card\" aria-setsize=\"4\"\u003e\n             \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e\n              \u003cimg alt=\"PUSUN tennis machine banner: \u0026amp;amp;#34;12-in-1 Smart Modes – Full Court, Full Control.\u0026amp;amp;#34;\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/e6880ade-de52-4a59-8ead-9dea295137b4.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n             \u003c\/div\u003e\n            \u003c\/li\u003e\n            \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-card\" aria-setsize=\"4\"\u003e\n             \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e\n              \u003cimg alt=\"PUSUN tennis ball machine dimensions and foldable design for easy car trunk transport. (89 个字符)\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/995d5a71-ad6c-40a5-bfef-814dc1e2b729.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n             \u003c\/div\u003e\n            \u003c\/li\u003e\n            \u003cli aria-roledescription=\"slide\" class=\"a-carousel-card aplus-carousel-card\" aria-setsize=\"4\"\u003e\n             \u003cdiv class=\"a-section a-spacing-none aplus-card-image\"\u003e\n              \u003cimg alt=\"PUSUN tennis ball machine diagram showing premium ABS \u0026amp;amp;amp; metal build and internal components.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/a17f1758-fc82-4997-a26c-d724124320f5.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n             \u003c\/div\u003e\n            \u003c\/li\u003e\n           \u003c\/ol\u003e\n          \u003c\/div\u003e\n         \u003c\/div\u003e\n         \u003cdiv class=\"a-carousel-col a-carousel-right\"\u003e\n          \u003ca class=\"a-carousel-goto-nextpage\" role=\"button\" href=\"#\"\u003e\u003ci class=\"a-icon a-icon-next-rounded\"\u003e\u003cspan class=\"a-icon-alt\"\u003eNext page\u003c\/span\u003e\u003c\/i\u003e\u003c\/a\u003e\n         \u003c\/div\u003e\n        \u003c\/div\u003e\n       \u003c\/div\u003e\n       \u003cspan class=\"a-end aok-hidden\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv id=\"aplus-carousel-actions-3\" aria-label=\"tablist section\" class=\"a-section aplus-carousel-actions\" role=\"tablist\"\u003e\n       \u003cbutton class=\"aplus-goto-btn aplus-goto-btn-3 aplus-active\" role=\"tab\" tabindex=\"0\" aria-selected=\"true\"\u003e\u003cspan class=\"aplus-carousel-index\"\u003e1\u003c\/span\u003e \u003cspan class=\"aplus-accent2 aplus-carousel-label\"\u003eWhy Choose PUSUN PT-Smart\u003c\/span\u003e\u003c\/button\u003e\n       \u003cbutton class=\"aplus-goto-btn aplus-goto-btn-3 \" role=\"tab\" tabindex=\"0\" aria-selected=\"false\"\u003e\u003cspan class=\"aplus-carousel-index\"\u003e2\u003c\/span\u003e \u003cspan class=\"aplus-accent2 aplus-carousel-label\"\u003e12-in-1 Training Modes\u003c\/span\u003e\u003c\/button\u003e\n       \u003cbutton class=\"aplus-goto-btn aplus-goto-btn-3 \" role=\"tab\" tabindex=\"0\" aria-selected=\"false\"\u003e\u003cspan class=\"aplus-carousel-index\"\u003e3\u003c\/span\u003e \u003cspan class=\"aplus-accent2 aplus-carousel-label\"\u003eUltra-Portable Powerhouse\u003c\/span\u003e\u003c\/button\u003e\n       \u003cbutton class=\"aplus-goto-btn aplus-goto-btn-3 \" role=\"tab\" tabindex=\"0\" aria-selected=\"false\"\u003e\u003cspan class=\"aplus-carousel-index\"\u003e4\u003c\/span\u003e \u003cspan class=\"aplus-accent2 aplus-carousel-label\"\u003eMaterials \u0026amp; Build\u003c\/span\u003e\u003c\/button\u003e\n      \u003c\/div\u003e\n     \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cscript type=\"text\/javascript\"\u003e(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\n    P.when('premium-module-12-nav-carousel').execute('invoke-premium-12-nav-carousel-desktop-top', function(init){\n        init();\n    });\n}));\u003c\/script\u003e\n   \u003c\/div\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-2-fullbackground-image aplus-premium\" cel_widget_id=\"aplus-premium-module-2-fullbackground-image\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-2\"\u003e\n     \u003cdiv class=\"a-section a-spacing-none premium-background-wrapper\"\u003e\n      \u003cdiv class=\"a-section a-spacing-none background-image\"\u003e\n       \u003cimg alt=\"PUSUN PT-Smart tennis machine feature grid displaying three colors and specifications.\" class=\"a-lazy-loaded\" data-src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/394a89e9-5ed4-4b3d-a911-6080b028ebdd.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/394a89e9-5ed4-4b3d-a911-6080b028ebdd.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003cnoscript\u003e\n        \u003cimg alt=\"PUSUN PT-Smart tennis machine feature grid displaying three colors and specifications.\" src=\"https:\/\/m.media-amazon.com\/images\/S\/aplus-media-library-service-media\/394a89e9-5ed4-4b3d-a911-6080b028ebdd.__CR0,0,2928,1200_PT0_SX1464_V1___.jpg\"\u003e\n       \u003c\/noscript\u003e\n      \u003c\/div\u003e\n     \u003c\/div\u003e\n     \u003cdiv class=\"a-section a-text-center\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n   \u003c\/div\u003e\n   \u003cdiv class=\"celwidget aplus-module premium-module-11-faq aplus-premium\" cel_widget_id=\"aplus-premium-module-11-faq\"\u003e\n    \u003cdiv class=\"a-section a-spacing-none premium-aplus premium-aplus-module-11\"\u003e\n     \u003cdiv data-faq-block=\"5\" class=\"a-section a-spacing-none aplus-container-2 faqs-container 5\"\u003e\n      \u003cul class=\"faq-list\"\u003e\n       \u003cli id=\"faq-qa-pair-0\" class=\"faq-block\"\u003e\n        \u003ch3\u003e\u003cspan data-faq-question role=\"button\" tabindex=\"0\" aria-controls=\"faq-0\" aria-expanded=\"false\"\u003e \n          \u003cp class=\"aplus-question aplus-p1\"\u003eQ1: How is the battery designed? Do I need to haul the heavy machine around to charge it?\u003c\/p\u003e \n          \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e \n         \u003c\/span\u003e\u003c\/h3\u003e\n        \u003cp class=\"aplus-answer aplus-p2\"\u003eNo. Features an external LiFePO4 pack. Leave the machine in your trunk and charge the battery separately. Our tech slows down mid-session voltage drops, ensuring consistent power and ball speed.\u003c\/p\u003e\n       \u003c\/li\u003e\n       \u003cli id=\"faq-qa-pair-1\" class=\"faq-block\"\u003e\n        \u003ch3\u003e\u003cspan data-faq-question role=\"button\" tabindex=\"0\" aria-controls=\"faq-1\" aria-expanded=\"false\"\u003e \n          \u003cp class=\"aplus-question aplus-p1\"\u003eQ2: Is the App connection stable on the court, and where can I download it?\u003c\/p\u003e \n          \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e \n         \u003c\/span\u003e\u003c\/h3\u003e\n        \u003cp class=\"aplus-answer aplus-p2\"\u003eA: Highly stable. Equipped with a long-range wireless module covering the full court. Simply download the official app by searching \"PUSUN TENNIS\" on the Apple App Store or Google Play Store.\u003c\/p\u003e\n       \u003c\/li\u003e\n       \u003cli id=\"faq-qa-pair-2\" class=\"faq-block\"\u003e\n        \u003ch3\u003e\u003cspan data-faq-question role=\"button\" tabindex=\"0\" aria-controls=\"faq-2\" aria-expanded=\"false\"\u003e \n          \u003cp class=\"aplus-question aplus-p1\"\u003eQ3: Does the machine jam frequently, and what types of tennis balls can I use?\u003c\/p\u003e \n          \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e \n         \u003c\/span\u003e\u003c\/h3\u003e\n        \u003cp class=\"aplus-answer aplus-p2\"\u003eA: Our internal feeding wheel minimizes jamming. While no machine guarantees 100% zero jams, it is extremely rare. Fully compatible with standard pressurized and heavy-duty pressureless balls.\u003c\/p\u003e\n       \u003c\/li\u003e\n       \u003cli id=\"faq-qa-pair-3\" class=\"faq-block\"\u003e\n        \u003ch3\u003e\u003cspan data-faq-question role=\"button\" tabindex=\"0\" aria-controls=\"faq-3\" aria-expanded=\"false\"\u003e \n          \u003cp class=\"aplus-question aplus-p1\"\u003eQ4: Is after-sales repair and maintenance troublesome?\u003c\/p\u003e \n          \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e \n         \u003c\/span\u003e\u003c\/h3\u003e\n        \u003cp class=\"aplus-answer aplus-p2\"\u003eA:No. Our team responds within 24 hours. PUSUN uses a modular design, so parts can be replaced quickly and easily. For the first 3 years, we provide free modular replacement parts. After that, technical assistance remains available whenever needed.\u003c\/p\u003e\n       \u003c\/li\u003e\n       \u003cli id=\"faq-qa-pair-4\" class=\"faq-block\"\u003e\n        \u003ch3\u003e\u003cspan data-faq-question role=\"button\" tabindex=\"0\" aria-controls=\"faq-4\" aria-expanded=\"false\"\u003e \n          \u003cp class=\"aplus-question aplus-p1\"\u003eQ5: Is this machine suitable for beginners?\u003c\/p\u003e \n          \u003cspan class=\"faq-arrow\" aria-label=\"\"\u003e\u003c\/span\u003e \n         \u003c\/span\u003e\u003c\/h3\u003e\n        \u003cp class=\"aplus-answer aplus-p2\"\u003eA: Absolutely. PT-Smart is perfect for beginners. The app is intuitive and easy to understand, with customizable speeds and frequencies covering NTRP levels 0.5 to 4.0 to meet your training needs.\u003c\/p\u003e\n       \u003c\/li\u003e\n      \u003c\/ul\u003e\n     \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cscript type=\"text\/javascript\"\u003e(function(f) {var _np=(window.P._namespace(\"PremiumAplusModule\"));if(_np.guardFatal){_np.guardFatal(f)(_np);}else{f(_np);}}(function(P) {\n    P.when('premium-module-11-faq').execute('invoke-premium-11-faq', function(init){\n        init();\n    });\n}));\u003c\/script\u003e\n   \u003c\/div\u003e\n  \u003c\/div\u003e\n \u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\u003cdiv\u003e\u003cdiv id=\"feature-bullets\" class=\"a-section a-spacing-medium a-spacing-top-small\"\u003e\n \u003cul class=\"a-unordered-list a-vertical a-spacing-mini\"\u003e\n  \u003cli class=\"a-spacing-mini\"\u003e\u003cspan class=\"a-list-item\"\u003e App Intelligence: NTRP 1.0 to 5.0 Progression:PUSUN Tennis ball launcher with controlled system designed to grow with you from NTRP 1.0 to 5.0. Use Primary or Fixed modes to find your rhythm as a beginner, or Vary Speed and Program modes for professional intensity. This setup helps build essential muscle memory and footwork. Switch to Padel Mode in one tap for 14 specialized drills including Bandeja and Bajada. \u003c\/span\u003e\u003c\/li\u003e\n  \u003cli class=\"a-spacing-mini\"\u003e\u003cspan class=\"a-list-item\"\u003e Tactical Precision: 28-Point Custom Placement:PUSUN tennis ball machines features 28 programmable landing points for full court coverage and reactive training. The external oscillation design of our tennis trainer provides clear visual cues of the machine's movement, helping players improve ball anticipation and timing across the entire court. Supports a wide speed range up to 75 MPH to simulate realistic match conditions for all levels. \u003c\/span\u003e\u003c\/li\u003e\n  \u003cli class=\"a-spacing-mini\"\u003e\u003cspan class=\"a-list-item\"\u003e Tactical Precision: 28-Point Drills \u0026amp; External Oscillation.Our Triple Control system—featuring the App, Remote, and compatibility with Apple Watch—offers total command from your hitting stance. Pause, start, or fine-tune speed (12-75 MPH), feed intervals (1.8-8s), and 6 spin levels on the fly.With our tennis equipment,no more running back and forth; keep your training fluid, focused, and efficient. \u003c\/span\u003e\u003c\/li\u003e\n  \u003cli class=\"a-spacing-mini\"\u003e\u003cspan class=\"a-list-item\"\u003e Rugged Build: Dust-Proof \u0026amp; All-Ball Logic:High-impact ABS shell and metal base ensure rock-solid stability. A specialized dust-proof mainboard resists clay erosion, significantly extending lifespan on hard courts and red clay. PUSUN tennis ball launcher fully compatible with pressurized, non-pressurized, and training balls for a smooth, pro experience. \u003c\/span\u003e\u003c\/li\u003e\n  \u003cli class=\"a-spacing-mini\"\u003e\u003cspan class=\"a-list-item\"\u003e Portable tennis trainer \u0026amp;100-Ball Pro Performance:PUSUN tennis ball machines for practiceat just 14.8kg (32.6 lbs) with a 100-ball collapsible hopper, it fits any SUV trunk. Includes a 153.6Wh external battery for 4-6h (5,700+ shots) of play—its external design lets you charge the pack anywhere without moving the machine. No extra battery required. Dust-proof and jam-free, it masters hard courts and red clay with ease. \u003c\/span\u003e\u003c\/li\u003e\n \u003c\/ul\u003e\n \u003cdiv data-csa-c-content-id=\"voyager-product-details-jumplink\" data-csa-c-slot-id=\"voyager-product-details-jumplink\" data-csa-c-type=\"link\" class=\"a-section aok-hidden\"\u003e\n  \u003cspan class=\"caretnext\"\u003e›\u003c\/span\u003e \u003ca id=\"seeMoreDetailsLink\" class=\"a-link-normal\" href=\"#productDetails\"\u003e See more product details \u003c\/a\u003e\n \u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e","brand":"Tennis Mindset","offers":[{"title":"Black","offer_id":54763415339331,"sku":null,"price":11339.0,"currency_code":"SEK","in_stock":true},{"title":"White","offer_id":54763415372099,"sku":null,"price":11339.0,"currency_code":"SEK","in_stock":true},{"title":"Red","offer_id":54763415404867,"sku":null,"price":11339.0,"currency_code":"SEK","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0915\/6781\/7027\/files\/7182yjI2VuL._AC_SL1500.jpg?v=1787493897","url":"https:\/\/tennismindset.org\/de\/products\/pusun-pt-smart-tennis-ball-machine-app-control-with-12-built-in-training-modes-6-level-spin-28-pt-75-mph-32-6-lbs-100-ball-5h-battery-portable-for-tennis-padel-training-practice-beginners-to-pros","provider":"Tennis Mindset","version":"1.0","type":"link"}