Podcast Merch

THE ONLY ONE

Der liegende Teppich

Podcast, Merch und Unterstützung – alles an einem Ort.

Shirts

Taschen

Sticker

Bleib Verbunden

Abonniere unseren Newsletter für exklusive Einblicke und frische Updates rund um den liegenden Teppich.

Über uns

Der liegende Teppich verbindet Podcast-Geschichten mit handgemachtem Merch – alles in warmen Erdtönen und mit Herz gestaltet.

Jetzt unterstützen

Hilf mit, den liegenden Teppich am Leben zu erhalten – mit deinem Support und unserem Merch.

document.addEventListener("DOMContentLoaded", function () { const canvas = document.getElementById("teppichGewebe"); if (!canvas) return; const ctx = canvas.getContext("2d"); let width; let height; let cols = 32; let rows = 22; let points = []; function resize() { width = canvas.width = window.innerWidth; height = canvas.height = window.innerHeight; points = []; for (let y = 0; y <= rows; y++) { for (let x = 0; x <= cols; x++) { points.push({ baseX: x * (width / cols), baseY: y * (height / rows), x: x * (width / cols), y: y * (height / rows), wave: Math.random() * Math.PI * 2 }); } } } resize(); window.addEventListener("resize", resize); function getPoint(x, y) { return points[y * (cols + 1) + x]; } function animate() { ctx.clearRect(0, 0, width, height); let time = Date.now() * 0.0007; points.forEach(point => { point.x = point.baseX + Math.sin(time + point.wave + point.baseY * 0.01) * 20; point.y = point.baseY + Math.cos(time * 0.8 + point.wave + point.baseX * 0.01) * 20; }); // horizontale Jutefäden for (let y = 0; y <= rows; y++) { ctx.beginPath(); for (let x = 0; x <= cols; x++) { let p = getPoint(x, y); if (x === 0) { ctx.moveTo(p.x, p.y); } else { ctx.lineTo(p.x, p.y); } } ctx.strokeStyle = "rgba(115,75,35,0.45)"; ctx.lineWidth = 1.5; ctx.stroke(); } // vertikale Fäden for (let x = 0; x <= cols; x++) { ctx.beginPath(); for (let y = 0; y <= rows; y++) { let p = getPoint(x, y); if (y === 0) { ctx.moveTo(p.x, p.y); } else { ctx.lineTo(p.x, p.y); } } ctx.strokeStyle = "rgba(170,130,70,0.35)"; ctx.lineWidth = 1.2; ctx.stroke(); } // kleine Knüpfstellen points.forEach((p, index) => { if (index % 11 === 0) { ctx.beginPath(); ctx.arc( p.x, p.y, 3, 0, Math.PI * 2 ); ctx.fillStyle = "rgba(90,55,25,0.55)"; ctx.fill(); } }); requestAnimationFrame(animate); } animate(); });