Uma casa por pintar?


Exteriores.

Revestimento e pintura de fachadas, muros e varandas resistentes ao sol e à chuva.

Interiores.

Pintura de paredes, tetos e carpintarias com acabamentos limpos e de elevada qualidade.

Madeiras.

Lixagem, envernizamento e pintura de móveis, pavimentos e estruturas de madeira.

Metais.

Decapagem, tratamento antiferrugem e pintura de portões, grades e caixilharia.


Quem Somos.

LeodasTintas, uma empresa de pintura com mais de 10 anos de experiência a dar nova vida a casas e espaços em Carcavelos, São Domingos de Rana, Estoril, Parede, Alcabideche, Oeiras, Paço de Arcos, Porto Salvo, Algés, Linda-a-Velha e Rio de Mouro.Trabalhamos exclusivamente com tintas topo de gama, como a Vinyl Matt da CIN, garantindo acabamentos duradouros e de qualidade superior. Fazemos pintura de paredes, madeiras e metais, tanto em interiores como exteriores — desde um simples quarto até moradias completas.Peça já o seu orçamento sem compromisso.


(function () { /* ========================== LEODASTINTAS CUSTOM CURSOR ========================== */ var colors = [ '#f48282', '#d49b2d', '#6aa0d8', '#c95c9f' ]; var ball = document.createElement('div'); ball.id = 'lt-cursor'; document.body.appendChild(ball); /* ========================== STYLE ========================== */ var style = document.createElement('style'); style.textContent = ` @media (min-width: 701px) { body, body * { cursor: none !important; } #lt-cursor { position: fixed; width: 13px; height: 13px; border-radius: 50%; background: #f48282; pointer-events: none; z-index: 999999; transform: translate(-50%, -50%); transition: background-color 0.7s ease, transform 0.15s ease; } #lt-cursor:hover { transform: translate(-50%, -50%) scale(1.15); } } @media (max-width: 700px) { #lt-cursor { display: none; } } `; document.head.appendChild(style); /* ========================== FOLLOW MOUSE ========================== */ document.addEventListener('mousemove', function (e) { ball.style.left = e.clientX + 'px'; ball.style.top = e.clientY + 'px'; }); /* ========================== RANDOM COLOUR ========================== */ function changeColor() { var current = ball.style.backgroundColor; var color; do { color = colors[Math.floor(Math.random() * colors.length)]; } while (color === current); ball.style.backgroundColor = color; } /* Change colour every 2 seconds */ setInterval(changeColor, 2000); })();
(function () { var container = document.getElementById("container04"); if (!container) return; /* ======================================================= WAVE ======================================================= */ var points = [ [0, 15], [10, 18], [20, 25], [30, 33], [40, 38], [50, 37], [60, 30], [70, 22], [80, 17], [90, 15], [100, 21] ]; var current = []; var target = []; for (var i = 0; i < points.length; i++) { current.push(points[i][1]); target.push(points[i][1]); } var mouseX = 50; var mouseY = 0; var insideBlack = false; /* ======================================================= GET WAVE HEIGHT ======================================================= */ function getWaveY(x) { if (x <= points[0][0]) { return current[0]; } if (x >= points[points.length - 1][0]) { return current[current.length - 1]; } for (var i = 0; i < points.length - 1; i++) { var x1 = points[i][0]; var x2 = points[i + 1][0]; if (x >= x1 && x <= x2) { var amount = (x - x1) / (x2 - x1); return current[i] + (current[i + 1] - current[i]) * amount; } } } /* ======================================================= CREATE PAINT SPLASH ======================================================= */ function paintSplash(x, y) { /* Main blob */ var blob = document.createElement("div"); blob.className = "leodas-paint"; blob.style.left = x + "px"; blob.style.top = y + "px"; document.body.appendChild(blob); setTimeout(function () { if (blob.parentNode) { blob.remove(); } }, 1000); /* ===================================================== PAINT DROPLETS ===================================================== */ var amount = 9; for (var i = 0; i < amount; i++) { var drop = document.createElement("div"); drop.className = "leodas-paint-drop"; drop.style.left = x + "px"; drop.style.top = y + "px"; document.body.appendChild(drop); /* Spread */ var angle = (-Math.PI * 0.95) + Math.random() * (Math.PI * 0.9); var distance = 18 + Math.random() * 48; var dx = Math.cos(angle) * distance; var dy = Math.sin(angle) * distance; /* Some paint falls downward */ dy += Math.random() * 18; var scale = 0.45 + Math.random() * 0.9; drop.animate( [ { transform: "translate(-50%, -50%) scale(0)" }, { transform: "translate(" + (dx * 0.35) + "px," + (dy * 0.35) + "px) scale(" + scale + ")" }, { transform: "translate(" + dx + "px," + (dy + 18) + "px) scale(0.25)" } ], { duration: 600 + Math.random() * 350, easing: "cubic-bezier(.16,1,.3,1)", fill: "forwards" } ); setTimeout(function (element) { return function () { if (element.parentNode) { element.remove(); } }; }(drop), 1100); } /* ===================================================== PAINT STREAKS ===================================================== */ for (var j = 0; j < 3; j++) { var streak = document.createElement("div"); streak.className = "leodas-paint-streak"; streak.style.left = (x + (Math.random() - 0.5) * 35) + "px"; streak.style.top = (y + (Math.random() - 0.5) * 12) + "px"; document.body.appendChild(streak); var direction = Math.random() > 0.5 ? 1 : -1; streak.animate( [ { transform: "translate(-50%, -50%) scaleX(0)" }, { transform: "translate(" + (direction * 20) + "px,-50%) scaleX(1.4)" }, { transform: "translate(" + (direction * 45) + "px,-50%) scaleX(0.2)" } ], { duration: 550 + Math.random() * 250, easing: "cubic-bezier(.16,1,.3,1)", fill: "forwards" } ); setTimeout(function (element) { return function () { if (element.parentNode) { element.remove(); } }; }(streak), 900); } } /* ======================================================= MOUSE DETECTION ======================================================= */ document.addEventListener( "mousemove", function (e) { var rect = container.getBoundingClientRect(); if ( e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom ) { insideBlack = false; return; } mouseX = ((e.clientX - rect.left) / rect.width) * 100; mouseY = ((e.clientY - rect.top) / rect.height) * 100; var waveY = getWaveY(mouseX); var waveScreenY = rect.top + (waveY / 100) * rect.height; /* Mouse crosses the paint */ var nowInside = e.clientY > waveScreenY; if ( nowInside && !insideBlack ) { paintSplash( e.clientX, waveScreenY ); } insideBlack = nowInside; } ); /* ======================================================= WAVE MOVEMENT ======================================================= */ function animate() { for (var i = 0; i < points.length; i++) { var x = points[i][0]; var baseY = points[i][1]; var distance = Math.abs(x - mouseX); var influence = Math.max( 0, 1 - distance / 35 ); if ( insideBlack && influence > 0 ) { var direction = mouseY < baseY ? -1 : 1; target[i] = baseY + direction * influence * 14; } else { target[i] = baseY; } current[i] += (target[i] - current[i]) * 0.035; } /* Build wave */ var path = "polygon("; for ( var i = 0; i < points.length; i++ ) { path += points[i][0] + "% " + current[i] + "%"; if ( i < points.length - 1 ) { path += ", "; } } path += ", 100% 100%, 0% 100%)"; container.style.clipPath = path; requestAnimationFrame( animate ); } animate(); })();
(function () { /* ========================================= DESKTOP ONLY ========================================= */ if (window.innerWidth <= 700) return; /* ========================================= SETTINGS ========================================= */ var ease = 0.075; var wheelMultiplier = 0.85; var targetY = window.scrollY; var currentY = window.scrollY; var running = false; /* ========================================= LIMIT SCROLL ========================================= */ function maxScroll() { return Math.max( 0, document.documentElement.scrollHeight - window.innerHeight ); } /* ========================================= WHEEL ========================================= */ window.addEventListener( "wheel", function (e) { /* * Don't interfere with * horizontal scrolling. */ if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) { return; } e.preventDefault(); targetY += e.deltaY * wheelMultiplier; /* Keep inside page */ targetY = Math.max( 0, Math.min( targetY, maxScroll() ) ); startAnimation(); }, { passive: false } ); /* ========================================= ANIMATION ========================================= */ function startAnimation() { if (running) return; running = true; requestAnimationFrame(update); } function update() { /* * Ease current position toward * the target position. */ currentY += (targetY - currentY) * ease; /* * Stop tiny movements. */ if ( Math.abs(targetY - currentY) < 0.15 ) { currentY = targetY; window.scrollTo( 0, currentY ); running = false; return; } window.scrollTo( 0, currentY ); requestAnimationFrame(update); } /* ========================================= KEEP IN SYNC WITH NATIVE SCROLL ========================================= */ window.addEventListener( "scroll", function () { /* * If something else changes * the scroll position, follow it. */ if (!running) { currentY = window.scrollY; targetY = window.scrollY; } }, { passive: true } ); /* ========================================= RESIZE ========================================= */ window.addEventListener( "resize", function () { targetY = Math.min( targetY, maxScroll() ); currentY = Math.min( currentY, maxScroll() ); } ); /* ========================================= ANCHOR LINKS ========================================= */ document.addEventListener( "click", function (e) { var link = e.target.closest( 'a[href^="#"]' ); if (!link) return; var id = link.getAttribute("href"); if (!id || id === "#") return; var target = document.querySelector(id); if (!target) return; e.preventDefault(); var rect = target.getBoundingClientRect(); targetY = window.scrollY + rect.top; targetY = Math.max( 0, Math.min( targetY, maxScroll() ) ); startAnimation(); } ); })();
(function () { var colors = [ "#f48282", "#d49b2d", "#6aa0d8", "#c95c9f" ]; document.addEventListener("click", function (e) { var color = colors[Math.floor(Math.random() * colors.length)]; /* Main particles */ for (var i = 0; i < 12; i++) { var particle = document.createElement("div"); particle.className = "lt-click-particle"; particle.style.background = color; /* Slight size variation */ var size = 4 + Math.random() * 7; particle.style.width = size + "px"; particle.style.height = size + "px"; particle.style.left = e.clientX + "px"; particle.style.top = e.clientY + "px"; document.body.appendChild(particle); var angle = Math.random() * Math.PI * 2; var distance = 20 + Math.random() * 55; var x = Math.cos(angle) * distance; var y = Math.sin(angle) * distance; particle.animate( [ { transform: "translate(-50%, -50%) scale(1)", opacity: 1 }, { transform: "translate(calc(-50% + " + x + "px), calc(-50% + " + y + "px)) scale(0.15)", opacity: 0 } ], { duration: 500 + Math.random() * 350, easing: "cubic-bezier(.22,1,.36,1)", fill: "forwards" } ); setTimeout(function (p) { if (p.parentNode) p.parentNode.removeChild(p); }, 900, particle); } /* Tiny secondary droplets */ for (var j = 0; j < 5; j++) { var drop = document.createElement("div"); drop.className = "lt-click-particle"; drop.style.background = color; drop.style.width = "3px"; drop.style.height = "3px"; drop.style.left = e.clientX + "px"; drop.style.top = e.clientY + "px"; document.body.appendChild(drop); var a = Math.random() * Math.PI * 2; var d = 45 + Math.random() * 45; var dx = Math.cos(a) * d; var dy = Math.sin(a) * d; drop.animate( [ { transform: "translate(-50%, -50%) scale(1)", opacity: 0.9 }, { transform: "translate(calc(-50% + " + dx + "px), calc(-50% + " + dy + "px)) scale(0)", opacity: 0 } ], { duration: 650 + Math.random() * 300, easing: "cubic-bezier(.22,1,.36,1)", fill: "forwards" } ); setTimeout(function (p) { if (p.parentNode) p.parentNode.removeChild(p); }, 1000, drop); } }); })();
(function () { var container = document.getElementById("container08"); if (!container) return; /* ======================================================= INVERTED WAVE Original: starts at the top of the black section and curves DOWN into it. Now: black starts at the TOP and the fluid edge hangs DOWN. ======================================================= */ var points = [ [0, 21], [10, 15], [20, 17], [30, 22], [40, 30], [50, 37], [60, 38], [70, 33], [80, 25], [90, 18], [100, 15] ]; var current = []; var target = []; for (var i = 0; i < points.length; i++) { current.push(points[i][1]); target.push(points[i][1]); } var mouseX = 50; var mouseY = 0; var insideBlack = false; /* ======================================================= GET WAVE HEIGHT ======================================================= */ function getWaveY(x) { if (x <= points[0][0]) { return current[0]; } if (x >= points[points.length - 1][0]) { return current[current.length - 1]; } for (var i = 0; i < points.length - 1; i++) { var x1 = points[i][0]; var x2 = points[i + 1][0]; if (x >= x1 && x <= x2) { var amount = (x - x1) / (x2 - x1); return current[i] + (current[i + 1] - current[i]) * amount; } } } /* ======================================================= CREATE PAINT SPLASH ======================================================= */ function paintSplash(x, y) { /* ===================================================== MAIN PAINT BLOB ===================================================== */ var blob = document.createElement("div"); blob.className = "leodas-paint-08"; blob.style.left = x + "px"; blob.style.top = y + "px"; document.body.appendChild(blob); setTimeout(function () { if (blob.parentNode) { blob.remove(); } }, 1000); /* ===================================================== PAINT DROPLETS ===================================================== */ var amount = 9; for (var i = 0; i < amount; i++) { var drop = document.createElement("div"); drop.className = "leodas-paint-drop-08"; drop.style.left = x + "px"; drop.style.top = y + "px"; document.body.appendChild(drop); /* =================================================== SPREAD Inverted version: paint mainly spreads DOWNWARD from the fluid edge. =================================================== */ var angle = (Math.PI * 0.05) + Math.random() * (Math.PI * 0.9); var distance = 18 + Math.random() * 48; var dx = Math.cos(angle) * distance; var dy = Math.sin(angle) * distance; /* More downward movement */ dy += Math.random() * 18; var scale = 0.45 + Math.random() * 0.9; drop.animate( [ { transform: "translate(-50%, -50%) scale(0)" }, { transform: "translate(" + (dx * 0.35) + "px," + (dy * 0.35) + "px) scale(" + scale + ")" }, { transform: "translate(" + dx + "px," + (dy + 18) + "px) scale(0.25)" } ], { duration: 600 + Math.random() * 350, easing: "cubic-bezier(.16,1,.3,1)", fill: "forwards" } ); setTimeout(function (element) { return function () { if (element.parentNode) { element.remove(); } }; }(drop), 1100); } /* ===================================================== PAINT STREAKS ===================================================== */ for (var j = 0; j < 3; j++) { var streak = document.createElement("div"); streak.className = "leodas-paint-streak-08"; streak.style.left = (x + (Math.random() - 0.5) * 35) + "px"; streak.style.top = (y + (Math.random() - 0.5) * 12) + "px"; document.body.appendChild(streak); var direction = Math.random() > 0.5 ? 1 : -1; streak.animate( [ { transform: "translate(-50%, -50%) scaleX(0)" }, { transform: "translate(" + (direction * 20) + "px,-50%) scaleX(1.4)" }, { transform: "translate(" + (direction * 45) + "px,-50%) scaleX(0.2)" } ], { duration: 550 + Math.random() * 250, easing: "cubic-bezier(.16,1,.3,1)", fill: "forwards" } ); setTimeout(function (element) { return function () { if (element.parentNode) { element.remove(); } }; }(streak), 900); } } /* ======================================================= MOUSE DETECTION ======================================================= */ document.addEventListener( "mousemove", function (e) { var rect = container.getBoundingClientRect(); if ( e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom ) { insideBlack = false; return; } mouseX = ((e.clientX - rect.left) / rect.width) * 100; mouseY = ((e.clientY - rect.top) / rect.height) * 100; var waveY = getWaveY(mouseX); var waveScreenY = rect.top + (waveY / 100) * rect.height; /* =================================================== MOUSE CROSSES INTO BLACK =================================================== */ var nowInside = e.clientY < waveScreenY; if ( nowInside && !insideBlack ) { paintSplash( e.clientX, waveScreenY ); } insideBlack = nowInside; } ); /* ======================================================= WAVE MOVEMENT ======================================================= */ function animate() { for (var i = 0; i < points.length; i++) { var x = points[i][0]; var baseY = points[i][1]; var distance = Math.abs(x - mouseX); var influence = Math.max( 0, 1 - distance / 35 ); if ( insideBlack && influence > 0 ) { var direction = mouseY > baseY ? 1 : -1; target[i] = baseY + direction * influence * 14; } else { target[i] = baseY; } current[i] += (target[i] - current[i]) * 0.035; } /* ===================================================== BUILD INVERTED WAVE ===================================================== */ var path = "polygon("; /* TOP-EDGE WAVE */ for ( var i = 0; i < points.length; i++ ) { path += points[i][0] + "% " + current[i] + "%"; if ( i < points.length - 1 ) { path += ", "; } } /* COMPLETE THE TOP/BLACK AREA */ path += ", 100% 0%, 0% 0%)"; container.style.clipPath = path; requestAnimationFrame( animate ); } animate(); })();

Pintura profissional de interiores e exteriores, com qualidade, rigor e atenção ao detalhe.

CONTACTOS

935810563
[email protected]