F44 MUDANZAS & TRASLADOS
Cotización instantánea por video

Cotizá tu mudanza
en minutos, no en días.

Filmá los ambientes de tu casa u oficina. Nuestro sistema identifica el mobiliario, calcula el volumen y te entrega una cotización estimada al instante — sin esperar visitas ni llamados.

1Grabá el video
Recorré cada ambiente lentamente, mostrando el mobiliario. Recomendado: 30 a 90 segundos.
Procesando...
Solicitudes recibidas
Sin solicitudes todavía.
// Crear modal de confirmación y esperar respuesta del usuario function confirmDeleteLead(leadId, name, timestamp, btnEl){ const existing = document.getElementById('confirmOverlay'); if (existing) existing.remove(); const overlay = document.createElement('div'); overlay.id = 'confirmOverlay'; overlay.style = 'position:fixed;inset:0;background:rgba(0,0,0,0.6);display:flex;align-items:center;justify-content:center;z-index:9999;'; const card = document.createElement('div'); card.style = 'background:var(--white);color:var(--paper);padding:18px;border-radius:10px;max-width:420px;width:92%;'; const dateStr = new Date(timestamp).toLocaleString('es-AR'); card.innerHTML = `
Borrar solicitud
Vas a borrar la solicitud de ${name} del ${dateStr}. Esta acción es irrecuperable en Cloudflare.
`; overlay.appendChild(card); document.body.appendChild(overlay); document.getElementById('cancelDel').addEventListener('click', ()=>{ overlay.remove(); }); document.getElementById('confirmDel').addEventListener('click', async ()=>{ try{ overlay.remove(); await performDeleteLead(leadId, btnEl); } catch(err){ alert('No se pudo borrar la solicitud: '+ err.message); } }); } async function performDeleteLead(leadId, btnEl){ if (!adminKey) { adminKey = prompt('Contraseña de administrador:'); if (!adminKey) return; } const r = await fetch(API_BASE + '/api/leads/' + encodeURIComponent(leadId), { method: 'DELETE', headers: { 'x-admin-key': adminKey } }); if (!r.ok){ const txt = await r.text(); alert('Error al borrar: '+ (txt || r.status)); return; } // Quitar la tarjeta DOM asociada (navegar hacia el contenedor padre .lead-card) let el = btnEl; while (el && !el.classList.contains('lead-card')) el = el.parentElement; if (el && el.parentElement) { const parent = el.parentElement; parent.removeChild(el); // Si el grupo quedó vacío, intentar eliminar el encabezado anterior si corresponde // buscamos el encabezado (un H3 creado justo antes del primer lead del grupo) // si el siguiente elemento es otro H3 o no hay más .lead-card elementos, limpiamos // Simplificamos: si no hay más .lead-card dentro leadsContainer, mostramos mensaje vacío const container = document.getElementById('leadsContainer'); if (!container.querySelector('.lead-card')) container.innerHTML = '
Sin solicitudes todavía.
'; } } function escapeHtml(str){ return String(str).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); }