Für Deine vorbereitete Bestellung findest Du hier die Kundenparkplätze, die Abholbox und den Selbstabholer-Eingang.
Kontaktinfos
Du hast eine Frage zu Deiner Bestellung oder brauchst Unterstützung? Hier findest Du den passenden Kontaktweg.
Vor Ort
Öffnung & Abholung
- Mo–Do08:00–13:00
13:30–16:00 - Freitag08:00–13:00
13:30–14:45
Mo–Fr
Telefonischer Kundenservice
- Mo–Do09:30–13:00
13:30–16:00 - Freitag09:30–13:00
13:30–14:45
7 Tage
E-Mail Kundenservice
- ErreichbarkeitJeden Tag
- AntwortzeitUnter 24 Stunden
So findest Du uns vor Ort
Stegerwaldstraße 1d · 51427 Bergisch Gladbach
Standortkarte wird beim Scrollen geladen …
(function () {
var root = document.querySelector(".shop-page-v2");
if (!root || document.getElementById("shop-pages-v2-css")) return;
var href = root.getAttribute("data-v2-css-url");
if (!href) {
var shop = root.getAttribute("data-shop");
var hostname = window.location.hostname.toLowerCase();
var isFhHost = hostname === "fenster-hammer.de" || hostname.slice(-18) === ".fenster-hammer.de";
if (shop !== "fh" && shop !== "sh") shop = isFhHost ? "fh" : "sh";
var imageHost = shop === "fh" ? "bilder.fenster-hammer.de" : "bilder.schrauben-hammer.de";
href = "https://" + imageHost + "/frontend/Content-Seiten/shop-pages-v2-20261006-fcf3975f.min.css";
}
var stylesheet = document.createElement("link");
stylesheet.id = "shop-pages-v2-css";
stylesheet.rel = "stylesheet";
stylesheet.href = href;
document.head.appendChild(stylesheet);
}());
(function () {
document.querySelectorAll('[data-page="kontakt"]').forEach(function (root) {
if (root.dataset.contactInitialized === 'true') return;
root.dataset.contactInitialized = 'true';
function updateEmail() {
var explicitShop = root.getAttribute('data-shop');
var host = window.location.hostname.toLowerCase();
var shop = explicitShop === 'fh' || explicitShop === 'sh' ? explicitShop :
(host === 'fenster-hammer.de' || host.endsWith('.fenster-hammer.de') ? 'fh' : 'sh');
root.dataset.contactBrand = shop;
var email = shop === 'fh' ? 'service@fenster-hammer.de' : 'service@schrauben-hammer.de';
root.querySelectorAll('[data-contact-email]').forEach(function (link) {
link.textContent = email;
link.href = 'mailto:' + email;
});
}
updateEmail();
root.addEventListener('contact-v2:shop-change', updateEmail);
// Per-page behavior; Leaflet and tiles are fetched only near the viewport.
var card = root.querySelector('[data-contact-map]');
if (!card) return;
var data = {"center":[50.95755,7.14448],"zoom":17,"bounds":[[50.9569,7.14385],[50.95805,7.1451]],"points":[{"id":"pickupBox","routes":["pickup"],"code":"1","icon":"package","lat":50.957657796125446,"lng":7.144494051674045,"label":"Abholbox","description":"Bereich für die Abholung vorbereiteter Bestellungen."},{"id":"officeEntrance","routes":["pickup","visitors"],"code":"2","icon":"office","lat":50.95781247189601,"lng":7.144626958022886,"label":"Selbstabholer & Büroeingang","description":"Eingang für Selbstabholer, Bürotermine und allgemeine Anliegen."},{"id":"warehouseEntranceA","routes":["visitors"],"code":"3","icon":"warehouse","lat":50.95773590223857,"lng":7.144505398228994,"label":"Lager Eingang A","description":"Lagerzugang A für abgestimmte Warenbewegungen."},{"id":"warehouseEntranceB","routes":["visitors"],"code":"4","icon":"warehouse","lat":50.95729288959584,"lng":7.14438755965313,"label":"Lager Eingang B","description":"Lagerzugang B für abgestimmte Warenbewegungen."},{"id":"smallVehicleDeliveryPickup","routes":["deliveries"],"code":"9","icon":"truck","lat":50.95777023212784,"lng":7.1444926578260235,"label":"Anlieferung/Abholung für kleinere Lieferfahrzeuge","description":"Bereich für Anlieferung und Abholung mit kleineren Lieferfahrzeugen."},{"id":"mainWarehouseRamp","routes":["deliveries"],"code":"5","icon":"truck","lat":50.957243019863355,"lng":7.144469911792528,"label":"Rampen (LKW) Hauptlager","description":"LKW-Rampen am Hauptlager für angekündigte Anlieferungen."},{"id":"secondaryWarehouseRamp","routes":["deliveries"],"code":"6","icon":"truck","lat":50.95702253647217,"lng":7.144986237025782,"label":"Rampe (LKW) Nebenlager","description":"LKW-Rampe am Nebenlager für angekündigte Anlieferungen."},{"id":"customerParkingA","routes":["pickup","visitors"],"code":"7","icon":"parking","lat":50.957846850069565,"lng":7.144378876812555,"label":"Kundenparkplatz A","description":"Kundenparkplatz mit kurzem Weg zum Eingang."},{"id":"customerParkingB","routes":["pickup","visitors"],"code":"8","icon":"parking","lat":50.95782966098504,"lng":7.144928376697333,"label":"Kundenparkplatz B","description":"Weiterer Kundenparkplatz nahe dem Eingangsbereich."}],"pointRoutes":[{"id":"warehouseEntranceA-yard-connector","pointId":"warehouseEntranceA","coordinates":[[50.957900295504345,7.144473415870272],[50.95783612831177,7.144486827144205],[50.95778287679713,7.144498178399892],[50.95773590223857,7.144505398228994]]},{"id":"warehouseEntranceA-access-road-west","pointId":"warehouseEntranceA","coordinates":[[50.957836361104356,7.143956886348608],[50.95786648987016,7.144214085470315],[50.957900295504345,7.144473415870272]]},{"id":"warehouseEntranceA-access-road-east","pointId":"warehouseEntranceA","coordinates":[[50.957954987980976,7.144964037741415],[50.95792947239825,7.144721724393441],[50.957900295504345,7.144473415870272]]}]};
var notes = {
pickup: 'Für Deine vorbereitete Bestellung findest Du hier die Kundenparkplätze, die Abholbox und den Selbstabholer-Eingang.',
visitors: 'Für Deinen Bürotermin oder ein allgemeines Anliegen nutze die Kundenparkplätze und den Büroeingang.',
deliveries: 'Bitte kündige Deine Anlieferung vorab an und nutze die Zufahrt zum Hof.'
};
var tabs = Array.from(card.querySelectorAll('[data-map-route]'));
var panel = card.querySelector('[role="tabpanel"]');
var instance = 'contact-location-' + Math.random().toString(36).slice(2);
panel.id = instance;
tabs.forEach(function (tab, index) { tab.id = instance + '-' + index; tab.setAttribute('aria-controls', instance); });
var selectedRoute = 'pickup', selectedPoint = null, map = null, markers = [], paths = [], loading = false;
var select = card.querySelector('[data-map-select]');
var stage = card.querySelector('.contact-map-stage');
var loader = card.querySelector('[data-map-loader]');
var status = card.querySelector('[data-map-status]');
var retry = card.querySelector('[data-map-retry]');
root.addEventListener('contact-v2:shop-change', function () {
paths.forEach(function (path) { path.setStyle({color:getComputedStyle(root).getPropertyValue('--v2-accent-dark').trim()}); });
});
var mapOpen = card.querySelector('[data-map-open]');
var services = card.querySelector('[data-map-services]');
var navigation = card.querySelector('.contact-map-navigation');
services.id = instance + '-services';
mapOpen.setAttribute('aria-controls', services.id);
function closeServices() { services.hidden = true; mapOpen.setAttribute('aria-expanded', 'false'); }
function visiblePoints() { return data.points.filter(function (p) { return p.routes.indexOf(selectedRoute) !== -1; }); }
function showPoint(point) {
selectedPoint = point;
card.querySelector('[data-map-title]').textContent = point ? point.label : 'Wähle Deinen Anlaufpunkt';
card.querySelector('[data-map-description]').textContent = point ? point.description : 'Klicke auf einen Punkt in der Karte oder wähle ihn hier aus.';
select.value = point ? point.id : '';
mapOpen.disabled = !point;
closeServices();
markers.forEach(function (entry) { var el = entry.marker.getElement(); if (el) { el.classList.toggle('is-active', point && entry.point.id === point.id); el.setAttribute('aria-pressed', String(!!point && entry.point.id === point.id)); } });
if (map) {
paths.forEach(function (path) { map.removeLayer(path); }); paths = [];
data.pointRoutes.filter(function (route) { return point && route.pointId === point.id; }).forEach(function (route) {
paths.push(window.L.polyline(route.coordinates, {color:getComputedStyle(root).getPropertyValue('--v2-accent-dark').trim(), weight:4, dashArray:'7 7', interactive:false}).addTo(map));
});
}
}
function fit() {
if (!map || !stage.clientWidth) return;
map.invalidateSize();
var bounds = stage.clientWidth < 600 ? window.L.latLngBounds(visiblePoints().map(function (p) { return [p.lat,p.lng]; })) : data.bounds;
map.fitBounds(bounds, {padding:[35,35], maxZoom:18, animate:false});
}
function changeRoute(route) {
selectedRoute = route;
tabs.forEach(function (tab) { var active = tab.dataset.mapRoute === route; tab.setAttribute('aria-selected', String(active)); tab.tabIndex = active ? 0 : -1; if (active) panel.setAttribute('aria-labelledby',tab.id); });
card.querySelector('[data-map-route-note]').textContent = notes[route];
select.replaceChildren(new Option('Bitte auswählen',''));
visiblePoints().forEach(function (p) { select.add(new Option(p.label,p.id)); });
markers.forEach(function (entry) { if (entry.point.routes.indexOf(route) !== -1) entry.marker.addTo(map); else entry.marker.remove(); });
showPoint(null); fit();
}
tabs.forEach(function (tab,index) {
tab.addEventListener('click',function () { changeRoute(tab.dataset.mapRoute); });
tab.addEventListener('keydown',function (event) {
var next = event.key === 'ArrowRight' ? (index+1)%tabs.length : event.key === 'ArrowLeft' ? (index+tabs.length-1)%tabs.length : event.key === 'Home' ? 0 : event.key === 'End' ? tabs.length-1 : null;
if (next !== null) { event.preventDefault(); tabs[next].focus(); changeRoute(tabs[next].dataset.mapRoute); }
});
});
select.addEventListener('change',function () { showPoint(data.points.find(function (p) { return p.id === select.value; }) || null); });
mapOpen.addEventListener('click',function () {
var point = selectedPoint || data.points.find(function (p) { return p.id === 'officeEntrance'; });
var coords = point.lat + ',' + point.lng;
var urls = {google:'https://www.google.com/maps/dir/?api=1&destination='+coords, apple:'https://maps.apple.com/?daddr='+coords, osm:'https://www.openstreetmap.org/?mlat='+point.lat+'&mlon='+point.lng+'#map=19/'+point.lat+'/'+point.lng};
card.querySelectorAll('[data-map-service]').forEach(function (link) { link.href = urls[link.dataset.mapService]; });
services.hidden = !services.hidden;
mapOpen.setAttribute('aria-expanded', String(!services.hidden));
});
// Inline disclosure: links stay directly below the trigger, with native Tab navigation.
navigation.addEventListener('keydown',function (event) {
if (event.key === 'Escape' && !services.hidden) { closeServices(); mapOpen.focus(); event.preventDefault(); }
if (event.target === mapOpen && event.key === 'ArrowDown' && !mapOpen.disabled) {
event.preventDefault(); if (services.hidden) mapOpen.click(); services.querySelector('a').focus();
}
});
navigation.addEventListener('focusout',function (event) { if (!navigation.contains(event.relatedTarget)) closeServices(); });
document.addEventListener('click',function (event) { if (!navigation.contains(event.target)) closeServices(); });
services.addEventListener('click',function (event) { if (event.target.closest('a')) closeServices(); });
function dependencies() {
var base = (card.dataset.mapAssets || 'https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/').replace(/\/?$/, '/');
window.contactV2MapAssets = window.contactV2MapAssets || {};
if (window.contactV2MapAssets[base]) return window.contactV2MapAssets[base];
var promise = Promise.all(['css','js'].map(function (kind) {
return new Promise(function (resolve,reject) {
if (kind === 'js' && window.L && window.L.map) { resolve(); return; }
var el = document.createElement(kind === 'css' ? 'link' : 'script');
var timer = setTimeout(function () { el.remove(); reject(new Error('Kartenbibliothek nicht erreichbar')); },15000);
el.onload = function () { clearTimeout(timer); resolve(); };
el.onerror = function () { clearTimeout(timer); el.remove(); reject(new Error('Kartenbibliothek nicht erreichbar')); };
if (kind === 'css') { el.rel = 'stylesheet'; el.href = base+'leaflet.css'; } else { el.src = base+'leaflet.js'; el.async = true; }
document.head.appendChild(el);
});
}));
window.contactV2MapAssets[base] = promise;
promise.catch(function () { delete window.contactV2MapAssets[base]; });
return promise;
}
function failed() {
loading = false; stage.setAttribute('aria-busy','false'); loader.hidden = false;
loader.classList.add('has-error'); status.textContent = 'Die Karte ist gerade nicht erreichbar. Du kannst Deinen Anlaufpunkt auswählen und die Anfahrt öffnen.'; retry.hidden = false;
}
function load() {
if (loading) return;
loading = true; retry.hidden = true; loader.hidden = false; loader.classList.remove('has-error'); stage.setAttribute('aria-busy','true'); status.textContent = 'Standortkarte wird geladen …';
dependencies().then(function () {
var L = window.L;
if (map) { map.remove(); map = null; } markers = []; paths = [];
map = L.map(card.querySelector('[data-map-canvas]'), {scrollWheelZoom:false}).setView(data.center,data.zoom);
var tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {maxZoom:19, attribution:'© \x3ca href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener">OpenStreetMap\x3c/a>'});
var received = false, settled = false;
var timer = setTimeout(function () { if (!settled) { settled = true; failed(); } },15000);
function ready() { if (settled) return; settled = true; clearTimeout(timer); loading = false; loader.hidden = true; stage.setAttribute('aria-busy','false'); }
tiles.on('tileload',function () { received = true; });
tiles.on('load',function () { if (received) ready(); else { settled = true; clearTimeout(timer); failed(); } });
tiles.addTo(map);
var symbols = {
package:'\x3cpath d="m12 3 8 4v10l-8 4-8-4V7l8-4Z M4 7l8 4 8-4 M12 11v10 M8 5l8 4"/>',
office:'\x3cpath d="m3 10 9-7 9 7 M5 9v12h14V9 M9 21v-8h6v8"/>',
warehouse:'\x3cpath d="M3 21V8l9-5 9 5v13 M7 21V11h10v10 M7 15h10 M7 18h10"/>',
truck:'\x3cpath d="M3 5h11v12H3V5Z M14 9h4l3 4v4h-7 M7 17a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z M17 17a2 2 0 1 0 0 4 2 2 0 0 0 0-4Z"/>',
parking:'\x3cpath d="M7 21V3h6a5 5 0 0 1 0 10H7"/>'
};
data.points.forEach(function (p) {
var marker = L.marker([p.lat,p.lng], {title:p.label, keyboard:true, icon:L.divIcon({className:'contact-map-marker',html:'\x3csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+symbols[p.icon]+'\x3c/svg>',iconSize:[38,38],iconAnchor:[19,19]})});
marker.on('click',function () { showPoint(p); });
marker.on('add',function () { var el = marker.getElement(); el.setAttribute('role','button'); el.setAttribute('aria-label',p.label); el.addEventListener('focus',function () { showPoint(p); }); });
markers.push({marker:marker,point:p});
});
var previousPoint = selectedPoint;
changeRoute(selectedRoute);
if (previousPoint) showPoint(previousPoint);
if (window.ResizeObserver) { if (card.contactMapResize) card.contactMapResize.disconnect(); card.contactMapResize = new ResizeObserver(fit); card.contactMapResize.observe(stage); }
}).catch(failed);
}
retry.addEventListener('click',load);
changeRoute(selectedRoute);
if (window.IntersectionObserver) {
var observer = new IntersectionObserver(function (entries) { if (entries.some(function (entry) { return entry.isIntersecting; })) { observer.disconnect(); load(); } }, {rootMargin:'300px'});
observer.observe(stage);
} else load();
});
}());










