Big Petal - Wider Coverage Rose Suction Massager

🚚 Free Shipping on $59+
🎁 Free Gift on $69+
412 sold
$38.95  - $79.95
class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "ab4cf99c-2b19-433c-87c8-91aaf721f4d6"; // 促销活动数据 this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // 挂载bind函数 解决this指向问题 this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // 获取数据 this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); const setting = this.flashsaleData.product_setting; const landingUrl = `/promotions/discount-default/${this.flashsaleData.discount_info.id}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(finalUrl, '_blank', 'noopener'); } } // 绑定 this.viewport_.onResize(this.resize); // 监听子款式切换,重新渲染 this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // 解绑 this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '85642c3b-6d0d-45a7-8ba1-9167c376c33a' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "85642c3b-6d0d-45a7-8ba1-9167c376c33a", product_type: "", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'ab4cf99c-2b19-433c-87c8-91aaf721f4d6'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = '85642c3b-6d0d-45a7-8ba1-9167c376c33a'; const variantId = this.variant_id; const productType = ''; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == '85642c3b-6d0d-45a7-8ba1-9167c376c33a' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = '85642c3b-6d0d-45a7-8ba1-9167c376c33a'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() { // 同一页可能有多个 block 各自渲染本 snippet,导致逻辑元素 spz-custom-discount-toast(#appsAddCartToastFunc) 重复。 // 仅保留 DOM 中第一个实例,其余重复实例移除自身,保证逻辑元素及其 action 引用(appsAddCartToastFunc)唯一。 const funcs = document.querySelectorAll('#appsAddCartToastFunc'); if (funcs.length > 1 && this.element !== funcs[0]) { this.element.remove(); return; } // 全局折扣 toast 的弹出点分散在多个模板/组件里(含声明式 @atcError),无法逐一在弹出前前置, // 故挂载时幂等地去重并挂到 body;加购 toast 改为弹出前按需去重(见 showAddToCartToast) this.ensureSingleToastInBody_('cart_match_discount_toast_wrap'); } unmountCallback() {} // 同一页面可能有多个 block 各自渲染本 toast snippet(如商详的 discount_automatic + 购物车抽屉里的折扣横幅), // 导致 toast 外层出现重复 id。重复 id 下 getElementById/querySelector 及 SPZ 动作引用都只命中第一个, // 且被关进抽屉的那份会被抽屉的 transform/overflow 裁剪/错位。这里在挂载时幂等去重: // 只保留一份、移除多余的,并把保留的挂到 body(body 是 position:fixed 最安全的落点,避免被任何祖先裁剪)。可反复调用。 ensureSingleToastInBody_(id) { const els = Array.from(document.querySelectorAll('#' + id)); if (!els.length) return; els.slice(1).forEach((el) => el.remove()); const keep = els[0]; if (keep.parentNode !== document.body) { document.body.appendChild(keep); } } // 主题购物车抽屉是否打开 isInCartDrawer_() { return !!document.querySelector('[data-section-type="cart_drawer"] spz-sidebar[open]'); } setupAction_() { this.registerAction('showAddToCartToast', () => { // 抽屉内加购:主题本就不会有加购效果,统一弹插件自己的 toast // 非抽屉:主题有加购代理则沿用主题加购效果,否则插件兜底 const proxyEl = document.getElementById('add-cart-event-proxy'); const inDrawer = this.isInCartDrawer_(); if (!inDrawer && proxyEl) { return; } // 弹出前按需去重并挂到 body(幂等),避免重复 id 命中错对象或被抽屉裁剪/错位 this.ensureSingleToastInBody_('apps_add_cart_toast_wrap'); const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "ab4cf99c-2b19-433c-87c8-91aaf721f4d6"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '85642c3b-6d0d-45a7-8ba1-9167c376c33a' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "85642c3b-6d0d-45a7-8ba1-9167c376c33a", variant_id: this.variantId, product_type: "", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Color:  Rose Red
Bundle:  Single
Quantity
Shipping
The current item does not participate in the discount gift campaign. Switch the participating items to check the design.
(This prompt will not be displayed on the client-side)

Description

Starter Care Set

A Complete Rose Toy Care Kit for Play, Charging, Cleaning, and Comfort

This starter care set brings together a compact rose air-pulse toy, a magnetic USB charger, foaming toy cleaner, and water-based lubricant, making it easier for beginners to get everything they need in one simple bundle.

