1 / 10
0% OFF

Cross Stitch Embroidery Pin Cushion Numeric Pattern Pin Storage Tools DIY Crafts

1 sold
Qty 2999 in stock

👉👉👉Order 50+, Free Worldwide Shipping

👉👉👉No tax

👉👉👉 Shipping time: about 15 to 20 days

🔔🔔If your order has not been shipped after 3 days, the warehouse has no stock and needs to wait for stock,it takes about a week to wait for stock , but you can send the customer service email to request a replacement product.

Origin: Mainland China
Material: cotton
Size: 25*13cm
Weight: 80g
Usage: You will receive the DIY colourful needle insertion kit with embroidery cloth, embroidery thread, embroidery needle and lace lace tape, you need to embroider the embroidery cloth, then use the cotton wool to fill it, and finally sew the embroidery cloth around.
Note: This product is a handmade DIY cross stitch needle insert bag material kit without filler cotton. Due to the filler cotton how much there is a slight difference, so the size of the needle stick will have a slight difference, non-product quality issues.
All product data are hand-measured, it is inevitable that there is an error, different batches of products may have a colour difference, please understand.

Due to the different monitor and light effect, the actual color of the item might be slightly different from the color showed on the pictures. Thank you!
Please allow 1-2cm measuring deviation due to manual measurement.

Package Content:
1*Embroidery Cloth
2*Embroidery Needles
1* Embroidery Thread Set
1* Lace Tape

At vipcrossstitch,we have made sure that the items are delivered to our customers as quickly as possible. You will receive your order within 15 to 20 working days from the date of your order.


 A confirmation email will be sent to you once the order has been authorized and confirmed. We will prepare your order immediately after verification. During this period it is difficult for us to change or cancel your order. However, we will do our best to support your request.


It usually takes 1-2 working days for us to process your order (if all items are available). Please note that this does not include holidays and weekends.

If you encounter the phenomenon that the product is out of stock, you need to wait 4 to 6 days to start shipping,thank you for your patience, but you can send the customer service email to request a replacement product.

👉 Notice:

After the item is shipped, you will receive an email informing you that the product has shipped, the email will include the shipping address, tracking number, carrier, product purchased.

If you haven't received the shipping email (or tracking number) after 5 days,that's because one of the products you purchased is not in stock and therefore not shipped,you can send an email to the customer service

email (service@vipcrossstitch.com) to ask if the product can subcontract for delivery, or replace an out-of-stock product with another.

Due to the time difference between countries, our customer service has no way to reply in time, but we will reply within 24 hours, except Saturday and Sunday.

Please note that the items you ordered may be shipped from different warehouses,or because the product is not in stock, so they may not arrive together in the same package or the same day. When we ship, if the

product is shipped in two packages, you will receive an email with the shipping address, tracking number, carrier, and product purchased.

🔔🔔🔔If the product in the package you received is incomplete, it is because we have divided the product into two packages. If you have any questions, you can contact our customer service staff (service@vipcrossstitch.com)

Transportation time Note:

(Estimated time of arrival) 15-20 working days

However, we have no control over the process and timeline of customs clearance.It is not uncommon for packages to be held by customs for 2 to 4 weeks in transit, especially during peak delivery periods.

* Shipping time is estimated and starts from the shipping date, not the date of the order. This may take longer than expected due to invalid addresses, customs clearance procedures, or other reasons.

* Please send a ticket within 6 months of shipping if the package does not arrive on time. Our representative will get back to you within 24 hours. Note that overdue requests may not be accepted.

  • Please make sure that your address details are correct. If you did not receive our product at the wrong address, we will only refund half or you will have to pay the shipping cost from us to receive the package again.

Affected by Covid-19 there will be delays in delivery.

Track Your Order

It may take up to 5 business days after your order has shipped for your tracking information to become available online (it might take longer depending on how fast the postal services are processing shipments).

Package logistics inquiry link:


You May Also Like Don't Like These?
Customer Reviews

Here are what our customers say.

Write review
Customer Reviews
Wow you reached the bottom
Most liked
Highest ratings
Lowest ratings
The review would not show in product details on storefront since it does not support to.
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);