(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 Horizon Accord A-1589 reúne design contemporâneo e acabamento premium em uma peça elegante e sofisticada. Seu formato alongado proporciona excelente presença visual, valorizando ambientes residenciais e comerciais com uma iluminação decorativa marcante.
Accord Iluminação desenvolve luminárias de design autoral que unem tecnologia, eficiência luminosa e acabamento de alto padrão, criando peças que transformam ambientes com elegância, inovação e personalidade.
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.