Rose Air-Pulse Toy Wider Suction Mouth 9 Stimulation Modes Magnetic USB Charging Waterproof Design Cleaner + Lubricant Included

Why Choose the Starter Care Set?

For first-time rose toy shoppers, the hardest part is often knowing what else to buy. This bundle keeps the setup simple: the toy is designed for focused air-pulse sensation, the magnetic charger keeps power-ups easy, the cleaner supports daily care, and the water-based lubricant helps create a smoother, more comfortable experience.

One complete beginner kit

Includes the main rose toy plus everyday care accessories, so there is less guesswork before first use.

Wider suction mouth

Compared with many traditional rose toys, the larger opening helps cover a broader contact area for a fuller external sensation.

Focused air-pulse sensation

The rose-shaped mouth is designed to direct pulsing airflow for a deep, targeted external feel.

Easy cleaning routine

The included foaming toy cleaner helps make after-use care more convenient and consistent.

Travel-friendly size

The compact palm-sized design is easy to store in a drawer, pouch, or travel bag.

Comfort-first setup

The included water-based lubricant and soft silicone design help support a smoother beginner experience.

Looking for more suction-focused options? Browse the Rose Suction Toy Collection or compare more clitoral suction vibrators.

Focused Air-Pulse Stimulation

The rose-shaped mouth is made to concentrate sensation through a soft, comfort-first opening. Compared with a traditional rose toy, this model uses a wider suction mouth to cover a broader contact area while still keeping the air-pulse sensation focused and easy to control.

9 Stimulation Modes

Switch through nine pulse patterns to find a rhythm that feels right for you. Start with a gentler pattern, then move to a stronger rhythm when you want more intensity and variety.

USB Magnetic Charging

The snap-on magnetic USB charger makes power-ups quick and easy. The magnetic contact design helps the charger connect securely without complicated plugs or setup.

Waterproof Design for Easier Rinsing

The sealed design supports simple rinsing and worry-free cleaning after use. Rinse the surface, dry it fully, and store it in a clean place before the next session.

Compact Product Size

The palm-sized body is designed to be easy to hold, store, and take anywhere. The product is shown with a 2.5-inch height, 2.1-inch width, and 0.59-inch opening size.

What’s Included in the Set?

The Starter Care Set is built for shoppers who want the toy and care basics together, instead of buying each item separately.

Rose Air-Pulse Toy

A compact external rose toy with soft silicone petals, a wider comfort-fit opening, and 9 stimulation modes.

Magnetic USB Charger

A snap-on charging cable designed for simple magnetic connection and easy power-ups.

Foaming Toy Cleaner

A 30ML / 1 FL.OZ foaming cleaner for a more convenient before-and-after care routine.

Water-Based Lubricant

A neutral water-based lubricant designed to support a smoother, comfort-first experience.

How to Use and Care for It

For the best experience, keep the routine simple: charge the toy before use, start with a lower mode, use water-based lubricant if desired, then clean and dry the toy after each session.

1. Charge before use

Attach the magnetic USB charger to the charging contacts and make sure the product is dry before charging.

2. Start with a gentle mode

Begin with a lower pulse pattern and adjust slowly until you find the most comfortable sensation.

3. Use water-based lubricant

Apply a small amount of water-based lubricant around the external area for a smoother feel.

4. Clean and store

Use the foaming toy cleaner, rinse the surface, dry fully, and store in a clean private place.

Specifications

Key product and bundle information is organized below for quick comparison.

Product Name Starter Care Set
Product Type Rose air-pulse toy care bundle
Included Items Rose Air-Pulse Toy, Magnetic USB Charger, Foaming Toy Cleaner, Water-Based Lubricant
Key Difference Wider suction mouth than many traditional rose toys for broader contact coverage
Stimulation Modes 9 pulse patterns
Charging Method USB magnetic charging
Waterproof Design Designed for easy rinsing and simple cleaning
Opening Size 0.59 inch
Product Height 2.5 inches
Product Width 2.1 inches
Cleaner Size 30ML / 1 FL.OZ
Lubricant Type Water-based lubricant
Best For Beginners, compact storage, travel, simple care routine, one-stop rose toy starter kit

*Packaging designs are shipped at random.

FAQs

What comes in the Starter Care Set?

