ROARIS
Utilize o cupom "ROARIS" e ganhe 10% de desconto na primeira compra
Sobre nós

SOBRE A ROARIS

 

Elegância, Versatilidade e Precisão em Cada Segundo

A ROARIS é uma marca especializada na relojoaria premium masculina, desenvolvida para homens que valorizam o design sofisticado, a presença marcante e a alta durabilidade.

Nossos relógios são 100% originais, com fabricação no Polo Industrial de Manaus, entregues em embalagens oficiais e seguras, acompanhados de Nota Fiscal Eletrônica e Certificado Oficial de Garantia de 12 meses.

CONEXÃO COM O GRUPO TUGUIR

Orgulhosamente fazemos parte do portfólio de marcas do Grupo Tuguir, uma plataforma consolidada no mercado nacional que conecta apaixonados por relojoaria a estilos exclusivos e engenharia de precisão.

Unimos a força logística e a credibilidade do grupo à nossa identidade singular de luxo acessível e versatilidade.

O PADRÃO ROARIS

Relógios masculinos premium 100% originais com alta presença de pulso.
Exclusivos Kits Troca Pulseira inclusos para máxima versatilidade.
12 meses de garantia de fábrica com suporte dedicado pós-venda.
Nota Fiscal Eletrônica emitida em todas as compras.
Envio rápido e seguro com embalagens ultra-protegidas contra impactos.
Atendimento humanizado e ágil focado na sua satisfação via WhatsApp.

📦 LOGÍSTICA DE ALTA PERFORMANCE

Garantimos que cada relógio ROARIS saia de nosso centro de distribuição perfeitamente testado, embalado em estojo premium rígido e envolto em proteção reforçada. Nossa entrega rápida acompanha rastreamento em tempo real do início ao fim.

💬 NOSSA MISSÃO

Nossa missão é ir além de vender acessórios: queremos entregar pontualidade, estilo e confiança em forma de peças exclusivas que marcam a sua história.

Descubra a força e o design de um autêntico ROARIS!

Minha Sacola

Sua sacola está vazia

Navegue pelo catálogo e adicione itens para começar.

