Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
1 / 12
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
Hippie Van Quilted Duffle Bag GFTOTP10609
24% OFF
Save $22.28
mysite

Hippie Van Quilted Duffle Bag GFTOTP10609

$69.99 $92.27
1 sold
Size
Designs
Qty 1000 in stock

Meet Your Perfect On-the-Go Companion: The Quilted Duffle Bag
Whether you're off for a weekend getaway, hitting the beach, traveling light, making a quick grocery run, or carrying kid essentials, art supplies, or just need an extra bag—this do-it-all duffle has you covered!

PRODUCT DETAILS
High-Quality Material: Our quilts are crafted from a premium jetiy cotton-poly blend, combining the softness and breathability of cotton with the durability and easy care of polyester.

Two Convenient Sizes:
- Medium: 16'' x 8'' x 8''
- Large: 18'' x 9'' x 9''

Exquisite Designs: Choose from a curated collection of quilted patterns—each thoughtfully created to bring a pop of personality and style wherever you go.
Easy to Clean: Machine washable and tumble-dry friendly—because convenience matters.

Please Note: As each of our products is made to order, there may be approximately a 20% variation in color, pattern, binding and stitches compared to the sample photos. However, we ensure the main design is kept as shown.

/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1759048033660').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);