(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 ); })();
A Luminária de Piso Munclair Ytu 9609, criação de Erlon Tessari, combina proporções esbeltas e luz difusa para áreas de leitura e estar. Possui 2 cúpulas Ø12,3 × A17,5 cm, base 24 × 1,5 cm, largura total 24 cm e altura total 166,5 cm. Compatível com 2 lâmpadas E27 bulbo LED até 10W (não inclusas), entrega conforto luminoso com estética minimalista.
Desenho clean com dupla cúpula para banho de luz equilibrado, ideal para compor cantos de leitura, salas e recepções com sofisticação.
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.