The set includes a rose air-pulse toy, magnetic USB charger, foaming toy cleaner, and water-based lubricant. It is designed as a one-stop starter kit for play, charging, cleaning, and care.

Is this care set good for beginners?

Yes. The compact product size, simple magnetic charging, 9 stimulation modes, included cleaning and lubricant accessories, and wider suction mouth make it a practical option for first-time rose toy shoppers.

What does air-pulse stimulation mean?

Air-pulse stimulation uses a rose-shaped opening to direct pulsing airflow for a focused external sensation. It is different from broad surface vibration because the feeling is more targeted around the opening.

How is this rose toy different from a traditional rose toy?

Compared with a traditional rose toy, this model features a wider suction mouth and a broader contact area. The larger opening helps deliver more coverage around the external sensitive area, making the sensation feel fuller while still keeping the air-pulse stimulation focused and easy to control.

How many stimulation modes does it have?

This rose air-pulse toy is shown with 9 stimulation modes, allowing users to switch between different pulse patterns from gentler rhythms to stronger patterns.

How do I charge the toy?

Use the included magnetic USB charger. Make sure the toy and charging contacts are fully dry before charging, then align the magnetic charger with the charging points.

Is the toy waterproof?

The product is designed for easy rinsing and simple cleaning. After rinsing, dry it fully before charging or storing.

Can I use lubricant with this rose toy?

Yes. Use water-based lubricant. Avoid silicone-based lubricant on silicone toy surfaces unless the product instructions clearly say it is safe.

How should I clean it after use?

Use the included foaming toy cleaner, rinse the surface, and dry it completely. Store it in a clean, dry, private place before the next use.

"text": "Use the included foaming toy cleaner, rinse the surface, and dry it completely. Store it in a clean, dry, private place before the next use." } } ] }

Shipping Delivery

We work to get your order to you as quickly and reliably as possible. Delivery times vary depending on the shipping origin, destination, shipping method selected, and product availability.

Order Processing

Orders are normally processed within 1–3 business days before shipment.

Processing time may vary for certain products or during high-volume periods. Once your order has been shipped, tracking information will be sent to the email address used for your order.

Estimated delivery time = Processing Time + Shipping Time

Business days do not include weekends or public holidays.

U.S. Warehouse Shipping

Selected products are available for shipping from our U.S. warehouse to eligible U.S. delivery addresses.

Products or variants eligible for U.S. warehouse fulfillment may be marked with a US Warehouse label on the product page.

U.S. warehouse shipping applies only when all items in the order are eligible for U.S. warehouse fulfillment. If your order contains any non-U.S. warehouse item, the entire order will be shipped using our regular shipping method instead of U.S. warehouse shipping.

U.S. Warehouse Delivery Options

Shipping Method Shipping Time Cost Eligibility / Calculation Rule
Standard Shipping 4–6 business days US $9.99 Orders US $0.00–$29.99
Standard Shipping 4–6 business days US $6.99 Orders US $30.00–$58.99
Free Shipping 4–6 business days Free Orders US $59.00 or more
Expedited Shipping 2–4 business days US $9.99 Orders US $30.00–$58.99
Expedited Shipping 2–4 business days US $4.99 Orders US $59.00 or more

Shipping times shown above apply to eligible products fulfilled from our U.S. warehouse and begin after order processing.

U.S. warehouse shipping is currently available to eligible addresses within the United States, excluding Alaska, Hawaii, Guam, Puerto Rico, the Northern Mariana Islands, the U.S. Virgin Islands, U.S. Minor Outlying Islands, and APO/FPO military addresses.

Orders Containing Both U.S. and Non-U.S. Warehouse Items

If your order contains both U.S. warehouse and non-U.S. warehouse items, the entire order will be fulfilled using our regular shipping method instead of U.S. warehouse shipping.

In this case, the U.S. warehouse delivery times of 4–6 business days for Standard/Free Shipping and 2–4 business days for Expedited Shipping will not apply.

The estimated delivery time for your order will be based on the regular shipping method shown at checkout.

International & Non-U.S. Warehouse Shipping

For products not fulfilled from our U.S. warehouse, estimated shipping times depend on the destination.

Standard Shipping Regions

The following destinations generally have an estimated Standard Shipping time of 9–12 days:

