(function () { /* ===================================================== LIGHTING & CO. PÁGINA DE PRODUTO - coração nos relacionados mobile - 4 miniaturas visíveis no desktop - navegação vertical ===================================================== */ /* ===================================================== CORAÇÃO DOS PRODUTOS RELACIONADOS ===================================================== */ function prepararCoracoesRelacionados() { const cards = document.querySelectorAll( 'body.pagina-produto ' + '#corpo ' + '.listagem.aproveite-tambem ' + '.listagem-item' ); if (!cards.length) { return false; } cards.forEach(function (card) { const preco = card.querySelector( '.preco-produto' ); if (!preco) { return; } /* * Não duplica. */ if ( preco.querySelector( '.relacionados-coracao' ) ) { return; } /* * Procura algum controle de favoritos * nativo que já exista no card. */ const favoritoNativo = card.querySelector( 'a[href*="favorito"], ' + '.adicionar-favorito, ' + '.botao-favorito, ' + '[class*="favorito"]' ); let coracao; /* * Se o tema já possui um link real de favorito, * preservamos o href. */ if ( favoritoNativo && favoritoNativo.tagName === 'A' && favoritoNativo.href ) { coracao = document.createElement( 'a' ); coracao.href = favoritoNativo.href; } else { coracao = document.createElement( 'button' ); coracao.type = 'button'; /* * Se existir botão nativo, * repassa o clique para ele. */ if (favoritoNativo) { coracao.addEventListener( 'click', function (event) { event.preventDefault(); event.stopPropagation(); favoritoNativo.click(); } ); } } coracao.className = 'vitrine-coracao relacionados-coracao'; coracao.setAttribute( 'aria-label', 'Adicionar aos favoritos' ); coracao.setAttribute( 'title', 'Adicionar aos favoritos' ); preco.appendChild( coracao ); }); return true; } /* ===================================================== GALERIA VERTICAL DESKTOP FIGMA 166:2968 ===================================================== */ function prepararGaleriaVertical() { const thumbs = document.querySelector( 'body.pagina-produto ' + '#corpo ' + '.produto ' + '.produto-thumbs' ); if (!thumbs) { return false; } const carousel = thumbs.querySelector( '#carouselImagem' ) || thumbs; const viewport = thumbs.querySelector( '.flex-viewport' ); const track = thumbs.querySelector( 'ul.miniaturas.slides' ); if ( !viewport || !track ) { return false; } /* * Não instala duas vezes. */ if ( track.dataset .galeriaVerticalPronta === '1' ) { return true; } track.dataset .galeriaVerticalPronta = '1'; let indice = 0; /* ================================================= BOTÃO SUPERIOR ================================================= */ const anterior = document.createElement( 'button' ); anterior.type = 'button'; anterior.className = 'produto-thumbs-prev'; anterior.setAttribute( 'aria-label', 'Miniatura anterior' ); anterior.innerHTML = ''; /* ================================================= BOTÃO INFERIOR ================================================= */ const proximo = document.createElement( 'button' ); proximo.type = 'button'; proximo.className = 'produto-thumbs-next'; proximo.setAttribute( 'aria-label', 'Próxima miniatura' ); proximo.innerHTML = ''; carousel.appendChild( anterior ); carousel.appendChild( proximo ); /* ================================================= PEGA MINIATURAS REAIS ignora clones caso FlexSlider crie algum ================================================= */ function obterItens() { return Array .from(track.children) .filter(function (item) { return ( item.tagName === 'LI' && !item.classList.contains( 'clone' ) ); }); } /* ================================================= GAP REAL ENTRE AS MINIATURAS ================================================= */ function obterGap() { const estilo = window.getComputedStyle( track ); const valor = parseFloat( estilo.rowGap || estilo.gap ); return Number.isFinite(valor) ? valor : 12; } /* ================================================= CALCULA ALTURA DE EXATAMENTE 4 SEM ALTERAR A DIMENSÃO DAS IMAGENS ================================================= */ function calcularAlturaVisivel( itens, gap ) { const quantidade = Math.min( 4, itens.length ); let altura = 0; for ( let i = 0; i < quantidade; i++ ) { altura += itens[i] .getBoundingClientRect() .height; if ( i < quantidade - 1 ) { altura += gap; } } return altura; } /* ================================================= CALCULA DESLOCAMENTO ================================================= */ function calcularOffset( itens, gap ) { let offset = 0; for ( let i = 0; i < indice; i++ ) { offset += itens[i] .getBoundingClientRect() .height; offset += gap; } return offset; } /* ================================================= ATUALIZA ================================================= */ function atualizar() { const itens = obterItens(); if (!itens.length) { return; } /* * MOBILE: * volta ao comportamento horizontal. */ if ( window.innerWidth <= 1024 ) { indice = 0; thumbs.style .removeProperty( '--produto-thumbs-altura' ); thumbs.style .removeProperty( '--produto-thumbs-offset' ); anterior.hidden = true; proximo.hidden = true; return; } const gap = obterGap(); const altura = calcularAlturaVisivel( itens, gap ); thumbs.style.setProperty( '--produto-thumbs-altura', altura + 'px' ); const maximo = Math.max( 0, itens.length - 4 ); /* * Garante índice válido. */ indice = Math.max( 0, Math.min( indice, maximo ) ); const offset = calcularOffset( itens, gap ); thumbs.style.setProperty( '--produto-thumbs-offset', (-offset) + 'px' ); /* * Só mostra setas se existirem * mais de quatro imagens. */ const precisaCarousel = itens.length > 4; anterior.hidden = !precisaCarousel; proximo.hidden = !precisaCarousel; anterior.disabled = indice === 0; proximo.disabled = indice >= maximo; } /* ================================================= CLIQUE CIMA ================================================= */ anterior.addEventListener( 'click', function (event) { event.preventDefault(); event.stopPropagation(); if ( indice <= 0 ) { return; } indice--; atualizar(); } ); /* ================================================= CLIQUE BAIXO ================================================= */ proximo.addEventListener( 'click', function (event) { event.preventDefault(); event.stopPropagation(); const itens = obterItens(); const maximo = Math.max( 0, itens.length - 4 ); if ( indice >= maximo ) { return; } indice++; atualizar(); } ); /* ================================================= RESIZE ================================================= */ window.addEventListener( 'resize', atualizar ); /* * Espera imagens/medidas terminarem. */ requestAnimationFrame( function () { setTimeout( atualizar, 100 ); } ); return true; } /* ===================================================== INICIALIZAÇÃO Loja Integrada pode montar componentes depois ===================================================== */ function iniciar() { prepararCoracoesRelacionados(); prepararGaleriaVertical(); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', iniciar ); } else { iniciar(); } /* * Tenta novamente porque FlexSlider e vitrines * podem ser inicializados depois do DOMContentLoaded. */ let tentativas = 0; const intervalo = setInterval( function () { tentativas++; prepararCoracoesRelacionados(); const galeriaPronta = prepararGaleriaVertical(); if ( galeriaPronta || tentativas >= 40 ) { clearInterval( intervalo ); } }, 250 ); })();
O Pendente TUB P com Rasgo Metal Domado 5570G/L combina o visual minimalista da linha TUB com um elegante detalhe vazado que agrega personalidade e sofisticação ao projeto luminotécnico. Seu design tubular moderno cria um efeito visual diferenciado, tornando-se um destaque decorativo em ambientes contemporâneos.
Fabricado em alumínio de alta qualidade, oferece excelente resistência, durabilidade e acabamento refinado. O rasgo decorativo valoriza a peça mesmo quando desligada, proporcionando um visual arquitetônico moderno e exclusivo.
O modelo está disponível em duas configurações: versão LED integrado de alta eficiência ou versão com base G9 para lâmpada Halopin, permitindo flexibilidade para diferentes necessidades de iluminação.
Ideal para bancadas gourmet, ilhas de cozinha, mesas de jantar, lavabos, halls de entrada, recepções, restaurantes, cafeterias, lojas e ambientes que valorizam iluminação decorativa com design moderno e acabamento diferenciado.
A Lighting & Co. é especialista em luminárias de luxo, lustres e peças exclusivas que combinam design, sofisticação e funcionalidade. Ilumine seus ambientes com estilo e valor agregado.