${item.name}
R$ ${item.price.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
`; }); if (listContainer) listContainer.innerHTML = html; } }) .catch(err => { console.error('[Cart Drawer] Erro no fallback HTML:', err); if (loading) loading.classList.remove('active'); }); }; // Atualizar a lista de produtos no carrinho (Via API de checkout nativa) window.refreshCartDrawer = function() { const listContainer = document.getElementById('cart-drawer-items-list'); const emptyMsg = document.getElementById('cart-drawer-empty-msg'); const footer = document.getElementById('cart-drawer-footer-actions'); const loading = document.querySelector('.cart-drawer-loading'); if (loading) loading.classList.add('active'); if (listContainer) listContainer.style.opacity = '0.4'; const session_id = getTraySessionId(); const store_id = getTrayStoreId(); if (!session_id) { console.warn('[Cart Drawer] Session ID não encontrado. Iniciando fallback HTML.'); loadCartFromHtmlPage(); return; } const apiUrl = `/checkout/cart/api?session_id=${session_id}&store_id=${store_id}`; fetch(apiUrl) .then(res => { if (!res.ok) throw new Error('Checkout API request failed'); return res.json(); }) .then(response => { if (loading) loading.classList.remove('active'); if (listContainer) listContainer.style.opacity = '1'; let items = []; let cartPrice = 0.00; let cartQty = 0; if (response && response.data && response.data.cart) { const cartData = response.data.cart; if (cartData.products && Array.isArray(cartData.products)) { items = cartData.products; items.forEach(item => { cartQty += parseInt(item.quantity) || 0; cartPrice += (parseFloat(item.price) * parseInt(item.quantity)) || 0.00; }); } } const badgeSelectors = ['[data-cart="amount"]', '.cart-quantity', '.amount-cart']; badgeSelectors.forEach(sel => { document.querySelectorAll(sel).forEach(el => { el.style.display = cartQty > 0 ? 'flex' : 'none'; el.innerText = cartQty; }); }); if (items.length === 0) { if (listContainer) listContainer.innerHTML = ''; if (emptyMsg) emptyMsg.style.display = 'flex'; if (footer) footer.style.display = 'none'; } else { if (emptyMsg) emptyMsg.style.display = 'none'; if (footer) { footer.style.display = 'block'; updateCartDrawerSummaryValues(cartPrice); } let html = ''; items.forEach(item => { const productId = item.id; const variantId = item.variant_id || "0"; const cartId = item.cart_id || item.id; const textName = item.name; const prodUrl = item.url ? (item.url.https || item.url.http || item.url) : '#'; const qty = parseInt(item.quantity); const price = parseFloat(item.price); const imgUrl = item.images ? (item.images.small || item.images.medium || '/img/empty.png') : '/img/empty.png'; const variantName = (item.has_variation === true && item.variant) ? `

${item.variant.replace('|', ' - ')}

` : ''; html += `
${textName}
${textName} ${variantName}
R$ ${price.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
`; }); if (listContainer) listContainer.innerHTML = html; } }) .catch(err => { console.warn('[Cart Drawer] Erro ao carregar via API de checkout. Iniciando fallback HTML:', err); loadCartFromHtmlPage(); }); }; // Alterar quantidade do item via API (checkout API) window.updateCartDrawerQty = function(itemId, newQty, productId, variantId, cartId) { if (newQty < 1) { removeCartDrawerItem(productId, variantId, cartId); return; } const loading = document.querySelector('.cart-drawer-loading'); if (loading) loading.classList.add('active'); const session_id = getTraySessionId(); const store_id = getTrayStoreId(); if (!session_id) { const bodyParams = new URLSearchParams(); bodyParams.append('atualizar', '1'); bodyParams.append(`quantidade[${cartId}]`, newQty.toString()); fetch('/carrinho', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: bodyParams.toString() }) .then(() => { refreshCartDrawer(); if (typeof Tray !== 'undefined' && Tray.cart) Tray.cart.update(); }) .catch(err => { console.error('[Cart Drawer] Erro ao alterar quantidade (fallback):', err); refreshCartDrawer(); }); return; } const updateUrl = `/checkout/cart/api/item/${cartId}?session_id=${session_id}&store_id=${store_id}&quantity=${newQty}&product_id=${productId}&variant_id=${variantId}`; fetch(updateUrl, { method: 'PUT', headers: { 'Content-Type': 'application/json' } }) .then(res => res.json()) .then(data => { refreshCartDrawer(); if (typeof Tray !== 'undefined' && Tray.cart) { Tray.cart.update(); } }) .catch(err => { console.error('[Cart Drawer] Erro ao atualizar quantidade via API:', err); refreshCartDrawer(); }); }; // Remover item do carrinho (REST Delete com Fallback via URL) window.removeCartDrawerItem = function(productId, variantId, cartId) { const loading = document.querySelector('.cart-drawer-loading'); if (loading) loading.classList.add('active'); const session_id = getTraySessionId(); const variantSuffix = (variantId && parseInt(variantId) > 0) ? `/${variantId}` : ''; if (!session_id) { const fallbackRemoveUrl = cartId ? `/carrinho/remover/${cartId}` : `/carrinho/remover/${productId}`; fetch(fallbackRemoveUrl) .then(() => { refreshCartDrawer(); if (typeof Tray !== 'undefined' && Tray.cart) Tray.cart.update(); }) .catch(err => { console.error('[Cart Drawer] Erro ao remover (fallback):', err); refreshCartDrawer(); }); return; } const deleteUrl = `/web_api/carts/${session_id}/${productId}${variantSuffix}`; fetch(deleteUrl, { method: 'DELETE', headers: { 'Content-Type': 'application/json' } }) .then(res => { refreshCartDrawer(); if (typeof Tray !== 'undefined' && Tray.cart) { Tray.cart.update(); } }) .catch(err => { console.warn('[Cart Drawer] Erro ao remover via API, executando fallback...', err); const fallbackRemoveUrl = cartId ? `/carrinho/remover/${cartId}` : `/carrinho/remover/${productId}`; fetch(fallbackRemoveUrl) .then(() => { refreshCartDrawer(); if (typeof Tray !== 'undefined' && Tray.cart) { Tray.cart.update(); } }); }); }; // Adição ao Carrinho nativa via AJAX window.addTrayProductToCart = function(productId, qty, variantId, btnElement, fallbackUrl) { if (btnElement) { btnElement.classList.add('loading'); } const storeId = getTrayStoreId(); const addUrl = `/loja/cartService.php?loja=${storeId}&acao=incluir&IdProd=${productId}`; const bodyParams = new URLSearchParams(); bodyParams.append('variacao', (variantId || '0').toString()); bodyParams.append('quant', (qty || '1').toString()); fetch(addUrl, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: bodyParams.toString() }) .then(res => { if (btnElement) btnElement.classList.remove('loading'); refreshCartDrawer(); openCartDrawer(); }) .catch(err => { console.error('[Cart API] Erro ao adicionar via cartService.php:', err); if (fallbackUrl) { window.location.href = fallbackUrl; } else { window.location.href = '/carrinho'; } }); }; // Função auxiliar para atualizar o sumário de valores e checkout link window.updateCartDrawerSummaryValues = function(cartPrice) { const subtotalVal = document.getElementById('cart-drawer-subtotal-val'); const totalValEl = document.getElementById('cart-drawer-total-val'); const checkoutLink = document.getElementById('btn-checkout-vip-link'); if (subtotalVal) { subtotalVal.innerText = 'R$ ' + cartPrice.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } if (totalValEl) { totalValEl.innerText = 'R$ ' + cartPrice.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } if (checkoutLink) { let baseHref = checkoutLink.getAttribute('data-base-href'); if (!baseHref) { baseHref = checkoutLink.getAttribute('href') || '/carrinho'; checkoutLink.setAttribute('data-base-href', baseHref); } checkoutLink.setAttribute('href', baseHref); } }; // Escuta cliques nos botões de carrinho (desktop, mobile e topo) function initCartDrawerEvents() { // Intercepta todos os cliques nos ícones e links que abrem a sacola (Vanilla JS robusto, livre de conflitos de $) document.addEventListener('click', function(e) { const target = e.target.closest('.cart-toggle, .h-sacola, .item-menu.cart a, [href*="/carrinho"]:not(#btn-checkout-vip-link):not([href*="remover"]):not([href*="adicionar"])'); if (target) { e.preventDefault(); e.stopPropagation(); openCartDrawer(); } }, true); // Captura na fase de descida para interceptar antes de qualquer outro handler // Carrega as informações do carrinho na inicialização da página refreshCartDrawer(); } if (document.readyState === 'loading') { document.addEventListener("DOMContentLoaded", initCartDrawerEvents); } else { initCartDrawerEvents(); }