United States (for orders or products not eligible for U.S. warehouse fulfillment), United Kingdom, Germany, France, Australia, Canada, Singapore, Japan, New Zealand, Ireland, Slovakia, Lithuania, Belgium, Spain, Denmark, South Korea, Luxembourg, Poland, Switzerland, Finland, Austria, Hungary, Portugal, Italy, Latvia, Croatia, Estonia, Romania, Czech Republic, Bulgaria, Netherlands, and Sweden.

Shipping Rates

Shipping Method Shipping Time Cost Eligibility / Calculation Rule
Standard Shipping 9–12 days US $9.99 Orders US $0.00–$29.99
Standard Shipping 9–12 days US $6.99 Orders US $30.00–$58.99
Free Shipping 9–12 days Free Orders US $59.00 or more
Expedited Shipping 5–8 days US $9.99 Orders US $30.00–$58.99
Expedited Shipping 5–8 days US $4.99 Orders US $59.00 or more

Expedited shipping availability may vary by destination. Available shipping methods and the applicable shipping fee will be shown at checkout.

Other Supported Destinations

The following destinations generally have an estimated shipping time of 12–20 days:

Montenegro, El Salvador, Philippines, Argentina, Laos, Anguilla, Thailand, Guyana, Bolivia, Colombia, Paraguay, Cyprus, South Africa, Serbia, San Marino, Curaçao, Malta, Norway, Belarus, Kenya, Barbados, Cuba, Ecuador, Liechtenstein, Saint Lucia, Vietnam, Peru, Monaco, Cambodia, Costa Rica, Suriname, Bahamas, Dominica, Chile, Guadeloupe, Moldova, Andorra, Montserrat, Panama, Brazil, Grenada, Iceland, Uruguay, Nicaragua, Mexico, Armenia, Niue, Greece, Slovenia, Bhutan, Norfolk Island, and Belize.

Shipping Rates

  • Orders US $0.00–$58.99: Standard Shipping US $9.99
  • Orders US $59.00+: Free Shipping

For countries or regions not listed above, we currently do not provide shipping services.

If you have questions about shipping availability, please contact us at services@the-rose-toy-official.com.

Delivery Delays

While we make every effort to deliver your order within the estimated timeframe, delays may occasionally occur due to circumstances outside our control, including:

  • Incorrect or incomplete delivery addresses
  • Customs clearance procedures
  • Carrier delays
  • Severe weather
  • Public holidays
  • Natural disasters
  • Peak shopping seasons
  • Stock availability
  • Additional carrier or customs inspections

Delivery estimates are not guaranteed arrival dates.

If your package has not arrived within the expected delivery period, please contact our customer service team for assistance.

Shipping Protection

For additional peace of mind, you may add Shipping Protection (Damage, Loss & Theft) at checkout.

Shipping Protection may cover eligible shipping issues such as:

  • Loss in transit
  • Shipping damage
  • Missing items
  • Eligible carrier delivery exceptions

Coverage is subject to claim review and approval.

Tracking Your Order

Once your order has shipped, we will send tracking information to your order email.

If an order is fulfilled from multiple warehouses, you may receive more than one shipment and separate tracking information for each package.

Taxes & Duties

Sales Tax Rates in Europe

Country Tax Rate
Germany 19%
Italy 22%
France 20%
Belgium 21%
Sweden 25%
Netherlands 21%
Spain 21%
Portugal 23%
Austria 20%
Ireland 23%
Denmark 25%
Malta 18%
Luxembourg 17%
Finland 24%
Romania 19%
Czech Republic 21%
Slovakia 20%
Latvia 21%
Croatia 25%
Slovenia 22%
Estonia 20%
Cyprus 19%
Bulgaria 20%
Lithuania 21%
Hungary 27%
Poland 23%

Applicable taxes and fees are subject to local regulations and requirements.

Need Help?

If your package has not arrived within the expected delivery period, please contact us at services@the-rose-toy-official.com.

Please contact us within 6 months of shipment regarding packages that have not arrived. Our customer care team will normally respond within 48 hours.

Requests submitted after this period may not be accepted.

Contact Us

WANT SOME HELP? WE LOVE HEARING FROM YOU!

Before you send us an email though, check out our FAQ (Frequently Asked Questions) to see if we've already answered your most burning questions there.


The email address: service@the-rose-toy-official.com


If you do not get our reply email in your inbox, please check your “junk mail” folder or “spam” folder.