COLECCIÓN ABRAZO

Envíos a todo el país
Recibí tu prenda en la puerta de tu casa.

100% Hecho a Mano
Tejido cuidadosamente prenda por prenda.

Pagos Seguros
Transferencia y tarjetas de crédito/débito.

¡Producto añadido al carrito!
precio: '$25.000', stock: 'Stock disponible', fotos: [ 'cardigan-abrazo-portada.jpg', 'cardigan-abrazo-detalle.jpg' ], especificaciones: [ { label: 'Material', valor: 'Hilado de algodón grosor fino' }, { label: 'Talle', valor: 'Personalizado' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Es un diseño cómodo, suave y pensado para usar todos los días, de esos que no te querés sacar.' }, 'chaleco-abrazo': { nombre: 'CHALECO ABRAZO', precio: '$15.000', stock: 'Stock disponible', fotos: [ 'chaleco-abrazo-portada.jpg', 'chaleco-abrazo-detalle.jpg' ], especificaciones: [ { label: 'Material', valor: 'Lana con brillo papayta grosor intermedio' }, { label: 'Talle', valor: 'Personalizado' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Este chaleco lo pensé para usar sin vueltas: con jean, con algo más arreglado o simplemente para estar cómoda y linda al mismo tiempo.\nEs liviano y super adaptable… de esos que terminan siendo un básico sin darte cuenta.' }, 'bufanda-capucha-abrazo': { nombre: 'BUFANDA CON CAPUCHA ABRAZO', precio: '$12.000', stock: 'Stock disponible', fotos: [ 'bufanda-capucha-abrazo-portada.jpg', 'bufanda-capucha-abrazo.jpg' ], especificaciones: [ { label: 'Material', valor: 'Lana nevilan' }, { label: 'Talle', valor: 'Personalizado' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Hay tejidos que llegan para quedarse en el día a día.\nEsta bufanda con capucha está pensada para eso: para abrigarte sin complicaciones, para salir rápido y sentirte cómoda al mismo tiempo.\nEs práctica, versátil y tiene ese toque especial de lo hecho a mano que transforma algo simple en único.\nOjalá la disfrutes tanto como yo disfruté crearla.' }, 'poncho-abrazo': { nombre: 'PONCHO ABRAZO', precio: '$20.000', stock: 'Stock disponible', fotos: [ 'poncho-abrazo-portada.jpg', 'poncho-abrazo-detalle.jgp' ], especificaciones: [ { label: 'Material', valor: 'Lana nevilan o cualquier lana que tengan en grosor intermedio (recomiendo lana con porcentaje de acrílico y lana porque es más calentita y tiene mejor caída que la lana totalmente acrílica)' }, { label: 'Talle', valor: 'Personalizado' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Este poncho nació granny por granny, entre ideas, pruebas y muchas ganas de crear algo lindo y abrigado para este invierno.\nVamos a tejerlo juntas paso a paso, de manera simple y acompañada, para que puedas disfrutar el proceso y ver cómo va tomando forma con tus propias manos.\nEspero que disfrutes muchísimo este proyecto tanto como disfruté creándolo.' }, 'chaleco-suave': { nombre: 'CHALECO ABRAZO SUAVE', precio: '$15.000', stock: 'Stock disponible', fotos: [ 'chaleco-suave-portada.jpg', 'chaleco-suave-detalle.jpg' ], especificaciones: [ { label: 'Material', valor: 'Lana pansy de L.H.O (260 grs)' }, { label: 'Talle', valor: 'Único' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Es un chaleco cómodo, amplio y para utilizar en cualquier momento del día.' }, 'cardigan-calido': { nombre: 'CÁRDIGAN ABRAZO CÁLIDO', precio: '$20.000', stock: 'Stock disponible', fotos: [ 'cardigan-calido-portada.jpg', 'cardigan-calido-detalle.jpg' ], especificaciones: [ { label: 'Material', valor: 'Profano de L.H.O' }, { label: 'Talle', valor: 'Personalizado' }, { label: 'Cuidados', valor: 'Lavado a mano, no retorcer y secar sobre superficie plana' } ], descripcion: 'Es un cárdigan cómodo, versátil y pensado para acompañarte en esos días en los que queremos sentirnos abrigadas y lindas.' } }; // Elementos del Modal const modalOverlay = document.getElementById('modal-producto-overlay'); const btnCerrarModal = document.getElementById('btn-cerrar-modal'); const modalFotoPrincipal = document.getElementById('modal-foto-principal'); const modalMiniaturas = document.getElementById('modal-miniaturas'); const modalNombre = document.getElementById('modal-nombre'); const modalPrecio = document.getElementById('modal-precio'); const modalStock = document.getElementById('modal-stock'); const modalEspecificaciones = document.getElementById('modal-especificaciones'); const modalDescripcion = document.getElementById('modal-descripcion'); const inputCantidad = document.getElementById('modal-input-cantidad'); const btnMenosCant = document.getElementById('btn-menos-cant'); const btnMasCant = document.getElementById('btn-mas-cant'); const btnComprarAhora = document.getElementById('btn-comprar-ahora'); const btnModalAgregarCarrito = document.getElementById('btn-modal-agregar-carrito'); const toastCarrito = document.getElementById('toast-carrito'); const toastMensaje = document.getElementById('toast-mensaje'); const contadorCarrito = document.querySelector('.contador-rojo'); let cantidadEnCarrito = 0; let productoActualSeleccionado = null; let productoActualIdSeleccionado = null; // Función para mostrar Toast de notificación function mostrarToast(mensaje) { toastMensaje.textContent = mensaje; toastCarrito.classList.add('activo'); setTimeout(() => { toastCarrito.classList.remove('activo'); }, 2500); } // Función para abrir modal con la información del producto function abrirModalProducto(idProducto) { const data = PRODUCTOS_DATA[idProducto]; if (!data) return; productoActualSeleccionado = data; productoActualIdSeleccionado = idProducto; inputCantidad.value = 1; modalNombre.textContent = data.nombre; modalPrecio.textContent = data.precio; modalStock.textContent = data.stock; modalDescripcion.textContent = data.descripcion; // Renderizar especificaciones modalEspecificaciones.innerHTML = data.especificaciones.map(spec => `
  • ${spec.label}: ${spec.valor}
  • ` ).join(''); // Configurar fotos y miniaturas modalFotoPrincipal.src = data.fotos[0]; modalFotoPrincipal.onerror = () => { modalFotoPrincipal.src = data.fotos[0]; }; modalMiniaturas.innerHTML = ''; data.fotos.forEach((foto, index) => { const item = document.createElement('div'); item.className = `miniatura-item ${index === 0 ? 'activo' : ''}`; const img = document.createElement('img'); img.src = foto; img.alt = `${data.nombre} foto ${index + 1}`; img.onerror = function() { this.src = data.fotos[0]; // fallback a la foto principal si aún no existe }; item.appendChild(img); item.addEventListener('mouseenter', () => { document.querySelectorAll('.miniatura-item').forEach(m => m.classList.remove('activo')); item.classList.add('activo'); modalFotoPrincipal.style.opacity = '0.5'; setTimeout(() => { modalFotoPrincipal.src = img.src; modalFotoPrincipal.style.opacity = '1'; }, 100); }); item.addEventListener('click', () => { document.querySelectorAll('.miniatura-item').forEach(m => m.classList.remove('activo')); item.classList.add('activo'); modalFotoPrincipal.src = img.src; }); modalMiniaturas.appendChild(item); }); modalOverlay.classList.add('activo'); document.body.style.overflow = 'hidden'; } // Función para cerrar modal function cerrarModal() { modalOverlay.classList.remove('activo'); document.body.style.overflow = 'auto'; } btnCerrarModal.addEventListener('click', cerrarModal); modalOverlay.addEventListener('click', (e) => { if (e.target === modalOverlay) cerrarModal(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && modalOverlay.classList.contains('activo')) cerrarModal(); }); // Controles de cantidad en modal btnMenosCant.addEventListener('click', () => { let val = parseInt(inputCantidad.value) || 1; if (val > 1) inputCantidad.value = val - 1; }); btnMasCant.addEventListener('click', () => { let val = parseInt(inputCantidad.value) || 1; inputCantidad.value = val + 1; }); // Eventos para abrir modal al hacer clic en fotos o títulos de la grilla document.querySelectorAll('.tarjeta-producto').forEach(tarjeta => { const id = tarjeta.getAttribute('data-id'); const enlaces = tarjeta.querySelectorAll('.enlace-detalle-producto, .contenedor-imagen img'); enlaces.forEach(enlace => { enlace.addEventListener('click', (e) => { e.preventDefault(); abrirModalProducto(id); }); }); }); // Botón "Agregar al carrito" dentro del Modal btnModalAgregarCarrito.addEventListener('click', () => { const cant = parseInt(inputCantidad.value) || 1; if (window.agregarAlCarrito) { window.agregarAlCarrito(productoActualIdSeleccionado, productoActualSeleccionado.nombre, cant); } cerrarModal(); }); // Botón "Comprar ahora" dentro del Modal btnComprarAhora.addEventListener('click', () => { const cant = parseInt(inputCantidad.value) || 1; if (window.iniciarCompraProducto) { window.iniciarCompraProducto(productoActualIdSeleccionado, productoActualSeleccionado.nombre, cant); } }); // Botones de agregar rápido en la grilla const botonesAgregar = document.querySelectorAll('.boton-agregar-rapido'); botonesAgregar.forEach(button => { button.addEventListener('click', (e) => { e.stopPropagation(); const tarjeta = button.closest('.tarjeta-producto'); const id = tarjeta.getAttribute('data-id'); const nombre = tarjeta.querySelector('.nombre-producto').textContent.trim(); if (window.agregarAlCarrito) { window.agregarAlCarrito(id, nombre, 1); } }); }); // Funcionalidad de favoritos (corazones) const botonesFavorito = document.querySelectorAll('.boton-favorito'); botonesFavorito.forEach(button => { button.addEventListener('click', (e) => { e.stopPropagation(); button.classList.toggle('activo'); }); }); // Buscador desplegable y filtro const botonLupa = document.getElementById('boton-lupa'); const cajaBusqueda = document.getElementById('caja-busqueda'); const inputBuscar = document.getElementById('input-buscar'); botonLupa.addEventListener('click', (e) => { e.stopPropagation(); cajaBusqueda.classList.toggle('activo'); if (cajaBusqueda.classList.contains('activo')) { inputBuscar.focus(); } }); document.addEventListener('click', (e) => { if (!cajaBusqueda.contains(e.target) && e.target !== botonLupa && !botonLupa.contains(e.target)) { cajaBusqueda.classList.remove('activo'); } }); inputBuscar.addEventListener('input', (e) => { const textoBusqueda = e.target.value.toLowerCase().trim(); const tarjetas = document.querySelectorAll('.tarjeta-producto'); tarjetas.forEach(tarjeta => { const nombreProducto = tarjeta.querySelector('.nombre-producto').textContent.toLowerCase(); if (nombreProducto.includes(textoBusqueda)) { tarjeta.style.display = 'block'; } else { tarjeta.style.display = 'none'; } }); });