{"title":"Compras2026 🛒","description":"\u003c!-- ================================ --\u003e\n\u003c!-- BUSCADOR FLOTANTE + COTIZADOR FS --\u003e\n\u003c!-- ================================ --\u003e\n\u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"\u003e\u003c\/script\u003e\n\u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2canvas\/1.4.1\/html2canvas.min.js\"\u003e\u003c\/script\u003e\n\n\n\n\n\u003cdiv class=\"fs-floating-search-container\"\u003e\n  \u003cform class=\"fs-floating-search-form\" onsubmit=\"return false;\"\u003e\n    \u003cinput type=\"text\" id=\"fs-search-input\" class=\"fs-floating-search-input\" placeholder=\"Buscar por SKU o Descripción\" autocomplete=\"off\"\u003e\n    \u003cbutton type=\"button\" class=\"fs-floating-search-button\"\u003e🔍\u003c\/button\u003e\n  \u003c\/form\u003e\n\n  \u003cul id=\"fs-autocomplete-results\" class=\"fs-autocomplete-results\"\u003e\u003c\/ul\u003e\n\u003c\/div\u003e\n\n\u003c!-- ================================ --\u003e\n\u003c!-- COTIZADOR --\u003e\n\u003c!-- ================================ --\u003e\n\n\u003cdiv class=\"fs-quote-wrapper\"\u003e\n  \n  \u003ctable id=\"fs-quote-table\"\u003e\n    \u003cthead\u003e\n      \u003ctr\u003e\n  \u003cth\u003eImagen\u003c\/th\u003e\n  \u003cth\u003eProducto\u003c\/th\u003e\n  \u003cth\u003eDescripción\u003c\/th\u003e\n  \u003cth\u003ePrecio\u003c\/th\u003e\n  \u003cth\u003eCantidad\u003c\/th\u003e\n  \u003cth\u003eSubtotal\u003c\/th\u003e\n  \u003cth\u003e\u003c\/th\u003e\n\u003c\/tr\u003e\n\n    \u003c\/thead\u003e\n    \u003ctbody\u003e\u003c\/tbody\u003e\n  \u003c\/table\u003e\n  \n\n\u003c!-- 🔹 BOTONES COTIZADOR --\u003e\n\u003cdiv class=\"fs-buttons\"\u003e\n  \u003c!-- \u003cbutton id=\"fs-genesis-btn\"\u003e🌐 Genesis\u003c\/button\u003e --\u003e\n  \u003cbutton id=\"fs-excel-btn\"\u003e📦 Descargar Excel\u003c\/button\u003e\n  \u003cbutton id=\"fs-pdf-btn\"\u003e📋 Copiar Lista\u003c\/button\u003e\n  \u003cbutton id=\"fs-print-btn\"\u003e🖨️ Imprimir\u003c\/button\u003e\n  \u003cbutton id=\"fs-copy-img-btn\"\u003e📋 Copiar como Imagen\u003c\/button\u003e\n  \u003cbutton id=\"save-quote-btn\"\u003e💾 Guardar Compra\u003c\/button\u003e\n  \u003cbutton id=\"view-history-btn\"\u003e📂 Historial Compras\u003c\/button\u003e\n  \u003cbutton id=\"fs-whatsapp-btn\"\u003e📲 WhatsApp #?\u003c\/button\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- ===== MODAL HISTORIAL COTIZACIONES ===== --\u003e\n\u003cdiv id=\"quote-history-modal\" class=\"qh-modal\"\u003e\n  \u003cdiv class=\"qh-modal-content\"\u003e\n    \u003cdiv class=\"qh-header\"\u003e\n      \u003ch3 style=\"color:#ffffff;\"\u003eHistorial de Cotizaciones\u003c\/h3\u003e\n      \u003cbutton id=\"qh-close\"\u003e×\u003c\/button\u003e\n    \u003c\/div\u003e\n\u003cinput type=\"text\" id=\"qh-search\" placeholder=\"🔎 Buscar cotización...\" style=\"width:100%;padding:8px;margin-bottom:10px;border:1px solid #ddd;border-radius:6px;\"\u003e\n\n    \u003cdiv id=\"qh-list\" class=\"qh-list\"\u003e\u003c\/div\u003e\n\n    \u003cdiv class=\"qh-footer\"\u003e\n      \u003cbutton id=\"qh-clear-all\"\u003eBorrar todo\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\n\u003cstyle\u003e\n\/* ===== BUSCADOR ===== *\/\n.fs-floating-search-container {\n  position: relative;\n  max-width: 720px;\n  margin: 10px auto 10px;\n  background: #fff;\n}\n\n.fs-floating-search-form {\n  display: flex;\n  border: 1px solid #ddd;\n}\n\n.fs-floating-search-input {\n  flex: 1;\n  height: 40px; \/* Altura fija *\/\n  font-size: 16px;\n  padding: 0 10px; \/* padding horizontal *\/\n}\n\n.fs-floating-search-button {\n  background: none;\n  border: none;\n  font-size: 20px;\n  padding: 0 12px;\n  cursor: pointer;\n}\n\n\/* ===== SUGERIDOS ===== *\/\n.fs-autocomplete-results {\n  position: absolute;\n  width: 100%;\n  background: #fff;\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  border: 1px solid #ddd;\n  max-height: 400px;\n  overflow-y: auto;\n  z-index: 9999;\n}\n\n.fs-autocomplete-results li {\n  padding: 1px 1px;\n  cursor: pointer;\n  border-bottom: 1px solid #eee;\n}\n\n\n.fs-autocomplete-results li:hover {\n  background: #3399ff;\n  color: #fff;\n}\n\n\n\n\/* ===== COTIZADOR ===== *\/\n.fs-quote-wrapper {\n  max-width: 1100px;\n  margin: 10px auto;\n  font-family: Arial, sans-serif;\n}\n\n#fs-quote-table {\n  width: 100%;\n  border-collapse: collapse;\n}\n\n\/* ===== TITULOS DE LA TABLA ===== *\/\n#fs-quote-table th {\n  border: 1px solid #ddd;\n  padding: 10px;\n  font-size: 16px;   \/* tamaño títulos *\/\n  font-weight: 700;\n  text-align: center;\n  background: #f5f5f5;\n   color: black; \/* 🔹 Aquí cambias el color de los títulos *\/\n}\n\n\/* ===== CONTENIDO DE LA TABLA ===== *\/\n#fs-quote-table td {\n  border: 1px solid #ddd;\n  padding: 2px;\n  font-size: 14px;   \/* tamaño filas *\/\n  text-align: center;      \/* centra horizontal *\/\n  vertical-align: middle;  \/* centra vertical *\/\n   color: #000000; \/* 🔹 Aquí cambias el color de los textos de las filas *\/\n}\n\n\n#fs-quote-table input {\n  width: 60px;\n}\n\n.fs-total {\n  text-align: left !important;  \/* 🔥 fuerza alineación izquierda *\/\n  margin-top: 15px;\n}\n\n  .fs-suggest-price {\n  color: #d60000;\n  \n}\n\n.fs-key-active {\n  background: #3399ff !important;\n  color: #fff !important;\n}\n\n  \/* ===== NUEVO DISEÑO SUGERENCIAS EN UNA SOLA LINEA ===== *\/\n\n.fs-suggest-row {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n\n.fs-suggest-row img {\n  width: 100px;\n  height: 100px;\n  object-fit: contain;\n  border: none;           \/* 🔥 quitamos borde *\/\n  border-radius: 0;       \/* 🔥 sin redondeo *\/\n  background: transparent;\/* 🔥 sin fondo *\/\n}\n\n.fs-suggest-content {\n  display: flex;\n  align-items: center;\n  gap: 15px;\n  flex-wrap: wrap;\n}\n\n.fs-suggest-title {\n  font-weight: 700;\n  font-size: 15px;\n}\n\n.fs-suggest-desc {\n  font-size: 13px;\n  color: #555;\n  max-width: 250px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.fs-suggest-price {\n  color: #d60000;\n  font-weight: 700;\n  font-size: 14px;\n}\n\n.fs-suggest-stock {\n  font-size: 13px;\n  font-weight: 500;\n}\n\n  .fs-autocomplete-results {\n  list-style: none !important;\n  padding-left: 0 !important;\n  margin: 0 !important;\n}\n\n.fs-autocomplete-results li {\n  list-style: none !important;\n}\n\n  .fs-quote-img {\n  width: 50px;\n  height: 50px;\n  object-fit: contain;\n  display: block;\n  margin: 0 auto 5px;\n}\n\n  \/* ===== FACTOR SELECTOR ===== *\/\n\n.fs-factor-selector {\n  margin: 15px 0;\n  display: flex;\n  gap: 20px;\n  font-size: 14px;\n  align-items: center;\n  flex-wrap: wrap;\n  justify-content: center; \/* 🔥 CENTRADO *\/\n\n}\n\n.fs-factor-selector label {\n  cursor: pointer;\n  font-weight: 600;\n}\n\n.fs-factor-selector input {\n  margin-right: 5px;\n}\n\n\/* ===== BOTONES COTIZADOR ===== *\/\n\n.fs-buttons {\n  display: flex;\n  gap: 8px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin-top: 35px;\n}\n\n.fs-buttons button {\n  padding: 8px 9px;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n  font-size: 14px;\n  background: rgb(5, 14, 99);\n  color: white;\n  transition: 0.2s;\n}\n\n.fs-buttons button:hover {\n  background: rgb(229, 16, 16);\n}\n  \n#fs-whatsapp-btn {\n  background-color: rgb(40, 167, 69); \/* Verde más oscuro *\/\n  color: white;              \/* Texto blanco *\/\n  border: none;              \/* Sin borde *\/\n  border-radius: 8px;        \/* Bordes redondeados *\/\n  padding: 8px 9px;\n  font-size: 14px;           \/* Tamaño de letra *\/\n  cursor: pointer;           \/* Manito al pasar el mouse *\/\n  transition: background 0.3s; \/* Suave transición *\/\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;                  \/* Espacio entre icono y texto *\/\n}\n\n#fs-whatsapp-btn {\n  margin-top: 6px; \/* separa del resto de los botones *\/\n}\n\n  \n\/* Efecto al pasar el mouse *\/\n#fs-whatsapp-btn:hover {\n  background-color: #25D366; \/* Verde WhatsApp *\/\n  }\n\n\/* ===== MODAL ===== *\/\n.qh-modal {\n  display: none;\n  position: fixed;\n  inset: 0;\n  background: rgba(0,0,0,0.6);\n  backdrop-filter: blur(4px);\n  justify-content: center;\n  align-items: center;\n  z-index: 99999;\n}\n\n.qh-modal-content {\n  background: #fff;\n  width: 95%;\n  max-width: 500px;\n  max-height: 80vh;\n  border-radius: 12px;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n\n.qh-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 15px;\n  background: #111;\n  color: #fff;\n}\n\n.qh-header h3 {\n  margin: 0;\n  font-size: 16px;\n}\n\n.qh-header button {\n  background: none;\n  border: none;\n  color: #fff;\n  font-size: 22px;\n  cursor: pointer;\n}\n\n.qh-list {\n  overflow-y: auto;\n  padding: 10px;\n  flex: 1;\n}\n\n.qh-item {\n  border: 1px solid #ddd;\n  border-radius: 8px;\n  padding: 10px;\n  margin-bottom: 8px;\n  cursor: pointer;\n  transition: 0.2s;\n}\n\n.qh-item:hover {\n  background: #f5f5f5;\n}\n\n.qh-item strong {\n  display: block;\n  font-size: 13px;\n}\n\n.qh-footer {\n  padding: 10px;\n  border-top: 1px solid #ddd;\n  text-align: center;\n}\n\n#qh-clear-all {\n  background: red;\n  color: white;\n  border: none;\n  padding: 6px 12px;\n  border-radius: 6px;\n  cursor: pointer;\n}\n\n.qh-title{\n  color: #ffffff;\n}\n\n.fs-td-price input {\n  color: #d60000;\n  font-weight: 700;\n}\n\n\n\n\n\/* 📱 DISEÑO CARD OPTIMIZADO PARA CELULAR *\/\n@media (max-width: 480px) {\n\n  table thead { \n    display: none; \n  }\n\n  table, tbody { \n    width: 100%; \n  }\n\n  tr {\n    display: grid !important;\n    grid-template-columns: 90px 1fr 1fr 1fr;\n    grid-template-areas:\n      \"foto titulo titulo titulo\"\n      \"foto desc desc desc\"\n      \"foto precio cantidad subtotal\";\n    gap: 6px;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 10px;\n    margin-bottom: 15px;\n    background: #fff;\n    position: relative;\n    box-shadow: 0 4px 8px rgba(0,0,0,0.05);\n  }\n\n  td {\n    box-sizing: border-box;\n  }\n\n  \/* 🖼 IMAGEN *\/\n  td:nth-child(1) { \n    grid-area: foto; \n  }\n\n  td:nth-child(1) img {\n    width: 80px !important;\n    height: 80px !important;\n    object-fit: contain;\n  }\n\n  \/* 📝 TÍTULO *\/\n  td:nth-child(2) { \n    grid-area: titulo; \n    font-weight: bold; \n    font-size: 13px; \n    padding-right: 20px; \n  }\n\n  \/* 📄 DESCRIPCIÓN *\/\n  td:nth-child(3) { \n    grid-area: desc; \n    font-size: 11px; \n    color: #666; \n  }\n\n  \/* 💰 PRECIO *\/\n  td:nth-child(4) { \n    grid-area: precio; \n    text-align: center;\n  }\n\n  \/* 🔢 CANTIDAD *\/\n  td:nth-child(5) { \n    grid-area: cantidad; \n    text-align: center;\n  }\n\n  \/* 🧾 SUBTOTAL *\/\n  td:nth-child(6) { \n    grid-area: subtotal; \n    text-align: center;\n    font-weight: bold;\n  }\n\n  \/* Etiquetas pequeñas arriba *\/\n  td:nth-child(4)::before { \n    content: \"Precio\"; \n    display: block; \n    font-size: 9px; \n    color: #888; \n  }\n\n  td:nth-child(5)::before { \n    content: \"Cant.\"; \n    display: block; \n    font-size: 9px; \n    color: #888; \n  }\n\n  td:nth-child(6)::before { \n    content: \"Subt.\"; \n    display: block; \n    font-size: 9px; \n    color: #888; \n  }\n\n  \/* Inputs de cantidad *\/\n  .qty-input, \n  td input {\n    width: 100% !important;\n    padding: 4px 2px !important;\n    font-size: 12px !important;\n    text-align: center;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    height: 30px;\n  }\n\n  \/* ❌ BOTÓN ELIMINAR *\/\n  td:last-child {\n    position: absolute;\n    top: 5px;\n    right: 5px;\n    width: auto !important;\n  }\n\n  .remove-btn {\n    background: none;\n    border: none;\n    color: #ff0000;\n    font-size: 18px;\n    font-weight: bold;\n    padding: 5px;\n    cursor: pointer;\n  }\n\n}\n\n\n  \/* ===================================================== *\/\n\/* 📱 AJUSTES SOLO PARA CELULAR (TOTAL + CHECK + BOTONES) *\/\n\/* ===================================================== *\/\n\n@media (max-width: 480px) {\n\n  \/* ===== TOTAL + CHECKS EN UNA SOLA LINEA ===== *\/\n\n  .fs-total {\n    display: flex !important;\n    align-items: center;\n    justify-content: space-between;\n    gap: 8px;\n    flex-wrap: nowrap !important; \/* 🔥 evita que bajen *\/\n    font-size: 10px;\n    width: 100%;\n  }\n\n  .fs-total strong {\n    white-space: nowrap;\n    font-size: 10px;\n  }\n\n  .fs-factor-selector {\n    display: flex !important;\n    align-items: center;\n    gap: 8px;\n    flex-wrap: nowrap !important; \/* 🔥 evita salto *\/\n    justify-content: flex-end;\n    font-size: 12px; \/* 🔥 letra un poco más pequeña *\/\n  }\n\n  .fs-factor-selector label {\n    white-space: nowrap;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n\n  .fs-factor-selector input {\n    transform: scale(0.9); \/* 🔥 checkbox ligeramente más pequeño *\/\n    margin: 0;\n  }\n\n\n  \/* ===== BOTONES UNO DEBAJO DEL OTRO ===== *\/\n\n  .fs-buttons {\n    display: flex !important;\n    flex-direction: column !important; \/* 🔥 vertical *\/\n    gap: 12px;\n    width: 100%;\n    margin-top: 25px;\n  }\n\n  .fs-buttons button,\n  #fs-whatsapp-btn {\n    width: 100% !important; \/* 🔥 ancho completo *\/\n    font-size: 15px;\n    padding: 12px;\n  }\n\n}\n\n #fs-whatsapp-btn {\n  margin-top: 1px; \/* separa del resto de los botones *\/\n  display: flex;              \/* 🔥 usamos flex *\/\n  justify-content: center;    \/* 🔥 centra horizontal *\/\n  align-items: center;        \/* 🔥 centra vertical *\/\n  text-align: center;         \/* 🔥 asegura centrado del texto *\/\n  gap: 8px;                   \/* espacio entre icono y texto *\/\n \n}\n\n  \n\u003c\/style\u003e\n\n\u003c!-- ================================ --\u003e\n\u003c!--Genesis1QuoteSystem v1.0    --\u003e\n\u003c!-- ================================ --\u003e\n\n\u003cscript\u003e\n  const quoteItems = [];\n  let currentFactor = 1;\n  \/* ============================= *\/\n\/* FUNCIONES GLOBALES *\/\n\/* ============================= *\/\n\nfunction generarNumeroCotizacion() {\n  const fecha = new Date();\n  return \"COT-\" + fecha.getFullYear() +\n         (fecha.getMonth()+1).toString().padStart(2,\"0\") +\n         fecha.getDate().toString().padStart(2,\"0\") +\n         \"-\" + Math.floor(Math.random()*1000);\n}\n\nfunction limpiarHTML(texto){\n  return (texto || \"\")\n    .replace(\/\u003c[^\u003e]*\u003e\/g, '')\n    .replace(\/\u0026nbsp;\/g, ' ')\n    .replace(\/\u0026amp;\/g, '\u0026')\n    .trim();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"fs-search-input\");\n  const results = document.getElementById(\"fs-autocomplete-results\");\n  const tableBody = document.querySelector(\"#fs-quote-table tbody\");\n  const totalEl = document.getElementById(\"fs-quote-total\");\n\n  \n\n\/\/ Detectar cambio de opción\ndocument.querySelectorAll('input[name=\"fs-factor\"]').forEach(radio =\u003e {\n  radio.addEventListener(\"change\", function() {\n\n    currentFactor = 1;\n\n    if (this.value === \"mt\") {\n      currentFactor \/= 0.7932;\n    }\n\n    if (this.value === \"pb\") {\n      currentFactor \/= 0.8805;\n    }\n\n    if (this.value === \"minimo\") {\n      currentFactor \/= 0.9216;\n    }\n\n    renderQuote(); \/\/ 🔥 recalcula todo\n  });\n});\n\n\n  \n\n  \/* ============================= *\/\n  \/* BUSCADOR AUTOCOMPLETE *\/\n  \/* ============================= *\/\n\n  input.addEventListener(\"input\", function () {\n    const q = this.value.trim();\n    if (q.length \u003c 2) {\n      results.innerHTML = \"\";\n      return;\n    }\n\n    fetch(`\/search\/suggest.json?resources[type]=product\u0026q=${encodeURIComponent(q)}\u0026resources[options][fields]=title,body`)\n      .then(r =\u003e r.json())\n      .then(data =\u003e {\n        results.innerHTML = \"\";\n\n        const products = data.resources?.results?.products || [];\n\n        if (!products.length) {\n\n  results.innerHTML = `\n    \u003cli id=\"fs-add-manual\"\u003e\n      ➕ Agregar \"${q}\" manualmente\n    \u003c\/li\u003e\n  `;\n\n  document.getElementById(\"fs-add-manual\").addEventListener(\"click\", function(){\n\n    quoteItems.push({\n      title: q.toUpperCase(),\n      body: \"\",\n      price: 0,\n      image: \"\",\n      qty: 1\n    });\n\n    results.innerHTML = \"\";\n    input.value = \"\";\n    input.focus();\n\n    renderQuote();\n  });\n\n  return;\n}\n\n        products.forEach(item =\u003e {\n\n          const price = Number(item.price) || 0;\n          const existencia = item.available\n            ? \"🟢 En stock\"\n            : \"🔴 Sin stock\";\n\n          const image = item.image || \"\";\n\n          const li = document.createElement(\"li\");\n\n          li.innerHTML = `\n  \u003cdiv class=\"fs-suggest-row\"\u003e\n    ${image ? `\u003cimg src=\"${image}\" alt=\"${item.title}\"\u003e` : \"\"}\n    \n    \u003cdiv class=\"fs-suggest-content\"\u003e\n      \u003cstrong class=\"fs-suggest-title\"\u003e${item.title}\u003c\/strong\u003e\n      \u003cspan class=\"fs-suggest-desc\"\u003e${item.body || \"\"}\u003c\/span\u003e\n      \u003cspan class=\"fs-suggest-price\"\u003e$${price.toFixed(2)}\u003c\/span\u003e\n      \u003cspan class=\"fs-suggest-stock\"\u003e${existencia}\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n`;\n\n\n          li.addEventListener(\"click\", () =\u003e {\n            addToQuote(item);\n            input.value = \"\";\n            results.innerHTML = \"\";\n          });\n\n          results.appendChild(li);\n        });\n      })\n      .catch(() =\u003e {\n        results.innerHTML = \"\u003cli style='color:red'\u003eError al buscar\u003c\/li\u003e\";\n      });\n  });\n\n  \/* ============================= *\/\n  \/* COTIZADOR (NO TOCAR) *\/\n  \/* ============================= *\/\n\n  function addToQuote(item) {\n    const price = Number(item.price) || 0;\n\n    const existing = quoteItems.find(p =\u003e p.title === item.title);\n\nif (existing) {\n  existing.qty += 1;\n} else {\n  quoteItems.push({\n    title: item.title,\n    body: item.body,\n    price: price,\n    image: item.image || \"\",\n    qty: 1\n  });\n}\n\nresults.innerHTML = \"\";\ninput.value = \"\";\ninput.focus();\n\nrenderQuote();\n  }\n\n  window.renderQuote = function() {\n\n    tableBody.innerHTML = \"\";\n    let total = 0;\n\n    quoteItems.forEach((item, index) =\u003e {\n      const adjustedPrice = item.price * currentFactor;\n      const subtotal = adjustedPrice * item.qty;\n\n      total += subtotal;\n\n      const tr = document.createElement(\"tr\");\n      tr.innerHTML = `\n  \u003ctd\u003e\n    ${item.image ? `\u003cimg src=\"${item.image}\" class=\"fs-quote-img\"\u003e` : \"\"}\n  \u003c\/td\u003e\n\n  \u003ctd\u003e${item.title}\u003c\/td\u003e\n\n  \u003ctd\u003e${item.body || \"\"}\u003c\/td\u003e\n\n  \u003ctd class=\"fs-td-price\"\u003e\n  \u003cinput type=\"number\" step=\"0.01\" min=\"0\"\n    value=\"${adjustedPrice.toFixed(2)}\"\n    onchange=\"updatePrice(${index}, this.value)\"\u003e\n\u003c\/td\u003e\n\n\n\n\n  \u003ctd\u003e\n    \u003cinput type=\"number\" min=\"1\" value=\"${item.qty}\"\n      onchange=\"updateQty(${index}, this.value)\"\u003e\n  \u003c\/td\u003e\n\n  \u003ctd\u003e$${subtotal.toFixed(2)}\u003c\/td\u003e\n\n  \u003ctd\u003e\n    \u003cbutton onclick=\"removeItem(${index})\"\u003e❌\u003c\/button\u003e\n  \u003c\/td\u003e\n`;\n\n      tableBody.appendChild(tr);\n    });\n\n    totalEl.textContent = \"$\" + total.toFixed(2);\n  }\n\n  window.updateQty = function(index, qty) {\n    quoteItems[index].qty = parseInt(qty) || 1;\n    renderQuote();\n  };\n\n  window.updatePrice = function(index, newPrice) {\n  const precio = parseFloat(newPrice) || 0;\n\n  \/\/ Guardamos el precio REAL ya modificado\n  quoteItems[index].price = precio \/ currentFactor;\n\n  renderQuote();\n};\n\n\n  window.removeItem = function(index) {\n    quoteItems.splice(index, 1);\n    renderQuote();\n  };\n\n});\n\u003c\/script\u003e\n\n\n\u003c!-- ================================ --\u003e\n\u003c!-- scrip mueve pantalla    --\u003e\n\u003c!-- ================================ --\u003e\n\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  \/\/ 🔥 SOLO en la página del cotizador\n  if (window.location.href.includes(\"cotizador2026\")) {\n\n    const salto = window.innerHeight * 0.62; \/\/ 40% de la pantalla\n\n    window.scrollBy({\n      top: salto,\n      left: 0,\n      behavior: \"smooth\"\n    });\n\n  }\n\n});\n\u003c\/script\u003e\u0026gt;\n\n\n\u003c!-- ================================ --\u003e\n\u003c!-- scrip agrega producto al cotizador    --\u003e\n\u003c!-- ================================ --\u003e\n \u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"fs-search-input\");\n  const results = document.getElementById(\"fs-autocomplete-results\");\n\n  let index = -1;\n\n  function getItems() {\n    return results.querySelectorAll(\"li\");\n  }\n\n  function highlight() {\n    const items = getItems();\n    items.forEach(li =\u003e li.classList.remove(\"fs-key-active\"));\n\n    if (items[index]) {\n      items[index].classList.add(\"fs-key-active\");\n      items[index].scrollIntoView({ block: \"nearest\" });\n    }\n  }\n\n  input.addEventListener(\"keydown\", function (e) {\n    const items = getItems();\n    if (!items.length) return;\n\n    if (e.key === \"ArrowDown\") {\n      e.preventDefault();\n      index++;\n      if (index \u003e= items.length) index = 0;\n      highlight();\n    }\n\n    if (e.key === \"ArrowUp\") {\n      e.preventDefault();\n      index--;\n      if (index \u003c 0) index = items.length - 1;\n      highlight();\n    }\n\n    if (e.key === \"Enter\") {\n      if (index \u003e= 0 \u0026\u0026 items[index]) {\n        e.preventDefault();\n        items[index].click(); \/\/ 🔥 AGREGA AL COTIZADOR\n        index = -1;\n      }\n    }\n  });\n\n  \/\/ Reset cuando cambias búsqueda\n  input.addEventListener(\"input\", () =\u003e {\n    index = -1;\n  });\n\n});\n\u003c\/script\u003e\n\n\n\u003c!-- ================================ --\u003e\n\u003c!-- scrip genera la cotizacion y codigo y botones    --\u003e\n\u003c!-- ================================ --\u003e\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function(){\n\n\/* ============================= *\/\n\/* NUMERO DE COTIZACION *\/\n\/* ============================= *\/\nfunction generarNumeroCotizacion() {\n  const fecha = new Date();\n  return \"COT-\" + fecha.getFullYear() +\n         (fecha.getMonth()+1).toString().padStart(2,\"0\") +\n         fecha.getDate().toString().padStart(2,\"0\") +\n         \"-\" + Math.floor(Math.random()*1000);\n}\n\n\/* ============================= *\/\n\/* LIMPIAR HTML *\/\n\/* ============================= *\/\nfunction limpiarHTML(texto){\n  return (texto || \"\")\n    .replace(\/\u003c[^\u003e]*\u003e\/g, '')\n    .replace(\/\u0026nbsp;\/g, ' ')\n    .replace(\/\u0026amp;\/g, '\u0026')\n    .trim();\n}\n\n\/* ============================= *\/\n\/* PEDIR AUTO *\/\n\/* ============================= *\/\nfunction pedirAuto(){\n  let auto = prompt(\"Auto:\");\n  if(auto === null) return null; \/\/ canceló\n  return auto.trim();\n}\n\n\/* ============================= *\/\n\/* BOTON GENESIS *\/\n\/* ============================= *\/\ndocument.getElementById(\"fs-genesis-btn\")?.addEventListener(\"click\", function(){\n  window.location.href = \"https:\/\/genesis1.mx\/\";\n});\n\n\/* ============================= *\/\n\/* DESCARGAR EXCEL *\/\n\/* ============================= *\/\ndocument.getElementById(\"fs-excel-btn\")?.addEventListener(\"click\", function(){\n\n  if (!quoteItems || quoteItems.length === 0) {\n    alert(\"No hay productos en el cotizador.\");\n    return;\n  }\n\n  const auto = pedirAuto();\n  if(auto === null) return;\n\n  let numero = generarNumeroCotizacion();\n  let fecha = new Date().toLocaleDateString();\n\n  let csv = `Cotización ${numero}\\nFecha: ${fecha}\\nAuto: ${auto}\\n\\n`;\n  csv += \"Producto,Descripcion,Precio,Cantidad,Subtotal\\n\";\n\n  quoteItems.forEach(item =\u003e {\n\n    const adjustedPrice = item.price * currentFactor;\n    const subtotal = adjustedPrice * item.qty;\n    const descripcion = limpiarHTML(item.body).replace(\/\"\/g, '\"\"');\n\n    csv += `\"${item.title}\",\"${descripcion}\",${adjustedPrice.toFixed(2)},${item.qty},${subtotal.toFixed(2)}\\n`;\n  });\n\n  const total = quoteItems.reduce((sum, item) =\u003e {\n    return sum + (item.price * currentFactor * item.qty);\n  }, 0);\n\n  csv += `\\n,,,,Total: ${total.toFixed(2)}`;\n\n  const blob = new Blob([csv], { type: \"text\/csv;charset=utf-8;\" });\n  const link = document.createElement(\"a\");\n  link.href = URL.createObjectURL(blob);\n  link.download = \"cotizacion.csv\";\n  link.click();\n});\n\n\/* ============================= *\/\n\/* IMPRIMIR *\/\n\/* ============================= *\/\ndocument.getElementById(\"fs-print-btn\")?.addEventListener(\"click\", function(){\n\n  if (!quoteItems || quoteItems.length === 0) {\n    alert(\"No hay productos para imprimir.\");\n    return;\n  }\n\n  const auto = pedirAuto();\n  if(auto === null) return;\n\n  let numero = generarNumeroCotizacion();\n  let fecha = new Date().toLocaleDateString();\n\n  let contenido = `\n    \u003ch2\u003eCotización - Genesis1.mx\u003c\/h2\u003e\n    \u003cstrong\u003eNo:\u003c\/strong\u003e ${numero}\u003cbr\u003e\n    \u003cstrong\u003eFecha:\u003c\/strong\u003e ${fecha}\u003cbr\u003e\n    \u003cstrong\u003eAuto:\u003c\/strong\u003e ${auto}\n    \u003chr\u003e\n  `;\n\n  quoteItems.forEach(item =\u003e {\n\n    const adjustedPrice = item.price * currentFactor;\n    const subtotal = adjustedPrice * item.qty;\n\n    contenido += `\n      \u003cdiv style=\"margin-bottom:15px;\"\u003e\n        ${item.image ? `\u003cimg src=\"${item.image}\" width=\"80\"\u003e\u003cbr\u003e` : \"\"}\n        \u003cstrong\u003e${item.title}\u003c\/strong\u003e\u003cbr\u003e\n        \u003cem\u003e${limpiarHTML(item.body)}\u003c\/em\u003e\u003cbr\u003e\n        Precio: $${adjustedPrice.toFixed(2)}\u003cbr\u003e\n        Cantidad: ${item.qty}\u003cbr\u003e\n        Subtotal: $${subtotal.toFixed(2)}\n      \u003c\/div\u003e\n      \u003chr\u003e\n    `;\n  });\n\n  const total = quoteItems.reduce((sum, item) =\u003e {\n    return sum + (item.price * currentFactor * item.qty);\n  }, 0);\n\n  contenido += `\u003ch3\u003eTotal: $${total.toFixed(2)}\u003c\/h3\u003e`;\n\n  const ventana = window.open(\"\", \"\", \"width=900,height=700\");\n  ventana.document.write(contenido);\n  ventana.document.close();\n  ventana.print();\n});\n\n\/* ============================= *\/\n\/* COPIAR LISTA *\/\n\/* ============================= *\/\ndocument.getElementById(\"fs-pdf-btn\")?.addEventListener(\"click\", async function(){\n\n  if (!quoteItems || quoteItems.length === 0) {\n    alert(\"No hay productos.\");\n    return;\n  }\n\n  let texto = \"\";\n\n  quoteItems.forEach(item =\u003e {\n    texto += item.title + \"\\t\" + item.qty + \"\\n\";\n  });\n\n  try {\n\n    await navigator.clipboard.writeText(texto);\n\n    alert(\"✅ Lista copiada al portapapeles.\\nPégala en Excel.\");\n\n  } catch(err) {\n\n    alert(\"❌ No se pudo copiar.\");\n\n  }\n\n});\n\n});\n\u003c\/script\u003e\n\n\u003c!-- ================================ --\u003e\n\u003c!-- scrip whasap    --\u003e\n\u003c!-- ================================ --\u003e\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function(){\n\ndocument.getElementById(\"fs-whatsapp-btn\")?.addEventListener(\"click\", async function(){\n\n  if (!quoteItems || quoteItems.length === 0) {\n    alert(\"No hay productos en la cotización.\");\n    return;\n  }\n\n  \/* ============================= *\/\n  \/* PEDIR NUMERO *\/\n  \/* ============================= *\/\n\n  let numero = prompt(\"Ingrese el número de WhatsApp destino.\\nEjemplo México: 4522931806\");\n  if (!numero) return;\n\n  numero = numero.replace(\/\\D\/g, \"\");\n\n  if (numero.length === 10) {\n    numero = \"52\" + numero;\n  }\n\n  if (numero.length \u003c 12) {\n    alert(\"Número inválido.\");\n    return;\n  }\n\n  \/* ============================= *\/\n  \/* PEDIR AUTO *\/\n  \/* ============================= *\/\n\n  let auto = prompt(\"Ingrese los datos del AUTO.\\nEjemplo: Lobo 2000 4x4 5.4L\");\n  if (auto === null) return;\n  auto = auto.trim();\n\n  \/* ============================= *\/\n  \/* GENERAR PDF *\/\n  \/* ============================= *\/\n\n  const { jsPDF } = window.jspdf;\n  const doc = new jsPDF();\n\n  let y = 20;\n  let numeroCotizacion = \"COT-\" + Date.now();\n  let fecha = new Date().toLocaleDateString();\n\n  doc.setFontSize(16);\n  doc.text(\"Cotización - Genesis1.mx\", 14, y);\n  y += 8;\n\n  doc.setFontSize(10);\n  doc.text(`No: ${numeroCotizacion}`, 14, y);\n  y += 6;\n  doc.text(`Fecha: ${fecha}`, 14, y);\n  y += 6;\n  doc.text(`Auto: ${auto}`, 14, y);\n  y += 10;\n\n  doc.setFontSize(11);\n\n  for (const item of quoteItems) {\n\n    const adjustedPrice = item.price * currentFactor;\n    const subtotal = adjustedPrice * item.qty;\n    const descripcionLimpia = (item.body || \"\").replace(\/\u003c[^\u003e]*\u003e\/g, '');\n\n    if (y \u003e 250) {\n      doc.addPage();\n      y = 20;\n    }\n\n    if (item.image) {\n      try {\n        const imgData = await getBase64FromUrl(item.image);\n        doc.addImage(imgData, \"JPEG\", 14, y, 25, 25);\n      } catch (e) {}\n    }\n\n    doc.text(`Producto: ${item.title}`, 45, y + 6);\n\n    const descripcion = doc.splitTextToSize(descripcionLimpia, 140);\n    doc.text(descripcion, 45, y + 12);\n\n    doc.text(`Precio: $${adjustedPrice.toFixed(2)}`, 45, y + 22);\n    doc.text(`Cantidad: ${item.qty}`, 45, y + 28);\n    doc.text(`Subtotal: $${subtotal.toFixed(2)}`, 45, y + 34);\n\n    y += 45;\n  }\n\n  const total = quoteItems.reduce((sum, item) =\u003e {\n    return sum + (item.price * currentFactor * item.qty);\n  }, 0);\n\n  y += 5;\n  doc.setFontSize(14);\n  doc.text(`TOTAL: $${total.toFixed(2)}`, 14, y);\n\n  \/* ============================= *\/\n  \/* FORZAR DESCARGA EN CEL Y PC *\/\n  \/* ============================= *\/\n\n  const pdfBlob = doc.output(\"blob\");\n  const pdfUrl = URL.createObjectURL(pdfBlob);\n\n  const link = document.createElement(\"a\");\n  link.href = pdfUrl;\n  link.download = `cotizacion-${numeroCotizacion}.pdf`;\n  document.body.appendChild(link);\n  link.click();\n  document.body.removeChild(link);\n\n  \/\/ Esperar 800ms para asegurar descarga antes de abrir WhatsApp\n  setTimeout(() =\u003e {\n\n    \/* ============================= *\/\n    \/* ABRIR WHATSAPP *\/\n    \/* ============================= *\/\n\n    let mensaje = `🧾 Cotización ${numeroCotizacion}\\n`;\n    mensaje += `Auto: ${auto}\\n`;\n    mensaje += `Adjunto la cotización en PDF.\\n`;\n    mensaje += `🌐 https:\/\/genesis1.mx`;\n\n    const url = `https:\/\/wa.me\/${numero}?text=${encodeURIComponent(mensaje)}`;\n    window.open(url, \"_blank\");\n\n  }, 800);\n\n});\n\n\n\/* ============================= *\/\n\/* BASE64 *\/\n\/* ============================= *\/\n\nasync function getBase64FromUrl(url) {\n  const response = await fetch(url);\n  const blob = await response.blob();\n\n  return new Promise((resolve, reject) =\u003e {\n    const reader = new FileReader();\n    reader.onloadend = () =\u003e resolve(reader.result);\n    reader.onerror = reject;\n    reader.readAsDataURL(blob);\n  });\n}\n\n});\n\u003c\/script\u003e\n\n\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function(){\n\n  const boton = document.getElementById(\"fs-copy-img-btn\");\n\n  if (!boton) return;\n\n  boton.addEventListener(\"click\", async function(){\n\n    const elemento = document.querySelector(\".fs-quote-wrapper\");\n\n    if (!elemento) {\n      alert(\"No se encontró el cotizador.\");\n      return;\n    }\n\n    try {\n\n      const canvas = await html2canvas(elemento, {\n        backgroundColor: \"#ffffff\",\n        scale: 2,\n        useCORS: true\n      });\n\n      canvas.toBlob(async function(blob){\n\n        if (!blob) {\n          alert(\"No se pudo generar la imagen.\");\n          return;\n        }\n\n        try {\n\n          const item = new ClipboardItem({\n            \"image\/png\": blob\n          });\n\n          await navigator.clipboard.write([item]);\n\n          alert(\"✅ Cotización copiada como imagen.\\nAhora puedes pegarla en WhatsApp.\");\n\n        } catch (err) {\n          alert(\"❌ Tu navegador bloqueó el acceso al portapapeles.\");\n        }\n\n      }, \"image\/png\");\n\n    } catch (error) {\n      console.error(error);\n      alert(\"❌ Error al generar la imagen.\");\n    }\n\n  });\n\n});\n\u003c\/script\u003e\n\n\u003c!-- ================================ --\u003e\n\u003c!-- scrip guarda cotizacion muestra cotiza y modal    --\u003e\n\u003c!-- ================================ --\u003e\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function(){\n\n  \/* ============================= *\/\n  \/* FUNCIONES AUXILIARES *\/\n  \/* ============================= *\/\n\n  function generarNumeroCotizacion(){\n    const fecha = new Date();\n    return \"COT-\" +\n      fecha.getFullYear() +\n      (fecha.getMonth()+1).toString().padStart(2,\"0\") +\n      fecha.getDate().toString().padStart(2,\"0\") +\n      \"-\" +\n      Math.floor(Math.random()*1000);\n  }\n\n  function getTodayDate(){\n    return new Date().toLocaleString();\n  }\n\n  function getQuoteTotal(){\n    if(!quoteItems) return 0;\n\n    return quoteItems.reduce((sum, item)=\u003e{\n      const adjustedPrice = item.price * currentFactor;\n      return sum + (adjustedPrice * item.qty);\n    }, 0);\n  }\n\n  function getHistory(){\n    return JSON.parse(localStorage.getItem(\"quoteHistory\")) || [];\n  }\n\n  function saveHistory(history){\n    localStorage.setItem(\"quoteHistory\", JSON.stringify(history));\n  }\n\n  const saveBtn = document.getElementById(\"save-quote-btn\");\n  const viewBtn = document.getElementById(\"view-history-btn\");\n\n  \/* ============================= *\/\n  \/* GUARDAR COTIZACION *\/\n  \/* ============================= *\/\n\n  if(saveBtn){\n    saveBtn.addEventListener(\"click\", function(){\n\n      if(!quoteItems || quoteItems.length === 0){\n        alert(\"No hay productos en la cotización.\");\n        return;\n      }\n\n      const history = getHistory();\n\n      let nombreAuto = prompt(\"Escribe el nombre del auto (Ej: JETTA 2.0 2010):\");\n\n      if(nombreAuto === null) return;\n\n      nombreAuto = nombreAuto.trim();\n\n      if(nombreAuto === \"\"){\n        nombreAuto = generarNumeroCotizacion();\n      }\n\n      const newQuote = {\n        id: Date.now(),\n        numero: nombreAuto.toUpperCase(),\n        fecha: getTodayDate(),\n        factor: currentFactor || 1,\n        items: JSON.parse(JSON.stringify(quoteItems)),\n        total: getQuoteTotal()\n      };\n\n      history.push(newQuote);\n      saveHistory(history);\n\n      alert(\"✅ Cotización guardada como: \" + newQuote.numero);\n    });\n  }\n\n  \/* ============================= *\/\n  \/* ===== MODAL HISTORIAL ===== *\/\n  \/* ============================= *\/\n\n  const modal = document.getElementById(\"quote-history-modal\");\n  const searchInput = document.getElementById(\"qh-search\");\n  const listContainer = document.getElementById(\"qh-list\");\n  const closeBtn = document.getElementById(\"qh-close\");\n  const clearAllBtn = document.getElementById(\"qh-clear-all\");\n\n  if(viewBtn){\n    viewBtn.addEventListener(\"click\", function(){\n      renderHistory();\n      modal.style.display = \"flex\";\n      if(searchInput) searchInput.value = \"\";\n    });\n  }\n\n  if(closeBtn){\n    closeBtn.addEventListener(\"click\", function(){\n      modal.style.display = \"none\";\n    });\n  }\n\n  if(clearAllBtn){\n    clearAllBtn.addEventListener(\"click\", function(){\n      if(confirm(\"¿Seguro que quieres borrar todo el historial?\")){\n        localStorage.removeItem(\"quoteHistory\");\n        renderHistory();\n      }\n    });\n  }\n\n  \/* ============================= *\/\n  \/* BUSCADOR EN TIEMPO REAL *\/\n  \/* ============================= *\/\n\n  if(searchInput){\n    searchInput.addEventListener(\"input\", function(){\n      renderHistory(this.value);\n    });\n  }\n\n  \/* ============================= *\/\n  \/* RENDER HISTORIAL CON FILTRO *\/\n  \/* ============================= *\/\n\n  function renderHistory(filter = \"\"){\n\n    const history = getHistory();\n    listContainer.innerHTML = \"\";\n\n    const filtered = history.filter(q =\u003e {\n      const nombre = (q.numero || \"\").toLowerCase();\n      return nombre.includes(filter.toLowerCase());\n    });\n\n    if(filtered.length === 0){\n      listContainer.innerHTML = \"\u003cp\u003eNo se encontraron resultados.\u003c\/p\u003e\";\n      return;\n    }\n\n    filtered.forEach((q)=\u003e{\n\n      const realIndex = history.indexOf(q);\n\n      const div = document.createElement(\"div\");\n      div.className = \"qh-item\";\n\n      div.innerHTML = `\n        \u003cstrong\u003e#${realIndex + 1} - ${q.numero || \"Sin nombre\"}\u003c\/strong\u003e\n        \u003csmall\u003e${q.fecha}\u003c\/small\u003e\n        \u003cdiv style=\"margin-top:5px;font-size:12px;\"\u003e\n          Total: $${Number(q.total).toFixed(2)}\n        \u003c\/div\u003e\n        \u003cbutton \n          style=\"float:right;background:#ff4444;color:white;border:none;border-radius:4px;padding:3px 6px;cursor:pointer;\"\u003e\n          Eliminar\n        \u003c\/button\u003e\n      `;\n\n      \/\/ Cargar cotización\n      div.addEventListener(\"click\", function(e){\n        if(e.target.tagName !== \"BUTTON\"){\n          loadQuote(realIndex);\n          modal.style.display = \"none\";\n        }\n      });\n\n      \/\/ Eliminar individual\n      div.querySelector(\"button\").addEventListener(\"click\", function(e){\n        e.stopPropagation();\n        deleteQuote(realIndex);\n      });\n\n      listContainer.appendChild(div);\n    });\n  }\n\n  \/* ============================= *\/\n  \/* CARGAR COTIZACION *\/\n  \/* ============================= *\/\n\n  function loadQuote(index){\n\n    const history = getHistory();\n    const cotizacion = history[index];\n\n    if(!cotizacion) return;\n\n    quoteItems.splice(0, quoteItems.length);\n\n    cotizacion.items.forEach(item=\u003e{\n      quoteItems.push(item);\n    });\n\n    currentFactor = cotizacion.factor || 1;\n\n    if(typeof renderQuote === \"function\"){\n      renderQuote();\n    }\n\n    alert(\"✅ Cotización cargada: \" + (cotizacion.numero || \"COT-\" + cotizacion.id));\n  }\n\n  \/* ============================= *\/\n  \/* ELIMINAR INDIVIDUAL *\/\n  \/* ============================= *\/\n\n  function deleteQuote(index){\n    const history = getHistory();\n    history.splice(index, 1);\n    saveHistory(history);\n    renderHistory(searchInput ? searchInput.value : \"\");\n  }\n\n});\n\u003c\/script\u003e\n\n\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\n  const url = window.location.href;\n\n  const botonCotizador = document.querySelector(\".boton-cotizador-container\");\n  const searchContainer = document.getElementById(\"search-container\");\n  const dropdownContainer = document.getElementById(\"dropdown-container\");\n\n  \/\/ 🔹 Este detecta el DIV verde que envuelve el select\n  const dropdownWrapper = document.querySelector('#dropdown-container')?.closest('div[style*=\"background-color\"]');\n\n  if (url.includes(\"\/pages\/cotizador2026\")) {\n\n    \/\/ 🔴 OCULTAR en la página del cotizador\n    if (botonCotizador) botonCotizador.style.display = \"none\";\n    if (searchContainer) searchContainer.style.display = \"none\";\n    if (dropdownContainer) dropdownContainer.style.display = \"none\";\n    if (dropdownWrapper) dropdownWrapper.style.display = \"none\";\n\n  } else {\n\n    \/\/ 🟢 MOSTRAR en otras páginas\n    if (botonCotizador) botonCotizador.style.display = \"block\";\n    if (searchContainer) searchContainer.style.display = \"block\";\n    if (dropdownContainer) dropdownContainer.style.display = \"block\";\n    if (dropdownWrapper) dropdownWrapper.style.display = \"block\";\n\n  }\n\n});\n\u003c\/script\u003e\n\u003c\/div\u003e","products":[],"url":"https:\/\/genesis1.mx\/en\/collections\/compras2026.oembed","provider":"Genesis","version":"1.0","type":"link"}