Ich war nicht für ein Tattoo in Palm Wave, sondern habe mit Freundinnen einen Tufting-Workshop gemacht – und es war richtig gut! Wir wurden herzlich empfangen und Schritt für Schritt angeleitet. Bei Fragen oder wenn wir Hilfe brauchten, war immer jemand ansprechbar. Wir hatten so viel Spaß, dass wir gar nicht gemerkt haben, wie die Zeit verflogen ist. Ein rundum tolles Erlebnis, das ich sofort wieder machen würde! - Anna Lenke

Tufting Workshops

Gestalte deinen eigenen Teppich – in nur 2 Stunden, volle Kreativität, maximaler Fun. Keine Vorkenntnisse nötig.du gehst nach Hause mit deinem eigenen Unikat-Teppich, den du stolz im Wohnzimmer platzieren kannst.

Jetzt Platz sichern
Termin anfragen
0
    0
    Dein Warenkorb
    Dein Warenkorb ist leer
    WordPress Cookie Hinweis von Real Cookie Banner hängen (weg vom clippen der Section) const img = document.createElement('img'); img.className = 'fly-overlay-img'; img.alt = 'flying-sticker'; img.decoding = 'async'; img.loading = 'lazy'; img.src = src; img.style.setProperty('--fly-size', size); img.style.display = 'none'; // erst sichtbar, wenn Bereich im Viewport document.body.appendChild(img); // Sichtbarkeits-Steuerung let active = false; const io = new IntersectionObserver((entries)=>{ entries.forEach(e=>{ active = e.isIntersecting; img.style.display = active ? 'block' : 'none'; if(active) render(); // sofort eine Position zeichnen }); }, { threshold: 0, rootMargin: '150px 0px 150px 0px' }); io.observe(beacon); // Maße & Render let vw = window.innerWidth; let imgW = 0; function measure(){ vw = window.innerWidth; // Größe des Bildes nach Laden messen imgW = img.getBoundingClientRect().width || img.naturalWidth || 0; } function xRange(){ // Volle Breite → 100vw minus Bildbreite return Math.max(0, vw - imgW); } function yAtBeacon(){ // Vertikale Mitte des Beacons im Viewport const rect = beacon.getBoundingClientRect(); const y = rect.top + rect.height/2 - (img.getBoundingClientRect().height/2); return y + yOff; } function render(){ if(!active) return; // Sinusfunktion → links↔rechts↔links const t = window.scrollY * speed * (prefersReduced ? 0.6 : 1.0); const xr = xRange() * (prefersReduced ? 0.7 : 1.0); const x = ((Math.sin(t) + 1) / 2) * xr; img.style.top = yAtBeacon() + 'px'; img.style.transform = `translate3d(${x}px,0,0)`; } // Events window.addEventListener('scroll', render, { passive: true }); window.addEventListener('resize', ()=>{ measure(); render(); }, { passive: true }); // Start, wenn das Bild geladen ist if (img.complete) { measure(); render(); } else img.addEventListener('load', ()=>{ measure(); render(); }, { once: true }); }); } if (document.readyState !== 'loading') init(); else document.addEventListener('DOMContentLoaded', init); })();