Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
3/3
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
Heaven Is Good Enough Tee
3/3

Heaven Is Good Enough Tee

$16.00
$0.00
126 sold
ColorNavy Blue
Please select a color
Size
Please select a size
Quantity

A soft and stretchy tee with a range of motion and comfort beyond your typical cotton tee. Small-batch garment dying and soft-to-the-touch water-based printing offer unique shades that make it more contemporary. Classic crewneck features hand-drawn artwork on the reverse & a small graphic print on the front. Chosen by you.

Product details: 

  • Ultra Soft (100% Combed & Ringspun Cotton)
  • Better Cotton Initiative
  • Premium Quality 5.5oz Tee 
  • Regular Fit 
  • Pre-Shrunk
  • Tagless Neck

 Fit:

  • Relaxed Fit, Mid-weight
  • Side-seamed for the perfect fit

 Sustainability Details

  • Ships in 100% Home Compostable Mailer
  • Zero Plastic Packaging on Shirts
Size BUST LENGTH SHOULDER SLEEVE
IN CM IN CM IN CM IN CM
S 37.8 96 29.1 74 18.1 46 7.7 19.5
M 40.9 104 29.9 76 18.9 48 7.9 20
L 44.1 112 30.7 78 19.7 50 8.1 20.5
XL 48 122 31.5 80 20.7 52.5 8.37 21
2XL 52 132 32.3 82 21.7 55 8.5 21.5
3XL 55.9 142 32.3 82 22.6 57.5 8.7 22
4XL 59 150 32.6 83 23.6 60 8.9 22.5
5XL 62.2 158 32.6 83 24.6 62.5 9.1 23
Customer Reviews
Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.