www.llmetro.com
Open in
urlscan Pro
2606:4700::6811:f677
Public Scan
Submitted URL: http://llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=47148267602232&pp=0&epik=dj0yjnu9b...
Effective URL: https://www.llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=47148267602232&pp=0&epik=dj0yjnu9b...
Submission: On June 25 via api from US — Scanned from CA
Effective URL: https://www.llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=47148267602232&pp=0&epik=dj0yjnu9b...
Submission: On June 25 via api from US — Scanned from CA
Form analysis
6 forms found in the DOM<form>
<input name="variant_id" type="hidden" value="${data.variants[0].id}">
<button type="button" class="product-snippet__quick-shop-icon" role="addToCart" data-quick-shop="${data.handle}" data-track-product-id="${data.id}" data-track="click" data-track-content="add_to_cart" data-track-source="quick_shop">
<svg class="" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M8.6 1.9a.3.3 0 0 0-.3-.3h-.6a.3.3 0 0 0-.3.3v5.5H1.9a.3.3 0 0 0-.3.3v.6a.3.3 0 0 0 .3.3h5.5v5.5a.3.3 0 0 0 .3.3h.6a.3.3 0 0 0 .3-.3V8.6h5.5a.3.3 0 0 0 .3-.3v-.6a.3.3 0 0 0-.3-.3H8.6V1.9z" fill="currentColor"></path>
</svg>
</button>
</form>
GET /search
<form class="flex items-center" action="/search" method="get">
<button type="submit" class="clear text-0 text-inherit cursor-pointer">
<svg class="" width="26" height="26" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M17.925 20.057A9.955 9.955 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10a9.968 9.968 0 0 1-2.864 7.006l4.929 4.928a.8.8 0 0 1-1.132 1.132l-5-5-.008-.01zM20.4 12a8.4 8.4 0 1 1-16.8 0 8.4 8.4 0 0 1 16.8 0z"
fill="currentColor"></path>
</svg>
</button>
<input @input-debounced="header_search_predictive_render-sidebar.rerender(data=event.value, redo=true);" class="header__search_sidebar-input flex-1 text-base leading-none type-text-font-family clear" type="text" autocomplete="off" name="q"
placeholder="Search products">
<button type="reset" class="header__search-modal-close text-0 text-inherit clear cursor-pointer" @tap="header_search_sidebar.close()">
<svg class="" width="26" height="26" xmlns="http://www.w3.org/2000/svg">
<path d="M21.502 5.732A.85.85 0 0 0 20.3 4.53l-7.32 7.32L5.734 4.6a.85.85 0 0 0-1.202 1.203l7.248 7.247L4.53 20.3A.85.85 0 0 0 5.733 21.5l7.248-7.248 7.319 7.319a.85.85 0 0 0 1.202-1.202l-7.319-7.319 7.319-7.319z" fill="currentColor"></path>
</svg>
</button>
</form>
<form role="spz-product-form424490d3-1618-43ac-9b60-86ccc3f9eaf4">
<div class="product-info-body-inner product-info-body-z-index" id="product-info-body-inner-container">
<h1 class="product-info-title m-0 leading-1.25 type-heading-font-family break-words product-title-color "> Carbon Fiber Car Wrap Vinyl Roll with Air Release </h1>
<spz-render class="mt-4 lg:mt-5 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-prices" layout="container" manual="" i-spzhtml-layout="container" style="height: auto;">
<template> ${function() { const variantData = data.variant || {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760
in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760
in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size
(Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; const saveType = "amount"; const productLabelDiscountOn = true; return ` <div class="flex items-center justify-between">
<div spz-if="${!variantData.price}" class="mr-2 text-2xl leading-1.2 font-semibold color-price flex items-center">
<spz-currency class="mr-2" container-class="product-info__header_price" value="${data.product.price_min}" layout="container"></spz-currency>
<span class="flex" spz-if="${!variantData.price && data.product.price_min < data.product.price_max}"> - <spz-currency class="ml-2" container-class="product-info__header_price" value="${data.product.price_max}"
layout="container"></spz-currency></span>
</div>
<div spz-else="" class="flex items-center flex-wrap">
<spz-currency class="mr-2" container-class="product-info__header_price" value="${variantData.price}" layout="container"></spz-currency>
<spz-currency class="leading-1.2 color-compare-price line-through mr-2 lg:body-plus-2" container-class="product-info__header_compare-at-price" layout="container" value="${variantData.compare_at_price}"
spz-if="${+variantData.price < +variantData.compare_at_price}"></spz-currency>
<div spz-if="${productLabelDiscountOn && variantData.off_ratio > 0}" class="product-info-saved-label inline-block color-save-price whitespace-nowrap font-semibold"> ${saveType == 'percentage' ? `-${variantData.off_ratio}%` :
`<span>-</span><spz-currency class="inline-block" value="${variantData.compare_at_price - variantData.price}" layout="container"></spz-currency>` } </div>
</div>
</div> `; }()} </template>
<div class="flex items-center justify-between">
<div class="flex items-center flex-wrap" spz-else="">
<spz-currency class="mr-2 i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" container-class="product-info__header_price" value="32" layout="container" i-spzhtml-layout="container">
<div class="money product-info__header_price">CA$32.00</div>
</spz-currency>
</div>
</div>
</spz-render>
<div class="plugin-discount-wrap empty-hidden" role="[theme-seat-for-plugin]">
<div class="bootstrap">
<div class="plugin__wrappers d-flex flex-column"></div>
</div>
</div>
<spz-variants class="product-info__variants flex flex-col items-start i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" layout="container" id="product-info-variants" src="script:product-json" switch-slide="[]"
slide="product-detail-images" manual="" interference="" select-soldout-suffix=" - Sold out" interact="hover" inherit-url-variant=""
@mouseout="product-info-selected-variant-option1.rerender(data=event);product-info-selected-variant-option2.rerender(data=event);" @colormouseover="product-info-selected-variant-option1.rerender(data=event);"
@size-(width×length)mouseover="product-info-selected-variant-option2.rerender(data=event);" i-spzhtml-layout="container">
<fieldset class="product-info__variants_content mx-0 mt-4 lg:mt-5" name="Color">
<legend class="w-full m-0 p-0">
<span class="lg:body-plus-2 font-semibold leading-1.25 product-info__variants_title">Color: </span>
<spz-render class="product-info-selected-variant-option-text inline-block color-body-70 leading-1.25 lg:body-minus-2 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-selected-variant-option1"
layout="container" manual="" i-spzhtml-layout="container" style="height: 18px;">
<template> ${function(){ const optName = "Color"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return
`<span>${optionValueText}</span>`; }()} </template>
<span>Black</span></spz-render>
</legend>
<div class="flex flex-wrap ">
<div class="relative mt-3 mr-3">
<input type="radio" option="Black" id="product-info-variant-Black-0" class="pointer-events-auto" name="product-info-variant-Color" value="Black" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);" checked="">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/364222c2700b6ce382cd8eafb8861fd0_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/364222c2700b6ce382cd8eafb8861fd0_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Black</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="White" id="product-info-variant-White-1" class="pointer-events-auto" name="product-info-variant-Color" value="White" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/95c93c2944def0bdfbb575552ecdc791_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/95c93c2944def0bdfbb575552ecdc791_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">White</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Red" id="product-info-variant-Red-2" class="pointer-events-auto" name="product-info-variant-Color" value="Red" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/f96ee3c98a0bdcd0fb0751963a75fd16_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/f96ee3c98a0bdcd0fb0751963a75fd16_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Red</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Orange" id="product-info-variant-Orange-3" class="pointer-events-auto" name="product-info-variant-Color" value="Orange" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/1555d58db1c22b71f834d7837e2b590c_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/1555d58db1c22b71f834d7837e2b590c_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Orange</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Yellow" id="product-info-variant-Yellow-4" class="pointer-events-auto" name="product-info-variant-Color" value="Yellow" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/b90fe26c634d785e363be27b427fcfff_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/b90fe26c634d785e363be27b427fcfff_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Yellow</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Navy" id="product-info-variant-Navy-5" class="pointer-events-auto" name="product-info-variant-Color" value="Navy" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/623a6d280e3104abb36bf388b8947778_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/623a6d280e3104abb36bf388b8947778_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Navy</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Sky" id="product-info-variant-Sky-6" class="pointer-events-auto" name="product-info-variant-Color" value="Sky" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/53a96e94798a654fe3446bd0f3421576_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/53a96e94798a654fe3446bd0f3421576_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Sky</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Purple" id="product-info-variant-Purple-7" class="pointer-events-auto" name="product-info-variant-Color" value="Purple" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/358ab0a83bf32a1b17447c9d4eba3241_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/358ab0a83bf32a1b17447c9d4eba3241_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Purple</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Silver" id="product-info-variant-Silver-8" class="pointer-events-auto" name="product-info-variant-Color" value="Silver" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/83ac83d363cf8d2beef13af8c7dd9fa9_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/83ac83d363cf8d2beef13af8c7dd9fa9_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Silver</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Champagne" id="product-info-variant-Champagne-9" class="pointer-events-auto" name="product-info-variant-Color" value="Champagne" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/c5a9b85a78c44b78c0c0c700ea7cc649_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/c5a9b85a78c44b78c0c0c700ea7cc649_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Champagne</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Transparent" id="product-info-variant-Transparent-10" class="pointer-events-auto" name="product-info-variant-Color" value="Transparent" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/a4ffceade6d2b7f854de4317712fc9c2_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/a4ffceade6d2b7f854de4317712fc9c2_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Transparent</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Green" id="product-info-variant-Green-11" class="pointer-events-auto" name="product-info-variant-Color" value="Green" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/0e76f9504ef485bef31f9f2a489db582_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/0e76f9504ef485bef31f9f2a489db582_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Green</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="Burgundy" id="product-info-variant-Burgundy-12" class="pointer-events-auto" name="product-info-variant-Color" value="Burgundy" form="product-info-body"
@input-debounced="product-info-selected-variant-option1.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="image-with-text">
<spz-img src="//img.fantaskycdn.com/02eab4397f024a9424bf9c4bed7a1e56_48x.jpeg" layout="responsive" width="44" height="44" alt="" object-fit="cover" auto-fit=""
class="i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top:100%;"></i-spzhtml-sizer><img
decoding="async" alt="" src="//img.fantaskycdn.com/02eab4397f024a9424bf9c4bed7a1e56_48x.jpeg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></spz-img>
<span class="break-words">Burgundy</span>
</label>
</div>
</div>
</fieldset>
<spz-render id="product-variant-option1-error-tip" manual="" layout="container" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<template> ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return `<div class="product-info__variants-tips font-bold">${tipText}</div>` }()} </template>
</spz-render>
<fieldset class="product-info__variants_content mx-0 mt-4 lg:mt-5" name="Size (Width×Length)">
<legend class="w-full m-0 p-0">
<span class="lg:body-plus-2 font-semibold leading-1.25 product-info__variants_title">Size (Width×Length): </span>
<spz-render class="product-info-selected-variant-option-text inline-block color-body-70 leading-1.25 lg:body-minus-2 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-selected-variant-option2"
layout="container" manual="" i-spzhtml-layout="container" style="height: 18px;">
<template> ${function(){ const optName = "Size (Width×Length)"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : '';
return `<span>${optionValueText}</span>`; }()} </template>
<span>20×152cm/7.9×60 in</span></spz-render>
</legend>
<div class="flex flex-wrap product-info-variant-container ">
<div class="relative mt-3 mr-3">
<input type="radio" option="20×152cm/7.9×60 in" id="product-info-variant-20×152cm/7.9×60 in-0" class="pointer-events-auto" name="product-info-variant-Size (Width×Length)" value="20×152cm/7.9×60 in" form="product-info-body"
@input-debounced="product-info-selected-variant-option2.rerender(data=event);" checked="">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="text">
<span class="break-words text-center">20×152cm/7.9×60 in</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="30cm×152cm/12×60 in" id="product-info-variant-30cm×152cm/12×60 in-1" class="pointer-events-auto" name="product-info-variant-Size (Width×Length)" value="30cm×152cm/12×60 in" form="product-info-body"
@input-debounced="product-info-selected-variant-option2.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="text">
<span class="break-words text-center">30cm×152cm/12×60 in</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="50cm×152cm/19.5×60 in" id="product-info-variant-50cm×152cm/19.5×60 in-2" class="pointer-events-auto" name="product-info-variant-Size (Width×Length)" value="50cm×152cm/19.5×60 in" form="product-info-body"
@input-debounced="product-info-selected-variant-option2.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="text">
<span class="break-words text-center">50cm×152cm/19.5×60 in</span>
</label>
</div>
<div class="relative mt-3 mr-3">
<input type="radio" option="60cm×152cm/23.5×60 in" id="product-info-variant-60cm×152cm/23.5×60 in-3" class="pointer-events-auto" name="product-info-variant-Size (Width×Length)" value="60cm×152cm/23.5×60 in" form="product-info-body"
@input-debounced="product-info-selected-variant-option2.rerender(data=event);">
<label class="product-info-variant-option relative flex items-center break-words flex-shrink-0 overflow-hidden
rounded-sm
" data-type="text">
<span class="break-words text-center">60cm×152cm/23.5×60 in</span>
</label>
</div>
</div>
</fieldset>
<spz-render id="product-variant-option2-error-tip" manual="" layout="container" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<template> ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return `<div class="product-info__variants-tips font-bold">${tipText}</div>` }()} </template>
</spz-render>
</spz-variants>
<div class=" mt-4 lg:mt-5">
<div class="leading-1.25 font-semibold lg:body-plus-2">Quantity</div>
<spz-quantity class="product-info-qty mt-2 lg:mt-3 i-spzhtml-layout-fixed-height i-spzhtml-layout-size-defined i-spzhtml-element i-spzhtml-built i-spzhtml-layout" id="product-info-quantity" name="quantity" value="1" min="1" max="999999999"
icon-class="product-info-qty-btn clear flex items-center justify-center flex-shrink-0" input-class="product-info-qty-input clear flex-shrink-0 body-plus-2 text-center" height="40" layout="fixed-height" style="height:40px;"
i-spzhtml-layout="fixed-height">
<div class="i-spzhtml-fill-content i-spzhtml-replaced-content"><span role="button" class="i-spzhtml-quantity-number-decrease product-info-qty-btn clear flex items-center justify-center flex-shrink-0" disabled=""><svg role="decrease" class=""
width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M13.7 7.4a.3.3 0 0 1 .3.3v.6a.3.3 0 0 1-.3.3H2.3a.3.3 0 0 1-.3-.3v-.6a.3.3 0 0 1 .3-.3h11.4z" fill="currentColor"></path>
</svg></span><input type="number" name="quantity" min="1" max="999999999" class="i-spzhtml-quantity-number-input product-info-qty-input clear flex-shrink-0 body-plus-2 text-center"><span role="button"
class="i-spzhtml-quantity-number-increase product-info-qty-btn clear flex items-center justify-center flex-shrink-0"><svg role="increase" class="" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
<path d="M8.3 14a.3.3 0 0 0 .3-.3V8.6h5.1a.3.3 0 0 0 .3-.3v-.6a.3.3 0 0 0-.3-.3H8.6V2.3a.3.3 0 0 0-.3-.3h-.6a.3.3 0 0 0-.3.3v5.1H2.3a.3.3 0 0 0-.3.3v.6a.3.3 0 0 0 .3.3h5.1v5.1a.3.3 0 0 0 .3.3h.6z" fill="currentColor"></path>
</svg></span></div>
</spz-quantity>
</div>
<div class="mt-4 lg:mt-5">
<button class="relative button-secondary flex items-center justify-center w-full body-plus-2 leading-1.25 type-text-font-family rounded-btn product-info_atc_btn" type="button" role="addToCart" data-track="click"
data-track-content="add_to_cart" data-track-source="add_to_cart">
<span role="content">Add to cart</span>
<spz-render id="product-info-btn-price" layout="container" template="product-info-btn-price-template" manual="" class="i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container"
style="height: auto;">
<div class="flex"><span class="product_price_before"></span><spz-currency value="32" layout="container" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
<div class="money">CA$32.00</div>
</spz-currency></div>
</spz-render>
<style>
.product_price_before::before {
content: ' - ';
display: block;
width: 20px;
}
</style>
<template id="product-info-btn-price-template"> ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants
&& data.product.variants[0]); const productVariant = {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760
in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760
in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size
(Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price
|| []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length -
1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` <div class="flex">
<span class="product_price_before"></span><spz-currency value="${wholesalePrice.price}" layout="container"></spz-currency>
</div> ` }else { const price = variantData && variantData.price; return price != undefined ? `<div class="flex"><span class="product_price_before"></span><spz-currency value="${price}" layout="container"></spz-currency></div>` :
'<span></span>'; } }()} </template>
<div class="loading items-center justify-center absolute inset-0 flex" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
<button class="relative button-primary w-full body-plus-2 leading-1.25 type-text-font-family rounded-btn mt-2 lg:mt-3 product-info_atc_btn" role="buyNow" type="button" data-track="click" data-track-content="checkout"
data-track-source="buy_now">
<span role="content">Buy now</span>
<div class="loading items-center justify-center absolute inset-0 flex" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
<div class="product-info__out_stock mt-2 text-center text-sm leading-1.3 opacity-70 lg:mt-3 hidden"> Product was out of stock. </div>
<div class="product-info__unavailable mt-2 text-center text-sm leading-1.3 opacity-70 lg:mt-3 hidden"> Product is unavailable. </div>
</div>
<spz-render class="mt-4 lg:mt-5 i-spzhtml-layout-container i-spzhtml-element i-spzhtml-built i-spzhtml-layout" layout="container" id="product-detail-featured" manual="" i-spzhtml-layout="container" style="height: 16px;">
<template> ${function(){ const variantData = data.variant || {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760
in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760
in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size
(Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; return ` <div class="body-minus-2">
<div spz-if="${!!(variantData && variantData.sku)}" class="product-detail-featured-item"> Sku : <span>${variantData && variantData.sku}</span>
</div>
<div spz-if="${variantData && +variantData.weight > 0}" class="product-detail-featured-item"> Weight : <span>${variantData && variantData.weight}${variantData && variantData.weight_unit}</span>
</div>
</div> ` }()} </template>
<div class="body-minus-2">
<div class="product-detail-featured-item" spz-if="true"> Sku : <span>AK1665194-20x152</span>
</div>
</div>
</spz-render>
<div class="product-info__social-sharing mt-5 md:hidden">
<div class="text-xs leading-[1.7]">Share the love</div>
<div class="product-info__social-sharing-wrapper flex items-center">
<a target="_blank" data-track="social_share" href="//www.facebook.com/sharer.php?u=https://www.llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761" class="text-current no-underline flex justify-center items-center dj_skin_text share-facebook ">
<svg class="" width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path d="M17.268 6.005h-1.917c-1.503 0-1.794.714-1.794 1.764v2.313h3.588l-.468 3.621h-3.12V23H9.816v-9.294H6.687v-3.624h3.129v-2.67c0-3.099 1.893-4.788 4.659-4.788 1.326 0 2.463.099 2.796.144v3.237h-.003z" fill="currentColor"></path></svg>
</a>
<a target="_blank" data-track="social_share" href="//twitter.com/share?text=Carbon%20Fiber%20Car%20Wrap%20Vinyl%20Roll%20with%20Air%20Release&url=https://www.llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761" class="text-current no-underline flex justify-center items-center dj_skin_text share-twitter">
<svg class="" width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path d="M21.072 8.24c0 7.929-5.146 13.637-12.715 13.888-3.201.25-5.394-.734-7.357-2.22 2.193.251 5.146-.483 6.596-1.986-2.192 0-3.43-1.252-4.155-2.952h1.963c-1.963-.752-3.449-2.237-3.449-4.707.477.25.973.483 1.963.483C2.203 9.762 1.23 6.541 2.45 4.554c2.193 2.47 4.881 4.707 9.32 4.94-1.238-4.94 5.146-7.445 7.835-4.206 1.237-.25 1.962-.734 2.918-1.253-.248 1.253-.973 1.987-1.963 2.47.972 0 1.715-.25 2.44-.734-.23.985-1.203 1.987-1.928 2.47z" fill="currentColor"></path></svg>
</a>
<a target="_blank" data-track="social_share" href="//pinterest.com/pin/create/button/?url=https://www.llmetro.com/products/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761&media=//img.fantaskycdn.com/c9789e1e202f693e3e7097d32a8120ad_1024x1024.jpeg&description=Carbon%20Fiber%20Car%20Wrap%20Vinyl%20Roll%20with%20Air%20Release" class="text-current no-underline flex justify-center items-center dj_skin_text share-pinterest">
<svg class="" width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5 17.971a3.409 3.409 0 0 1-2.88-1.415l-.783 2.923c-.373 1.14-.9 2.226-1.565 3.23-.055.164-.513.491-.513.491a2.166 2.166 0 0 1-.308-.816 11.62 11.62 0 0 1 .043-3.53c.228-.961 1.468-6.114 1.468-6.114a4.393 4.393 0 0 1-.374-1.828c0-1.709 1.01-2.989 2.264-2.989.869-.012 1.584.669 1.597 1.523.002.07-.002.14-.01.21a24.3 24.3 0 0 1-1.037 4.098c-.246.956.343 1.927 1.316 2.169.174.043.354.061.532.052 2.225 0 3.937-2.304 3.937-5.632.082-2.68-2.062-4.918-4.79-5a4.645 4.645 0 0 0-.447.006c-2.99-.125-5.519 2.155-5.646 5.093a4.734 4.734 0 0 0 .92 3.057c.089.095.122.228.089.353-.095.386-.309 1.232-.35 1.4-.056.232-.179.279-.42.17a5.476 5.476 0 0 1-2.54-4.769c0-3.877 2.87-7.444 8.274-7.444 4.055-.2 7.509 2.867 7.714 6.851.005.088.008.175.009.262.012 4.234-2.71 7.65-6.5 7.65z" fill="currentColor"></path></svg>
</a>
</div>
</div>
</div>
<div class="plugin__buy_on_others empty-hidden"></div>
<input name="product_id" type="hidden" value="424490d3-1618-43ac-9b60-86ccc3f9eaf4"><input name="variant_id" type="hidden" value="3519c6ac-c9be-4995-ae16-d0ec5d0fcf60"><input name="note" type="hidden">
</form>
POST
<form id="footer__newsletter__form" class="footer__newsletter__form type-text-font-family relative flex items-center md:w-full text-base" action-xhr="/api/customers/newsletters" method="POST" custom-validation="show-first-on-submit"
@submiterror="footer__newsletter__error-ajax.rerender(data=event);footer__newsletter__error-ajax.toggleClass(class='hidden', force=false);">
<input class="footer__newsletter__input clear flex-1 block lg:w-full px-4 lg:px-3" id="footer__newsletter__input" type="text" name="email" placeholder="Enter your email" required="" pattern="([A-Za-z0-9_\-.])+@([A-Za-z0-9_\-.])+\.([A-Za-z]{2,4})"
@input-debounced="footer__newsletter__error-ajax.toggleClass(class='hidden', force=true);">
<button class="footer__newsletter__btn type-text-font-family m-0 flex items-center border-none leading-none" type="submit">
<span class="md:hidden">Subscribe</span>
<svg class="lg:hidden" width="20" height="6" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path opacity=".01" fill="currentColor" d="M0 0h20v6H0z"></path>
<path fill="currentColor" d="M0 2h14v2H0z"></path>
<path fill-rule="evenodd" clip-rule="evenodd" d="m20 3-6 3V0l6 3Z" fill="currentColor"></path>
</svg>
</button>
<div class="footer__newsletter__error-tip" validation-for="footer__newsletter__input" visible-when-invalid="patternMismatch" hidden=""> Please enter a valid email address. </div>
<div class="footer__newsletter__error-tip" validation-for="footer__newsletter__input" visible-when-invalid="valueMissing" hidden=""> Please enter your email address. </div>
<spz-render id="footer__newsletter__error-ajax" class="footer__newsletter__error-tip hidden i-spzhtml-layout-container i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt spz-unresolved i-spzhtml-unresolved" layout="container" manual=""
i-spzhtml-layout="container">
<template>
<div spz-if="${data.errors && data.errors.length > 0}"> ${data.errors && data.errors[0]} </div>
</template>
</spz-render>
<div class="footer__newsletter__success-tip flex-shrink-0 body-plus-2"> Thanks for subscribing </div>
</form>
<form>
<div class="quick-shop-content rounded-global-small">
<div class="quick-shop-inner-content">
<spz-variants name="quick-shop-variant" id="quick-shop-variants" class="pointer-events-none" layout="container" template="quick-shop-variant-template" spz-if="${product_options && product_options.length > 0}"
@mouseout="${mouse_out_event}" interact="hover" interference="" ${mouse_over_event}=""></spz-variants>
<button class="relative mt-5 lg:mt-6 button-primary flex items-center justify-center body-plus-2 type-text-font-family rounded-btn quick-shop_atc_btn" type="button" role="addToCart" data-track="click" data-track-content="add_to_cart"
data-track-source="add_to_cart">
<span role="content">${statusLan}</span>
<spz-render id="quick-shop-btn-price" layout="container" template="quick-shop-button-price-template" manual=""></spz-render>
<div class="loading items-center justify-center absolute inset-0" role="loading" show="">
<div class="loading-bounce"></div>
</div>
</button>
</div>
</div>
</form>
<form class="">
<div class="zb-flex">
<a href="${product.url}?${toQuery({ aid: 'smart_recommend.2.' + data.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || data.scm || '', ssp: data.ssp || '' })}" impr="1" imprevt="1" class="zb-w-[132px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || data.scm || ''}" data-spm="${productIndex}"> <ljs-render layout="container" id="smart_cart_pop_image_${product.id}" template="smart_cart_pop_image_template" manual=""></ljs-render> </a>
<div class="zb-flex zb-flex-col zb-flex-grow zb-justify-between">
<div>
<div class="zb-line-clamp-2 zb-text-sm zb-mb-2">${product.title}</div> <ljs-render layout="container" id="smart_cart_pop_price_${product.id}" template="smart_cart_pop_price_template" manual=""></ljs-render>
</div>
<div>
<div class="zb-relative zb-w-full zb-cursor-pointer">
<div class="zb-border zb-border-solid zb-border-[#eee] zb-px-3 zb-py-[10px] zb-flex zb-items-center zb-justify-between zb-font-semibold zb-text-sm zb-rounded-sm"
@tap="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);smart_cart_pop_variant_${product.id}_mobile.toggleClass(class=zb-hidden);smart_cart_pop_variant_${product.id}_pc.toggleClass(class=smart_cart_pop_variant_pc_show,force=true);smart_cart_pop_variant_modal_${product.id}.open"
spz-if="${!!(product.options && product.options.length && product.options.length > 0) && data.config.variant_select_visible}"> <ljs-render manual="" layout="container" id="smart_cart_pop_variant_text_${product.id}"
template="smart_cart_pop_variant_text_template"></ljs-render> <svg id="smart_pop_variant-select-${product.id}" width="12" height="8" class="zb-ml-2" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M6.00002 7.06738C6.19244 7.06775 6.38498 6.99453 6.5318 6.84772C6.54504 6.83447 6.55769 6.82086 6.56973 6.8069L11.1251 2.25152C11.418 1.95863 11.418 1.48375 11.1251 1.19086C10.8322 0.897968 10.3573 0.897968 10.0645 1.19086L6.00003 5.25529L1.9356 1.19086C1.64271 0.897968 1.16784 0.897968 0.874943 1.19086C0.58205 1.48375 0.58205 1.95863 0.874943 2.25152L5.43033 6.8069C5.44237 6.82086 5.45502 6.83447 5.46826 6.84772C5.61507 6.99453 5.8076 7.06775 6.00002 7.06738Z"
fill="#0A1533"></path>
</svg> </div> <ljs-lightbox layout="nodisplay" disable-unmount="" class="smart_cart_pop_lightbox_pc" id="smart_cart_pop_variant_modal_${product.id}" @close="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);">
<div id="smart_cart_pop_variant_${product.id}_pc" class="zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template"
onclick="event.stopPropagation()" disabled-dj-event="" interference=""> </ljs-variants></div>
</ljs-lightbox>
</div>
<div class="zb-mt-3"> <button product-id="${product.id}" id="smart_cart_pop_atc_btn_${product.id}"
class="zb-flex zb-items-center zb-justify-center zb-w-full zb-text-white zb-py-[10px] zb-h-9 zb-text-xs zb-font-normal zb-border-none zb-rounded-[4px] smart_cart_pop_atc_btn_bg" type="button" role="addToCart"
@tap="smart_cart_pop_loading_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_btn_${product.id}.toggleClass(class=zb-pointer-events-none);custom-func.addATCHook(activity_id='${data.id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${product.scm || data.scm}',ssp='${data.ssp}',spm='${data.spmBase}.${productIndex}')">
<ljs-render layout="container" id="smart_cart_pop_atc_${product.id}" template="smart_cart_pop_atc_template" mamual="" class="notranslate"> </ljs-render>
<div id="smart_cart_pop_added_${product.id}" class="zb-hidden"><span class="zb-flex zb-justify-center zb-gap-1"><svg width="14" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M8 16.5006C3.58171 16.5006 0 12.9183 0 8.5C0 4.08171 3.58171 0.5 8 0.5C12.4183 0.5 16 4.08171 16 8.5C16 12.9183 12.4183 16.5006 8 16.5006ZM8 2.04344C4.21314 2.04344 1.54287 4.71371 1.54287 8.50057C1.54287 12.2874 4.21314 14.9577 8 14.9577C11.7869 14.9577 14.4571 12.2874 14.4571 8.50057C14.4571 4.71371 11.7869 2.04344 8 2.04344ZM7.26057 11.1909L7.12229 11.3286L7.09543 11.3017C7.02286 11.336 6.94286 11.3577 6.85714 11.3577C6.73543 11.3577 6.62857 11.3109 6.536 11.2463L6.52229 11.2594L6.45371 11.1909C6.45314 11.1903 6.45314 11.1903 6.45257 11.1897L4.09771 8.83486L4.90629 8.02686L6.85714 9.97771L11.1629 5.67143L11.9714 6.48L7.26171 11.1897C7.26114 11.1903 7.26114 11.1903 7.26057 11.1909Z"
fill="white"></path>
</svg>Added</span></div>
<div id="smart_cart_pop_loading_${product.id}" class="zb-hidden">
<div class="smart_cart_pop_loading"></div>
</div>
</button> </div>
</div>
</div>
</div>
<div id="smart_cart_pop_variant_${product.id}_mobile" class="zb-hidden md:zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template" onclick="event.stopPropagation()"
disabled-dj-event="" interference=""> </ljs-variants></div>
</form>
Text Content
${(function(){ const get_random_six_digits = () => { return Math.random().toString().slice(-6) }; const wholesale_enabled = false; const setting_product_image_display = "100%"; const product_image = data.image; const secondary_image = data.secondImage; const image_width = product_image.width; let image_height = product_image.height; if(setting_product_image_display == '100%'){ image_height = image_width }else if(setting_product_image_display == '133.33%'){ image_height = image_width * 1.3333; }; const product_image_hover_on = true && !!secondary_image.src; const has_save_label = true && ((+data.compare_at_price) > (+data.price)); const is_single_variant = data.variants.length == 1; const min_price_variant_href = (data.min_price_variant && data.min_price_variant.available) ? data.min_price_variant.withinUrl : data.withinUrl; const retail_price_max = data.retail_price_max || data.compare_at_price_max; const THUMBNAILS_MAX_SIZE = 3; const thumbnails = data.thumbVariants.slice(0, THUMBNAILS_MAX_SIZE); const image_wrap_id = 'image_wrap_' + get_random_six_digits(); const image_carousel_id = 'image_carousel_' + get_random_six_digits(); const thumbnails_selector_id = 'thumbnails_selector_' + get_random_six_digits(); const form_id = 'form_' + get_random_six_digits(); const mixed_wholesale = data.mixed_wholesale; return ` ${ data.available ? `${ (+data.compare_at_price > +data.price) ? `Save ` : '' }` : "Sold out" } Mixed Lot ${DATA.TITLE} ${ data.price_min != data.price_max ? `from ` : ` ` } +${data.remainInvisibleThumbCount} ` })()} CAD * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Log in * Create an account ${data.data && data.data.count} * Home * All products * Colorful birds * Dull colored birds * Cardinal * Little bluebird * More links ${(function(){ const formatLinks = (links) => { return links.map(link => { link.tag = tags[link.title.toUpperCase()] || {}; link.target_attr = link.target == '_blank' ? 'target="_blank"' : ''; link.href_attr = link.url ? `href="${link.url}"` : ''; if(link.children && link.children.length){ link.children = formatLinks(link.children); } return link; }) }; const tags = "{}"; let linkList = [ { id: 59707801, title: "Home", url: "\/", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707803, title: "All products", url: "\/collections\/all-products", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707805, title: "Colorful birds", url: "\/collections\/colorful-birds", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707807, title: "Dull colored birds", url: "\/collections\/dull-colored-birds", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707809, title: " Cardinal", url: "\/collections\/cardinal", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707811, title: "Little bluebird", url: "\/collections\/little-bluebird", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, ].slice(offset); linkList = formatLinks(linkList); const hasChild = linkList.some(link => !!(link.children && link.children.length || link.product0.id)); return ` * ${link.title} ${link.tag.label} * ${second_link.title} ${second_link.tag.label} ${third_links.title} ${third_links.tag.label} * ${link.title} ${link.tag.label} ` })()} * Home * All products * Colorful birds * Dull colored birds * Cardinal * Little bluebird * More links ${(function(){ const formatLinks = (links) => { return links.map(link => { link.tag = tags[link.title.toUpperCase()] || {}; link.target_attr = link.target == '_blank' ? 'target="_blank"' : ''; link.href_attr = link.url ? `href="${link.url}"` : ''; if(link.children && link.children.length){ link.children = formatLinks(link.children); } return link; }) }; const tags = "{}"; let linkList = [ { id: 59707801, title: "Home", url: "\/", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707803, title: "All products", url: "\/collections\/all-products", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707805, title: "Colorful birds", url: "\/collections\/colorful-birds", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707807, title: "Dull colored birds", url: "\/collections\/dull-colored-birds", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707809, title: " Cardinal", url: "\/collections\/cardinal", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, { id: 59707811, title: "Little bluebird", url: "\/collections\/little-bluebird", target: "", levels: 0, product0: { id: (null) }, children: [ ] }, ].slice(offset); linkList = formatLinks(linkList); const hasChild = linkList.some(link => !!(link.children && link.children.length || link.product0.id)); return ` * ${link.title} ${link.tag.label} * ${second_link.title} ${second_link.tag.label} ${third_links.title} ${third_links.tag.label} * ${link.title} ${link.tag.label} ` })()} CAD * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) * Log in * Create an account ${data.data && data.data.count} ${(function(){ if (data === undefined || typeof data !== 'string' || data == '') return ''; const keyword = encodeURIComponent(data); return ` View more Your search for '${data}' did not yield any results. ` })()} * Home * All products * Colorful birds * Dull colored birds * Cardinal * Little bluebird CAD * United States Dollars (USD) * Euro (EUR) * United Kingdom Pounds (GBP) * Canadian Dollars (CAD) Log in (function(){ let w = window.innerWidth; function setHeaderCssVar() { const headerEle = document.getElementById('shoplaza-section-header'); if(!headerEle){ return }; document.body.style.setProperty('--window-height', `${window.innerHeight}px`); document.body.style.setProperty('--header-height', `${headerEle.clientHeight}px`); const mdScorllHideEle = headerEle.querySelector('.header__mobile .header__scroll_hide'); if (mdScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-md', `${mdScorllHideEle.clientHeight}px`); } const pcScorllHideEle = headerEle.querySelector('.header__desktop .header__scroll_hide'); if (pcScorllHideEle) { document.body.style.setProperty('--header-scroll-hide-height-pc', `${pcScorllHideEle.clientHeight}px`); } } function handlResize() { if(w == window.innerWidth){return}; w = window.innerWidth; setHeaderCssVar(); }; function init(){ setHeaderCssVar(); window.removeEventListener('resize', window._theme_header_listener) window._theme_header_listener = handlResize; window.addEventListener('resize', window._theme_header_listener); } init(); })(); YOU MAY ALSO LIKE YOU MAY ALSO LIKE Save CA$65.00 🎄CHRISTMAS SALE💥1/32ROLLS-ROYCE PHANTOM MODEL CAR - BUY TWO AND GET FREE SHIPPING! from CA$58.00 CA$123.00 +1 CAR ANTI-SKID STEERING WHEEL COVER CA$46.00 +5 🔥 CARBON FIBER TELESCOPIC FISHING POLE from CA$39.00 Save CA$54.00 🎄CHRISTMAS SALE💥1/32ROLLS-ROYCE PHANTOM MODEL CAR - BUY TWO AND GET FREE SHIPPING! from CA$69.00 CA$123.00 +1 6/18 ${data.index + 1}/${data.total} * * * * * * * * * * * * * * * * * * ${Array(data.total).fill(0).map((num, index) => ` * `).join('')} * Facebook * Twitter * Pinterest CARBON FIBER CAR WRAP VINYL ROLL WITH AIR RELEASE ${function() { const variantData = data.variant || {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760 in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760 in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size (Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; const saveType = "amount"; const productLabelDiscountOn = true; return ` - ${saveType == 'percentage' ? `-${variantData.off_ratio}%` : `-` } `; }()} CA$32.00 Color: ${function(){ const optName = "Color"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `${optionValueText}`; }()} Black Black White Red Orange Yellow Navy Sky Purple Silver Champagne Transparent Green Burgundy ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return ` ${tipText} ` }()} Size (Width×Length): ${function(){ const optName = "Size (Width×Length)"; const optionValue = data.originData.selectData ? data.originData.selectData[optName].value : data.originData.value; const optionValueText = optionValue ? (optionValue) : ''; return `${optionValueText}`; }()} 20×152cm/7.9×60 in 20×152cm/7.9×60 in 30cm×152cm/12×60 in 50cm×152cm/19.5×60 in 60cm×152cm/23.5×60 in ${function(){ const tipText = "Please select a {{ name }}".replace(/\{\{\s+name\s+\}\}/g, data); return ` ${tipText} ` }()} Quantity Add to cart CA$32.00 ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const productVariant = {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760 in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760 in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size (Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` ` }else { const price = variantData && variantData.price; return price != undefined ? ` ` : ''; } }()} Buy now Product was out of stock. Product is unavailable. ${function(){ const variantData = data.variant || {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760 in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760 in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size (Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; return ` Sku : ${variantData && variantData.sku} Weight : ${variantData && variantData.weight}${variantData && variantData.weight_unit} ` }()} Sku : AK1665194-20x152 Share the love DESCRIPTION * Limited Time 50% OFF * Free Shipping All Orders $69.99+ * Shipping Worldwide. * 24/7 Customer Support * Payments Via PayPal or CreditCard. This premium automotive is specially engineered for DIY'ers. This durable film is ideal for long-term fleet and motorsport marketing applications, and provides a lightweight, economical alternative to paint! The perfect dry carbon fiber is specially formulated for DIYers and professionals! Our low-tack acrylic adhesive allows you to place the vinyl on the surface and reposition it until the pattern lines up exactly the way you want it to, with no wrinkles or bubbles. Then simply apply heat and/or pressure to activate the glue and the vinyl will adhere securely. Unlike other films, the glue will not damage or erode the paint or surface coating. Dry carbon fiber is suitable for both interior and exterior applications. Adhesive has Top-Guard technology and won't eat through clear coats, paints, finishes for the life of the vinyl, guaranteed. At 1.2 miles in thickness, the film will stretch and conform to any shape and be thick enough that discoloration, stretch marks and other visible defects when wrapping and driving are kept to a minimum. This film has a genuine 3D texture that mimics the appearance of real carbon fiber. See it catch the light, changing appearance throughout the day! Unique Properties: * Highly textured carbon look * The most realistic gloss carbon fiber finish for exterior use. Easy to clean and maintain * Unique 3D visual effect in a completely smooth non-textured finish that is easier to apply, clean and maintain * Double-layered construction gives this film the most realistic look on the market. As a result of using the floating thermo gloss coat this film is suitable only for interior applications * Highly realistic low textured finish for more heavy duty applications. Abrasion resistant. Easy to clean and maintain Click ''Add to Cart'' Now - We won't Be Offering This Amazing Deal For Long! SATISFACTION GUARANTEE * Handling time>> Dispatch after payment * All packing processes are strictly sanitized * Money Back Fast Refund in 30 days after delivered & 24/7 Responsive Customer Service * Payment success & send e-mail for your confirmation before shipping. * Orders can be canceled, returned or exchanged if there are problems in quality, colors and delayed shipping AFTER-SALE SERVICE * If for whatever reason you're not completely satisfied, then return the product within 30 days! * We ship to 127 countries, including US, CA, AU and all countries in Europe. * We are convinced that we have some of the most innovative products in the world, and we hope to support this through arisk-free 90-day guarantee. * If you do not have a positive experience for any reason, we will do our best to ensure that you are 100% satisfied with the purchase. RECENTLY VIEWED Subscribe today to hear first about our sales Subscribe Please enter a valid email address. Please enter your email address. ${data.errors && data.errors[0]} Thanks for subscribing Footer menu * FAQ * CONTACT US * TERMS OF SERVICE * ABOUT US * PRIVACY POLICY * SHIPPING * RETURN POLICY Footer menu * FAQ * CONTACT US * TERMS OF SERVICE * ABOUT US * PRIVACY POLICY * SHIPPING * RETURN POLICY Contact us support@llmetro.com Clarence Court Wilmington North Carolina 28405 Contact us support@llmetro.com Clarence Court Wilmington North Carolina 28405 Follow us * * * Follow us * * * We accept * American Express * Mastercard * PayPal * Visa * JCB * Maestro * Diners Club * Discover We accept * American Express * Mastercard * PayPal * Visa * JCB * Maestro * Diners Club * Discover © 2024 llmetro CART Your shopping bag is empty Continue shopping * ${item.product_title} * ${item.options.map(option => option.value).join('/')} * ${propertie.name}/${propertie.isImage ? `View image` : propertie.value} Free gift Mixed Lot *${item.quantity} ${item.item_text} ${discount_item.title} (-) Total: ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} * ${discount_application.title}: - ${data.invalid_msg} Check out Taxes and shipping calculated at checkout ${data.invalid_msg} Total: ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} ${function() { const textArray = ("Save {{save_amount}}").split(/\{\{\s*save_amount\}\}/); if (textArray.length > 0 && textArray.length < 2) { textArray.push(''); } return textArray.map((text, index) => { if (index == 0) { return `${text}`; } return ` ${text} `; }).join(''); }()} * ${discount_application.title}: - Check out ${data.invalid_msg} Check out Taxes and shipping calculated at checkout * Subtotal: * ${discount_application.title}: - Total: Check out Taxes and shipping calculated at checkout const summaryStickyRender = document.querySelector('#cart-drawer-summary-sticky-render'); if (summaryStickyRender) { document.body.style.setProperty('--cart-drawer-summary-sticky-height', summaryStickyRender.clientHeight + 'px'); } View Cart ${function(){ const productData = data.product; let product_change_event = '', mouse_over_event = ' '; mouse_out_event = ''; const product_options = productData.options.filter(Boolean) || []; for (let opt of product_options) { product_change_event = product_change_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectedValues.${opt.name});`; mouse_out_event = mouse_out_event + `quick-shop-selected-variant-${opt.name}.rerender(data=event.selectData.${opt.name});`; mouse_over_event = mouse_over_event + `@${opt.name}Mouseover="quick-shop-selected-variant-${opt.name}.rerender(data=event);"`; } const selectedVariant = productData.variants.find(v => v.available) || productData.variants[0]; const statusLan = ((selectedVariant && !selectedVariant.available) || (!selectedVariant && !productData.available)) ? "Sold out" : "Add to cart"; return ` ${statusLan} ` }()} ${function(){ const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const variantData = currentSelectVariant || defaultVariant || data; const retail_price = variantData.retail_price || 0; return ` Retail ` }()} ${function(){ const wholesale_enabled = false; const qty = data.quantity || 1; const currentSelectVariant = data.variant; const defaultVariant = (data.product && data.product.variants && data.product.variants[0]); const productVariant = {"id":"3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","product_id":"424490d3-1618-43ac-9b60-86ccc3f9eaf4","title":"Black-20\u00d7152cm\/7.9\u00d760 in","weight_unit":"lb","inventory_quantity":994,"sku":"AK1665194-20x152","barcode":"","position":1,"option1":"Black","option2":"20\u00d7152cm\/7.9\u00d760 in","option3":"","note":"","image":{"src":"\/\/img.fantaskycdn.com\/364222c2700b6ce382cd8eafb8861fd0.jpeg","path":"364222c2700b6ce382cd8eafb8861fd0.jpeg","width":800,"height":800,"alt":"","aspect_ratio":1},"wholesale_price":[{"price":32,"min_quantity":1}],"weight":"0","compare_at_price":"0","price":"32","retail_price":"0","available":true,"url":"\/products\/cfw642-24c830a73-a7f1-453a-8c94-c0e84fd15761?variant=3519c6ac-c9be-4995-ae16-d0ec5d0fcf60","available_quantity":999999999,"options":[{"name":"Color","value":"Black"},{"name":"Size (Width\u00d7Length)","value":"20\u00d7152cm\/7.9\u00d760 in"}],"off_ratio":0,"flashsale_info":[],"sales":10}; const variantData = currentSelectVariant || defaultVariant || productVariant; const wholesale_price = variantData.wholesale_price || []; if(wholesale_enabled && wholesale_price.length > 0) { let wholesaleIndex = wholesale_price.findIndex(item => { return item.min_quantity > qty; }); if(wholesaleIndex < 0){ wholesaleIndex = wholesale_price.length - 1; }else if(wholesaleIndex > 0){ wholesaleIndex = wholesaleIndex - 1; } const wholesalePrice = wholesale_price[wholesaleIndex] || ''; return ` ` }else { const price = variantData && variantData.price; return price != undefined ? ` ` : ''; } }()} ${function() { let variantImageShowed = false; const currentProduct = data.product; return (currentProduct.options || []).map((option, index) => { const optionName = option.name || ''; const position = `option${index + 1}`; let isThumbImage = false; if (currentProduct.need_variant_image && !variantImageShowed) { const variantNames = ["color"] || []; for (let i = 0, len = variantNames.length; i < len; i++) { const name = variantNames[i].toLowerCase(); if (name === optionName.toLowerCase()) { isThumbImage = true; variantImageShowed = true; } } } const variantType = "button"; const thumbStyle = "image_with_text"; return ` ${optionName}: ${option.values.map((value, idx) => { const selected = data.selectedValues[optionName] == value ? 'checked' : ''; let thumbImage = null; if (isThumbImage) { const variants = currentProduct.variants; for (let i = 0, len = variants.length; i < len; i++) { const variant = variants[i]; if (variant[position] == value && thumbImage == null) { thumbImage = variant.image; break; } } } return ` ${value} ` }).join('')} ${optionName} ${option.values.map(value => { const selected = data.selectedValues[optionName] == value ? 'selected' : ''; return `${value}` }).join('')} ` }).join(''); }()} ${data.originData && data.originData.value || data.value} 111 Item has been added ${(function(){ const products = data.products; const getDefaultVariant = function(product){ if (product.min_price_variant.available){ return product.min_price_variant; }else { const avail_variants = product.variants.filter(function(variant){ return variant.available; }); if (avail_variants.length) { return avail_variants[0]; } } }; const toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v => `${k}[]=${encodeURIComponent(v)}`).join('&') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&'); const getDefaultTrackParams = function(product, index){ const variant = getDefaultVariant(product); const params = { aid: 'smart_recommend.2.' + data.id, scm: product.scm || data.scm || '', spm: data.spmBase + '.' + index, ssp: data.ssp || '', }; const trackParams = Object.keys(params).map(function(key){ return params[key]; }).join('__'); return trackParams; }; const hasMore = (data.products.length - data.target_top_product_num - data.page * data.limit) === 0; return ` ${(function(){ return ` ${data.config.pop_title} ${data.rebate_tips || ''} `; })()} ${product.title} Added `; })()} class SpzCustomComponent extends SPZ.BaseElement { constructor(element) { super(element); this.templates_ = null; this.container_ = null; this._atcLineItem = {}; this.cart_ = {}; this.top_product_ids_ = []; this.products_ = []; this.activityId_ = null; this.rendered_ = false; this.myInterceptor_ = null; this.i18n_ = {}; this.config_ = {}; this.page_ = 1; this.limit_ = 10; this.loading_ = false; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('pop mounted'); this.i18n_ = window.smartRecommendI18n && window.smartRecommendI18n[document.documentElement.lang || 'en-US'] || {}; const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const modalEl = document.getElementById("smart_cart_pop_modal"); const spmBase = `smart_recommend_2`; const extra = { spmBase: spmBase, i18n: this.i18n_, }; const that = this; document.addEventListener('dj.addToCart', (event) => { try { const e = event.detail; if (e.source === 'buy_now' || window.__upsell_block || this.rendered_) return; that.fetchActivityData({product_id: e.product_id, variant_id: e.variant_id}).then(data => { if (!data || !data.products || !data.products.length) return; that.config_ = data.config; const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` #plugin_recommend_atc_pop { display: none !important; } `; document.head.appendChild(recommendStyle); if (data.config.pop_frequency === 'once' && window.sessionStorage.getItem('smart_pop_times') > 0) return; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ api.render(Object.assign({}, data, extra), true).then(function() { that.rendered_ = true; if (data.products.length) { const headEl = document.getElementById("smart_cart_pop_head_render"); if (headEl) { SPZ.whenApiDefined(headEl).then(function(head){ head.render({ data: data }); }); } SPZ.whenApiDefined(modalEl).then(function(api){ that.impressListen('#smart_cart_pop_activity', function(){ that.trackPluginImpression_(data); }); api.open(); const intersectionObserver = new IntersectionObserver( function (entries) { if (entries[0].intersectionRatio > 0){ !that.loading_ && (that.products_.length - that.target_top_product_num_) === that.page_ * that.limit_ && that.viewMore(); } }, { threshold: [0.1] } ); intersectionObserver.observe( document.querySelector('#smart_cart_pop_view_more_text') ); }); } }) }); }) } catch (e) { console.error(e); } }); } unmountCallback() { } viewMore () { const cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const that = this; const data = {}; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){ that.fetchActivityData({ page: that.page_ + 1, limit: that.limit_ }).then(function(data) { data.products = that.products_; data.target_top_product_num = that.target_top_product_num_; data.i18n = that.i18n_; data.spmBase = `smart_recommend_2`; api.render(data); }) }) } fetchActivityData(data) { const that = this; if (data.product_id) { that._atcLineItem = data; } that.loading_ = true; return that.getCart().then(cart => { that.cart_ = cart.cart; return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_activities", { method: "POST", headers: { "Content-Type": "application/json", "store-id": window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ "show_type": 2, "line_item": { "product_id": that._atcLineItem.product_id, "variant_id": that._atcLineItem.variant_id, }, line_items: cart.cart.line_items, "page": data.page || 1, "limit": data.limit || 10, }) }).then(function(res){ if(res.ok){ return res.json(); } }).then(function(data){ data.cart = cart.cart; if (data.page === 1) { that.target_top_product_num_ = data.target_top_product_num || 0; } that.products_ = that.products_.concat(data.products || []); that.page_ = data.page || 1; that.limit_ = data.limit || 10; return data; }).catch(function(e){ console.log(e); }).finally(function(){ that.loading_ = false; }) }); }; setAction_() { this.registerAction('changeBannerColor', (data) => { if (!data.args.data || !data.args.data.data || !data.args.data.data.data) return false; const config = data.args.data.data.data.config; const bannerBgEl = document.querySelector('.smart_cart_pop_banner_bg'); if (bannerBgEl && config) { bannerBgEl.style.background = config.banner_bg_color; bannerBgEl.style.color = config.banner_text_color; } }); this.registerAction('handleProductChange', (data) => { const that = this; const imageEl = document.getElementById(`smart_cart_pop_image_${data.args.data.product_id}`); SPZ.whenApiDefined(imageEl).then(function(api){ api.render({ data: data.args.data, config: that.config_ }); }); const atcTextEl = document.getElementById(`smart_cart_pop_atc_${data.args.data.product_id}`); SPZ.whenApiDefined(atcTextEl).then(function(api){ api.render({ data: data.args.data, defaultText: data.args.defaultText, soldOutText: that.i18n_.sold_out }); }); if (data.args.data.variant.available) { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.remove('zb-pointer-events-none'); } else { document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.add('zb-pointer-events-none'); } }); this.registerAction('handleProduct', (detail) => { const that = this; this.renderProductsForm_(detail.args.data.data); }); this.registerAction('addATCHook', (data) => { const params = data.args; this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: 'smart_recommend.2.' + params.activity_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${params.spm}`, }, once: true }); }); this.registerAction('handleAtcSuccess', (detail) => { detail.args.data.product = detail.args.data.product || {}; detail.args.data.variant = detail.args.data.variant || {}; const defParams = detail.args.product.split('__'); const product_id = detail.args.data.product.id; const product_title = detail.args.data.product.title; const variant_id = detail.args.data.variant.id; const price = detail.args.data.variant.price; const aid = defParams[0]; const ifb = detail.args.data.product.ifb; const cfb = detail.args.data.product.cfb; const scm = defParams[1]; const spm = defParams[2]; const ssp = defParams[3]; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; const activity_id = `${detail.args.activity_id}`; const target_drive_way = detail.args.target_drive_way; document.getElementById(`smart_cart_pop_loading_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_added_${product_id}`).classList.remove('zb-hidden'); setTimeout(() => { document.getElementById(`smart_cart_pop_added_${product_id}`).classList.add('zb-hidden'); document.getElementById(`smart_cart_pop_atc_${product_id}`).classList.remove('zb-hidden'); document.getElementById(`smart_cart_pop_atc_btn_${product_id}`).classList.remove('zb-pointer-events-none'); }, 1000); this.tranckAddToCart(params); if (target_drive_way === 'rebate') { const bannerEl = document.getElementById(`smart_cart_pop_banner`); this.getRecommendInfo(activity_id).then(res => { if (res && res.rebate_tips) { bannerEl.innerHTML = res.rebate_tips; } }) } }); this.registerAction('handleCartSummary', (event) => { const that = this; const checkoutButtonEle = document.getElementById("smart_cart_pop_checkout_button"); if (checkoutButtonEle) { SPZ.whenApiDefined(checkoutButtonEle).then(function(api){ api.render({ i18n: that.i18n_ }, false); }); } const tipEl = document.getElementById("smart_cart_pop_tip_info"); const cart = event && event.args && event.args.data && event.args.data.data; if (!tipEl || !cart) return; let total_price = cart.total_price; if (!total_price) { SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); } else { this.getBindDiscount_(cart.line_items).then(res => { if (res && res.discount_code){ const total = cart.line_price - cart.total_discount - res.bundle_discount_value; if (total > 0) { total_price = total; } else { total_price = 0; } } SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price: total_price, i18n: that.i18n_ }, false); }); }) } }); this.registerAction('open', () => { window.sessionStorage.setItem('smart_pop_times', Number(window.sessionStorage.getItem('smart_pop_times')) + 1); }); this.registerAction('close', () => { this.rendered_ = false; this.products_ = []; window.djInterceptors && window.djInterceptors.track.eject(this.myInterceptor_); }); } getCart() { return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/cart`, { method: 'GET', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, }).then(res => res.json()) } getRecommendInfo (activity_id) { return this.getCart().then(cart => { this.cart_ = cart.cart; return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/possum/recommend_info`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', }, body: JSON.stringify({ show_type: 2, rule_id: `${activity_id}`, line_items: cart.cart.line_items, line_item: this._atcLineItem, }) }).then(res => res.json()) }) } renderProductsForm_(data) { const products = data.products; const listPopRenderEl = document.getElementById("smart_cart_pop_render"); if (!listPopRenderEl) return; listPopRenderEl.querySelectorAll('.smart_cart_pop_atc_btn_bg').forEach(function(el){ el.style.background = data.config.add_to_cart_button_color; }); products.forEach(function(product){ const productId = product.id; const productFormEls = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]`); let variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_mobile ljs-variants`); if (window.innerWidth > 768) { variantsEl = listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"] #smart_cart_pop_variant_${productId}_pc ljs-variants`); } productFormEls.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.setProduct(product); }); }); variantsEl.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){ api.handleRender(product); }); }) }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } } trackPluginImpression_(rule){ if (window.sa && window.sa.track) { window.sa.track("module_impressions", { aid: `smart_recommend.2.${rule.id}` }); } } getBindDiscount_(carts) { let bundle_sale_ids = []; try { bundle_sale_ids = sessionStorage['bundle_sale_ids'] && JSON.parse(sessionStorage['bundle_sale_ids']).filter((item, index, arr) => arr.indexOf(item, 0) === index).slice(-5); } catch (err) { console.error(err); } if (!carts.length) { Promise.resolve(); } return fetch(`${window.SHOPLAZZA.routes.root || ''}/api/bundle-sales/cart`, { method: 'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8', 'store-id': window.SHOPLAZZA.shop.shop_id, }, body: JSON.stringify({ cart: carts, action_type: 'cart', bundle_sale_ids }) }).then(res => res.json()) } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart', SpzCustomComponent); ${function(){ return ` ${data.data.rebate_tips || ''} `; }()} ${function(){ const getImageHeight = function(image){ const width = image.width || 500; const height = image.height || 500; const image_size = data.config.image_size || 0; let ratio = 0; if(image_size == 0){ ratio = (height / width).toFixed(2); }else if(image_size == 1){ ratio = 1.5; } return 132 * ratio; }; const image = data.data.variant.image || data.data.product.image; return ` `; }()} ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant = product.min_price_variant.available ? product.min_price_variant : avail_variants.length && avail_variants[0]; return ` ${option.name} ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` ${value} ` }).join("") } ` })()} ${(function(){ const variant = data.variant; return ` `; })()} ${(function(){ const variant = data.variant; return ` ${ variant.options.map(function(option){ return option.value; }).join("/") || 'Not exist' } `; })()} ${(function(){ const variant = data.data && data.data.variant; const defaultText = data.defaultText || 'Add To Cart'; const text = (!variant || variant.available) ? defaultText: data.soldOutText; return ` ${text} `; })()} ${(function(){ let cart = data; if(data.data) { cart = data.data; } return ` ${cart.item_count >=0 ? cart.item_count : '..'} `; })()} ${(function(){ return ` ${data.i18n.checkout} `; })()} GIFTS POINTS