





























if (!customElements.get('variant-selects')) {
/**
* @class
* @function VariantSelects
*/
class VariantSelects extends HTMLElement {
constructor() {
super();
this.isDisabledFeature = this.dataset.isDisabled;
this.updateUrl = this.dataset.updateUrl === 'true';
this.addEventListener('change', this.onVariantChange);
this.productWrapper = this.closest('.thb-product-detail');
this.productSlider = this.productWrapper.querySelector('.product-images');
this.hideVariants = this.dataset.hideVariants === 'true';
}
connectedCallback() {
this.updateOptions();
this.updateMasterId();
this.setDisabled();
this.setImageSet();
}
onVariantChange() {
this.updateOptions();
this.updateMasterId();
this.toggleAddButton(true, '', false);
this.updatePickupAvailability();
this.removeErrorMessage();
this.updateVariantText();
this.setDisabled();
if (!this.currentVariant) {
this.toggleAddButton(true, '', true);
this.setUnavailable();
} else {
this.updateMedia();
if (this.updateUrl) {
this.updateURL();
}
this.updateVariantInput();
this.renderProductInfo();
//this.updateShareUrl();
}
dispatchCustomEvent('product:variant-change', {
variant: this.currentVariant,
sectionId: this.dataset.section
});
}
updateOptions() {
this.fieldsets = Array.from(this.querySelectorAll('fieldset'));
this.options = [];
this.fieldsets.forEach((fieldset, i) => {
if (fieldset.querySelector('select')) {
this.options.push(fieldset.querySelector('select').value);
} else if (fieldset.querySelectorAll('input').length) {
this.options.push(fieldset.querySelector('input:checked').value);
}
});
}
updateVariantText() {
const fieldsets = Array.from(this.querySelectorAll('fieldset'));
fieldsets.forEach((item, i) => {
let label = item.querySelector('.form__label__value');
if (label) {
label.innerHTML = this.options[i];
}
});
}
updateMasterId() {
this.currentVariant = this.getVariantData().find((variant) => {
return !variant.options.map((option, index) => {
return this.options[index] === option;
}).includes(false);
});
}
updateMedia() {
if (!this.currentVariant) return;
if (!this.currentVariant.featured_media) return;
let productSlider = this.closest('.thb-product-detail').querySelector('.product-images'),
thumbnails = this.closest('.thb-product-detail').querySelector('#Product-Thumbnails');
this.setActiveMedia(`#Slide-${this.dataset.section}-${this.currentVariant.featured_media.id}`, `#Thumb-${this.dataset.section}-${this.currentVariant.featured_media.id}`, productSlider, thumbnails);
}
setActiveMedia(mediaId, thumbId, productSlider, thumbnails) {
let flkty = Flickity.data(productSlider),
activeMedia = productSlider.querySelector(mediaId);
if (flkty && this.hideVariants) {
if (productSlider.querySelector('.product-images__slide.is-initial-selected')) {
productSlider.querySelector('.product-images__slide.is-initial-selected').classList.remove('is-initial-selected');
}
[].forEach.call(productSlider.querySelectorAll('.product-images__slide-item--variant'), function (el) {
el.classList.remove('is-active');
});
activeMedia.classList.add('is-active');
activeMedia.classList.add('is-initial-selected');
this.setImageSetMedia();
if (thumbnails) {
let activeThumb = thumbnails.querySelector(thumbId);
if (thumbnails.querySelector('.product-thumbnail.is-initial-selected')) {
thumbnails.querySelector('.product-thumbnail.is-initial-selected').classList.remove('is-initial-selected');
}
[].forEach.call(thumbnails.querySelectorAll('.product-images__slide-item--variant'), function (el) {
el.classList.remove('is-active');
});
activeThumb.classList.add('is-active');
activeThumb.classList.add('is-initial-selected');
}
productSlider.reInit(this.imageSetIndex);
productSlider.selectCell(mediaId);
} else if (flkty) {
productSlider.selectCell(mediaId);
}
}
updateURL() {
if (!this.currentVariant || this.dataset.updateUrl === 'false') return;
window.history.replaceState({}, '', `${this.dataset.url}?variant=${this.currentVariant.id}`);
}
updateShareUrl() {
const shareButton = document.getElementById(`Share-${this.dataset.section}`);
if (!shareButton) return;
shareButton.updateUrl(`${window.shopUrl}${this.dataset.url}?variant=${this.currentVariant.id}`);
}
updateVariantInput() {
const productForms = document.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-installment`);
productForms.forEach((productForm) => {
const input = productForm.querySelector('input[name="id"]');
input.value = this.currentVariant.id;
input.dispatchEvent(new Event('change', {
bubbles: true
}));
});
}
updatePickupAvailability() {
const pickUpAvailability = document.querySelector('.pickup-availability-wrapper');
if (!pickUpAvailability) return;
if (this.currentVariant && this.currentVariant.available) {
pickUpAvailability.fetchAvailability(this.currentVariant.id);
} else {
pickUpAvailability.removeAttribute('available');
pickUpAvailability.innerHTML = '';
}
}
removeErrorMessage() {
const section = this.closest('section');
if (!section) return;
const productForm = section.querySelector('product-form');
if (productForm) productForm.handleErrorMessage();
}
getSectionsToRender() {
return [`price-${this.dataset.section}`, `inventory-${this.dataset.section}`, `sku-${this.dataset.section}`];
}
renderProductInfo() {
let sections = this.getSectionsToRender();
fetch(`${this.dataset.url}?variant=${this.currentVariant.id}§ion_id=${this.dataset.section}`)
.then((response) => response.text())
.then((responseText) => {
const html = new DOMParser().parseFromString(responseText, 'text/html');
sections.forEach((id) => {
const destination = document.getElementById(id);
const source = html.getElementById(id);
if (source && destination) destination.innerHTML = source.innerHTML;
const price = document.getElementById(id);
if (price) price.classList.remove('visibility-hidden');
});
this.toggleAddButton(!this.currentVariant.available, window.theme.variantStrings.soldOut);
});
}
toggleAddButton(disable = true, text = false, modifyClass = true) {
const productForm = document.getElementById(`product-form-${this.dataset.section}`);
if (!productForm) return;
const productTemplate = productForm.closest('.product-form').getAttribute('template');
const addButton = productForm.querySelector('[name="add"]');
const addButtonText = productForm.querySelector('[name="add"] > span');
if (!addButton) return;
if (disable) {
addButton.setAttribute('disabled', 'disabled');
if (text) addButtonText.textContent = text;
} else {
addButton.removeAttribute('disabled');
addButton.classList.remove('loading');
addButtonText.textContent = window.theme.variantStrings.addToCart;
if (productTemplate?.includes('pre-order')) {
addButtonText.textContent = window.theme.variantStrings.preOrder;
} else {
addButtonText.textContent = window.theme.variantStrings.addToCart;
}
}
if (!modifyClass) return;
}
setUnavailable() {
const button = document.getElementById(`product-form-${this.dataset.section}`);
const addButton = button.querySelector('[name="add"]');
const addButtonText = button.querySelector('[name="add"] > span');
const price = document.getElementById(`price-${this.dataset.section}`);
if (!addButton) return;
addButtonText.textContent = window.theme.variantStrings.unavailable;
addButton.classList.add('sold-out');
if (price) price.classList.add('visibility-hidden');
}
setDisabled() {
if (this.isDisabledFeature != 'true') {
return;
}
const variant_data = this.getVariantData();
if (variant_data) {
let selected_options = false;
if (this.currentVariant) {
selected_options = this.currentVariant.options.map((value, index) => {
return {
value,
index: `option${index + 1}`
};
});
} else {
let found_option = variant_data.find(option => {
return option.option1 === this.options[0];
});
if (found_option) {
selected_options = [
{
"value": this.options[0],
"index": "option1"
},
{
"value": found_option.option2,
"index": "option2"
}
];
} else {
return;
}
}
const available_options = this.createAvailableOptionsTree(variant_data, selected_options);
this.fieldsets.forEach((fieldset, i) => {
const fieldset_options = Object.values(available_options)[i];
if (fieldset_options) {
if (fieldset.querySelector('select')) {
fieldset_options.forEach((option, option_i) => {
const optEl = fieldset.querySelector('option[value=' + JSON.stringify(option.value) + ']');
if (optEl) {
if (option.isUnavailable) {
optEl.disabled = true;
optEl.hidden = true;
} else {
optEl.disabled = false;
optEl.hidden = false;
}
}
});
} else if (fieldset.querySelectorAll('input').length) {
fieldset.querySelectorAll('input').forEach((input, input_i) => {
const isUnavailable = fieldset_options[input_i].isUnavailable;
const labelEl = fieldset.querySelector('label[for="' + input.id + '"]');
if (isUnavailable) {
input.hidden = true;
if (labelEl) labelEl.hidden = true;
} else {
input.hidden = false;
if (labelEl) labelEl.hidden = false;
}
});
}
}
});
}
return true;
}
getImageSetName(variant_name) {
return variant_name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/-$/, '').replace(/^-/, '');
}
setImageSet() {
if (!this.productSlider) return;
let dataSetEl = this.productSlider.querySelector('[data-set-name]');
if (dataSetEl) {
this.imageSetName = dataSetEl.dataset.setName;
this.imageSetIndex = this.querySelector('.product-form__input[data-handle="' + this.imageSetName + '"]').dataset.index;
this.dataset.imageSetIndex = this.imageSetIndex;
this.setImageSetMedia();
}
}
setImageSetMedia() {
if (!this.imageSetIndex) {
return;
}
let setValue = this.getImageSetName(this.currentVariant[this.imageSetIndex]);
let group = this.imageSetName + '_' + setValue;
let selected_set_images = this.productWrapper.querySelectorAll(`.product-images__slide[data-set-name="${this.imageSetName}"]`),
selected_set_thumbs = this.productWrapper.querySelectorAll(`.product-thumbnail[data-set-name="${this.imageSetName}"]`);
if (this.hideVariants) {
// Product images
this.productWrapper.querySelectorAll('.product-images__slide').forEach(thumb => {
if (thumb.dataset.group && thumb.dataset.group !== group) {
thumb.classList.remove('is-active');
}
});
selected_set_images.forEach(thumb => {
thumb.classList.toggle('is-active', thumb.dataset.group === group);
});
// Product thumbnails
this.productWrapper.querySelectorAll('.product-thumbnail').forEach(thumb => {
if (thumb.dataset.group && thumb.dataset.group !== group) {
thumb.classList.remove('is-active');
}
});
selected_set_thumbs.forEach(thumb => {
thumb.classList.toggle('is-active', thumb.dataset.group === group);
});
}
}
createAvailableOptionsTree(variant_data, selected_options) {
// Reduce variant array into option availability tree
return variant_data.reduce((options, variant) => {
// Check each option group (e.g. option1, option2, option3) of the variant
Object.keys(options).forEach(index => {
if (variant[index] === null) return;
let entry = options[index].find(option => option.value === variant[index]);
if (typeof entry === 'undefined') {
// If option has yet to be added to the options tree, add it
entry = {
value: variant[index],
isUnavailable: true
};
options[index].push(entry);
}
// Check how many selected option values match a variant
const countVariantOptionsThatMatchCurrent = selected_options.reduce((count, {
value,
index
}) => {
return variant[index] === value ? count + 1 : count;
}, 0);
// Only enable an option if an available variant matches all but one current selected value
if (countVariantOptionsThatMatchCurrent >= selected_options.length - 1) {
entry.isUnavailable = entry.isUnavailable && variant.available ? false : entry.isUnavailable;
}
// Make sure if a variant is unavailable, disable currently selected option
if ((!this.currentVariant || !this.currentVariant.available) && selected_options.find((option) => option.value === entry.value && index === option.index)) {
entry.isUnavailable = true;
}
// First option is always enabled
if (index === 'option1') {
entry.isUnavailable = entry.isUnavailable && variant.available ? false : entry.isUnavailable;
}
});
return options;
}, {
option1: [],
option2: [],
option3: []
});
}
getVariantData() {
this.variantData = this.variantData || JSON.parse(this.querySelector('[type="application/json"]').textContent);
return this.variantData;
}
}
customElements.define('variant-selects', VariantSelects);
/**
* @class
* @function VariantRadios
*/
class VariantRadios extends VariantSelects {
constructor() {
super();
}
updateOptions() {
const fieldsets = Array.from(this.querySelectorAll('fieldset'));
this.options = fieldsets.map((fieldset) => {
return Array.from(fieldset.querySelectorAll('input')).find((radio) => radio.checked).value;
});
}
updateVariantText() {
}
}
customElements.define('variant-radios', VariantRadios);
}
if (!customElements.get('product-slider')) {
/**
* @class
* @function ProductSlider
*/
class ProductSlider extends HTMLElement {
constructor() {
super();
this.addEventListener('change', this.setupProductGallery);
}
connectedCallback() {
this.product_container = this.closest('.thb-product-detail');
this.thumbnail_container = this.product_container.querySelector('.product-thumbnail-container');
this.video_containers = this.querySelectorAll('.product-single__media-external-video--play');
this.setOptions();
// Start Slider
this.init();
}
setOptions() {
this.hide_variants = this.dataset.hideVariants == 'true';
if (this.thumbnail_container) {
this.thumbnails = this.thumbnail_container.querySelectorAll('.product-thumbnail');
}
this.prev_button = this.querySelector('.flickity-prev');
this.next_button = this.querySelector('.flickity-next');
this.options = {
wrapAround: true,
pageDots: true,
contain: true,
adaptiveHeight: true,
initialIndex: '.is-initial-selected',
prevNextButtons: false,
fade: false,
cellSelector: '.product-images__slide.is-active'
};
if (this.classList.contains('product-quick-images')) {
this.options.cellAlign = 'left';
this.options.pageDots = false;
this.options.freeScroll = true;
this.options.wrapAround = false;
}
}
init() {
this.flkty = new Flickity(this, this.options);
this.selectedIndex = this.flkty.selectedIndex;
// Setup Events
this.setupEvents();
// Start Gallery
this.setupProductGallery();
}
reInit() {
this.flkty.destroy();
this.setOptions();
this.flkty = new Flickity(this, this.options);
// Setup Events
this.setupEvents();
this.selectedIndex = this.flkty.selectedIndex;
}
setupEvents() {
const _this = this;
if (this.prev_button) {
let prev = this.prev_button.cloneNode(true);
this.prev_button.parentNode.append(prev);
this.prev_button.remove();
prev.addEventListener('click', (event) => {
this.flkty.previous();
});
prev.addEventListener('keyup', (event) => {
this.flkty.previous();
event.preventDefault();
});
}
if (this.next_button) {
let next = this.next_button.cloneNode(true);
this.next_button.parentNode.append(next);
this.next_button.remove();
next.addEventListener('click', (event) => {
this.flkty.next();
});
next.addEventListener('keyup', (event) => {
this.flkty.next();
event.preventDefault();
});
}
this.flkty.on('settle', function (index) {
_this.selectedIndex = index;
});
this.flkty.on('change', (index) => {
let previous_slide = this.flkty.cells[_this.selectedIndex].element,
previous_media = previous_slide.querySelector('.product-single__media'),
slide = this.flkty.cells[index].element,
media = slide.querySelector('.product-single__media'),
active_thumb = false;
if (this.thumbnail_container) {
let active_thumbs = Array.from(this.thumbnails).filter(element => element.classList.contains('is-active')),
active_thumb = active_thumbs[index] ? active_thumbs[index] : active_thumbs[0];
this.thumbnails.forEach((item, i) => {
item.classList.remove('is-initial-selected');
});
active_thumb.classList.add('is-initial-selected');
}
requestAnimationFrame(() => {
if (active_thumb) {
if (active_thumb.offsetParent === null) {
return;
}
const windowHalfHeight = active_thumb.offsetParent.clientHeight / 2,
windowHalfWidth = active_thumb.offsetParent.clientWidth / 2;
active_thumb.parentElement.scrollTo({
left: active_thumb.offsetLeft - windowHalfWidth + active_thumb.clientWidth / 2,
top: active_thumb.offsetTop - windowHalfHeight + active_thumb.clientHeight / 2,
behavior: 'smooth'
});
}
});
// Stop previous video
if (previous_media.classList.contains('product-single__media-external-video')) {
if (previous_media.dataset.provider === 'youtube') {
previous_media.querySelector('iframe').contentWindow.postMessage(JSON.stringify({
event: "command",
func: "pauseVideo",
args: ""
}), "*");
} else if (previous_media.dataset.provider === 'vimeo') {
previous_media.querySelector('iframe').contentWindow.postMessage(JSON.stringify({
method: "pause"
}), "*");
}
} else if (previous_media.classList.contains('product-single__media-native-video')) {
previous_media.querySelector("video").pause();
}
// Draggable.
if (media.classList.contains('product-single__media-model')) {
this.setDraggable(false);
} else {
this.setDraggable(true);
}
});
if (this.thumbnail_container) {
setTimeout(() => {
let active_thumbs = Array.from(this.thumbnails).filter(element => element.clientWidth > 0);
active_thumbs.forEach((thumbnail, index) => {
thumbnail.addEventListener('click', () => {
this.thumbnailClick(thumbnail, index);
});
});
});
}
let scrollbar = document.querySelector('.product-quick-images__scrollbar>div');
if (scrollbar) {
this.flkty.on('scroll', function (progress) {
progress = Math.max(0, Math.min(1, progress));
scrollbar.style.transform = 'scaleX(' + progress + ')';
});
}
}
thumbnailClick(thumbnail, index) {
[].forEach.call(this.thumbnails, function (el) {
el.classList.remove('is-initial-selected');
});
thumbnail.classList.add('is-initial-selected');
this.flkty.select(index);
}
setDraggable(draggable) {
this.flkty.options.draggable = draggable;
this.flkty.updateDraggable();
}
selectCell(mediaId) {
this.flkty.selectCell(mediaId);
}
setupProductGallery() {
if (!this.querySelectorAll('.product-single__media-zoom').length) {
return;
}
this.setEventListeners();
}
buildItems() {
this.activeImages = Array.from(this.querySelectorAll('.product-images__slide.is-active .product-single__media-image'));
return this.activeImages.map((item) => {
let index = [].indexOf.call(item.parentNode.parentNode.children, item.parentNode);
let activelink = item.querySelector('.product-single__media-zoom');
activelink.dataset.index = index;
return {
src: activelink.getAttribute('href'),
msrc: activelink.dataset.msrc,
w: activelink.dataset.w,
h: activelink.dataset.h
};
});
}
setEventListeners() {
this.links = this.querySelectorAll('.product-single__media-zoom');
this.pswpElement = document.querySelectorAll('.pswp')[0];
this.pswpOptions = {
maxSpreadZoom: 2,
loop: false,
allowPanToNext: false,
closeOnScroll: false,
showHideOpacity: false,
arrowKeys: true,
history: false,
captionEl: false,
fullscreenEl: false,
zoomEl: false,
shareEl: false,
counterEl: false,
arrowEl: true,
preloaderEl: true,
getThumbBoundsFn: () => {
const thumbnail = this.querySelector('.product-images__slide.is-selected'),
pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
rect = thumbnail.getBoundingClientRect();
return {
x: rect.left,
y: rect.top + pageYScroll,
w: rect.width
};
}
};
this.links.forEach((link => {
link.addEventListener('click', (e) => this.zoomClick(e, link));
}));
}
zoomClick(e, link) {
this.items = this.buildItems();
this.pswpOptions.index = parseInt(link.dataset.index, 10);
if (typeof PhotoSwipe !== 'undefined') {
let pswp = new PhotoSwipe(this.pswpElement, PhotoSwipeUI_Default, this.items, this.pswpOptions);
pswp.listen('firstUpdate', function () {
pswp.listen('parseVerticalMargin', function (item) {
item.vGap = {
top: 50,
bottom: 50
};
});
});
pswp.init();
}
e.preventDefault();
}
}
customElements.define('product-slider', ProductSlider);
}
/**
* @class
* @function ProductForm
*/
if (!customElements.get('product-form')) {
customElements.define('product-form', class ProductForm extends HTMLElement {
constructor() {
super();
this.form = this.querySelector('form');
this.form.querySelector('[name=id]').disabled = false;
this.form.addEventListener('submit', this.onSubmitHandler.bind(this));
this.cartNotification = document.querySelector('cart-notification');
this.body = document.body;
this.hideErrors = this.dataset.hideErrors === 'true';
}
onSubmitHandler(evt) {
evt.preventDefault();
if (!this.form.reportValidity()) {
return;
}
const submitButton = this.querySelector('[type="submit"]');
if (submitButton.classList.contains('loading')) return;
this.handleErrorMessage();
submitButton.setAttribute('aria-disabled', true);
submitButton.classList.add('loading');
const config = {
method: 'POST',
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/javascript'
}
};
const formData = new FormData(this.form);
formData.append('sections', this.getSectionsToRender().map((section) => section.section));
formData.append('sections_url', window.location.pathname);
config.body = formData;
fetch(`${theme.routes.cart_add_url}`, config)
.then((response) => response.json())
.then((response) => {
if (response.status) {
dispatchCustomEvent('product:variant-error', {
source: 'product-form',
productVariantId: formData.get('id'),
errors: response.description,
message: response.message
});
if (response.status === 422) {
document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', {
bubbles: true
}));
}
this.handleErrorMessage(response.description);
return;
}
this.renderContents(response);
})
.catch((e) => {
console.error(e);
})
.finally(() => {
submitButton.classList.remove('loading');
submitButton.removeAttribute('aria-disabled');
});
}
getSectionsToRender() {
return [{
id: 'Cart',
section: 'main-cart',
selector: '.thb-cart-form'
},
{
id: 'Cart-Drawer',
section: 'cart-drawer',
selector: '.cart-drawer'
},
{
id: 'cart-drawer-toggle',
section: 'cart-bubble',
selector: '.thb-item-count'
}];
}
renderContents(parsedState) {
this.getSectionsToRender().forEach((section => {
if (!document.getElementById(section.id)) {
return;
}
const elementToReplace = document.getElementById(section.id).querySelector(section.selector) || document.getElementById(section.id);
elementToReplace.innerHTML = this.getSectionInnerHTML(parsedState.sections[section.section], section.selector);
if (typeof CartDrawer !== 'undefined') {
new CartDrawer();
}
if (typeof Cart !== 'undefined') {
new Cart().renderContents(parsedState);
}
}));
if (document.getElementById('Cart-Drawer')) {
document.getElementById('Cart-Drawer').open();
}
let product_drawer = document.getElementById('Product-Drawer');
if (product_drawer && product_drawer.contains(this)) {
product_drawer.classList.remove('active');
if (!document.getElementById('Cart-Drawer')) {
this.body.classList.remove('open-cc');
}
}
}
getSectionInnerHTML(html, selector = '.shopify-section') {
return new DOMParser()
.parseFromString(html, 'text/html')
.querySelector(selector).innerHTML;
}
handleErrorMessage(errorMessage = false) {
if (this.hideErrors) return;
this.errorMessageWrapper = this.errorMessageWrapper || this.querySelector('.product-form__error-message-wrapper');
this.errorMessage = this.errorMessage || this.errorMessageWrapper.querySelector('.product-form__error-message');
this.errorMessageWrapper.toggleAttribute('hidden', !errorMessage);
if (errorMessage) {
this.errorMessage.textContent = errorMessage;
}
}
});
}
if (typeof addIdToRecentlyViewed !== "undefined") {
addIdToRecentlyViewed();
}
Beschreibung
Spezielle Dornen-Leiste zur Sicherung von Gesimsen, Zäunen, Balken gegen Marder, Katzen und Vögel. Marderstacheln erschweren Eindringlingen die Fortbewegung, weshalb sie auf so gesicherte Besuchsplätze verzichten. Die Stachelabwehr gegen Marder und andere Tiere besteht aus Polycarbonat, das gegen äußere Witterungseinflüsse und langfristige UV-Strahlung beständig ist. Effektiver Schutz gegen Marder, Katzen, Eichhörnchen. Die Lebenserwartung des Spike-Systems beträgt 15 Jahre. Die Kunststoffstacheln werden in Modulen verkauft, Länge eines einzelnen Moduls: 500 mm. 105 Spikes pro Modul.
Anwendung & Spezifikationen
Anwendung
Marder-Spikes können mit einem speziellen Silikonkleber oder mit Schrauben befestigt werden. Die breite Basis (4,5 cm) mit speziellen Rillen erleichtert das Eindringen des Klebers. Dadurch haften die Spikebasen vollständig an der gewählten Oberfläche. Anti-Marder-Stacheln ermöglichen die Sicherung unter anderem von: Gesimsen, Fensterbänken, Fassaden und anderen architektonischen Elementen. Ihr Vorteil ist die Möglichkeit, sie auf unterschiedliche Breiten und Längen zu schneiden.
Spezifikationen
Variant
Versand
Die Versandkosten für dieses Produkt betragen innerhalb Deutschlands 6,99 Euro.
Um die Versandkosten für dieses Produkt außerhalb Deutschlands zu erfahren, klicken Sie hier.
Die Vorbereitungszeit für den Versand beträgt 24 Stunden.
Die Lieferzeit beträgt 3-5 Tage.