{"title":"Evento Prueba","description":"\u003cp\u003e\u003cstrong\u003e[NUEVA ACTUALIZACIÓN]\u003c\/strong\u003e\u003c\/p\u003e\n\u003c!-- RF_RN_BLOCK_START --\u003e\n\n\u003cp\u003e\n  \u003cstrong\u003e💡 Tip:\u003c\/strong\u003e usa el \u003cstrong\u003eReconocimiento Facial\u003c\/strong\u003e y también la búsqueda por\n  \u003cstrong\u003enúmero de participante\u003c\/strong\u003e. No todas las fotos muestran el número claramente, por eso recomendamos probar ambos sistemas.\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  .rd-search-box {\n    background: #f7f7f7;\n    border: 1px solid #ddd;\n    border-radius: 18px;\n    padding: 24px;\n    margin: 25px 0;\n  }\n\n  .rd-search-title {\n    font-size: 24px;\n    font-weight: 700;\n    margin-bottom: 18px;\n  }\n\n  .rd-search-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 18px;\n  }\n\n  .rd-search-card {\n    background: #fff;\n    border: 1px solid #e1e1e1;\n    border-radius: 16px;\n    padding: 20px;\n  }\n\n  .rd-card-title {\n    font-size: 18px;\n    font-weight: 700;\n    margin-bottom: 8px;\n  }\n\n  .rd-card-text {\n    font-size: 14px;\n    margin-bottom: 16px;\n    color: #555;\n  }\n\n  .rd-button {\n    background: #000;\n    color: #fff;\n    border: 2px solid #000;\n    padding: 12px 18px;\n    font-size: 16px;\n    font-weight: bold;\n    border-radius: 12px;\n    cursor: pointer;\n    width: 100%;\n  }\n\n  .rd-button:hover {\n    background: #fff;\n    color: #000;\n  }\n\n  .rd-number-row {\n    display: flex;\n    gap: 10px;\n  }\n\n  .rd-number-input {\n    flex: 1;\n    padding: 12px;\n    font-size: 16px;\n    border: 1px solid #bbb;\n    border-radius: 12px;\n  }\n\n  .rd-results {\n    margin-top: 18px;\n    font-size: 14px;\n  }\n\n  @media (max-width: 700px) {\n    .rd-search-grid {\n      grid-template-columns: 1fr;\n    }\n\n    .rd-number-row {\n      flex-direction: column;\n    }\n  }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n  const NOMBRE_EVENTO = \"53EventoPrueba\";\n  const RN_SEARCH_API_ENDPOINT = \"https:\/\/iouspsi4o0.execute-api.us-east-1.amazonaws.com\/search\";\n\u003c\/script\u003e\n\n\u003cdiv class=\"rd-search-box\"\u003e\n  \u003cdiv class=\"rd-search-title\"\u003eBusca tus fotos\u003c\/div\u003e\n\n  \u003cdiv class=\"rd-search-grid\"\u003e\n\n    \u003cdiv class=\"rd-search-card\"\u003e\n      \u003cdiv class=\"rd-card-title\"\u003e😄 Reconocimiento Facial\u003c\/div\u003e\n      \u003cdiv class=\"rd-card-text\"\u003e\n        Sube una selfie y encontraremos tus fotos por rostro.\n      \u003c\/div\u003e\n\n      \u003cinput type=\"file\" id=\"fileInput\" accept=\"image\/*\" style=\"display:none;\"\u003e\n\n      \u003cbutton class=\"rd-button\" id=\"uploadButton\"\u003e\n        Subir selfie\n      \u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"rd-search-card\"\u003e\n      \u003cdiv class=\"rd-card-title\"\u003e🔢 Buscar por número\u003c\/div\u003e\n      \u003cdiv class=\"rd-card-text\"\u003e\n        Escribe tu número de participante. Funciona mejor cuando el dorsal se ve claro.\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"rd-number-row\"\u003e\n        \u003cinput type=\"text\" id=\"bibNumberInput\" class=\"rd-number-input\" placeholder=\"Ej: 423\" inputmode=\"numeric\"\u003e\n\n        \u003cbutton class=\"rd-button\" id=\"numberSearchButton\"\u003e\n          Buscar\n        \u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n  \u003cdiv id=\"rnResults\" class=\"rd-results\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  const fileInput = document.getElementById('fileInput');\n  const uploadButton = document.getElementById('uploadButton');\n  const bibNumberInput = document.getElementById('bibNumberInput');\n  const numberSearchButton = document.getElementById('numberSearchButton');\n  const rnResults = document.getElementById('rnResults');\n\n  uploadButton.addEventListener('click', () =\u003e {\n    fileInput.click();\n  });\n\n  fileInput.addEventListener('change', async () =\u003e {\n    const file = fileInput.files[0];\n    if (!file) return;\n\n    try {\n      const filename = `${Date.now()}_${file.name}`;\n      const carpeta = `selfies\/rf-evento-${NOMBRE_EVENTO}\/${filename}`;\n\n      const res = await fetch(\n        `https:\/\/0o8ptvnz12.execute-api.us-east-1.amazonaws.com\/prod\/presigned-url?filename=${encodeURIComponent(carpeta)}`\n      );\n\n      const data = await res.json();\n\n      if (!data.url) throw new Error(\"No se pudo obtener la URL prefirmada\");\n\n      await fetch(data.url, {\n        method: 'PUT',\n        headers: { 'Content-Type': file.type },\n        body: file\n      });\n\n      alert(\"✅ Selfie procesada. Vamos a buscar tus fotos.\");\n      const nombreSelfie = filename.split('\/').pop();\n      window.location.href = `\/pages\/resultados?selfieId=${encodeURIComponent(nombreSelfie)}`;\n\n    } catch (error) {\n      console.error(error);\n      alert(\"❌ Hubo un error al subir tu selfie. Intenta nuevamente.\");\n    }\n  });\n\n  numberSearchButton.addEventListener('click', async () =\u003e {\n    const bibNumber = bibNumberInput.value.trim();\n\n    if (!bibNumber) {\n      alert(\"Escribe tu número de participante.\");\n      return;\n    }\n\n    if (!\/^[0-9]{1,5}$\/.test(bibNumber)) {\n      alert(\"El número debe tener solo dígitos, máximo 5 números.\");\n      return;\n    }\n\n    const eventId = `rn-evento-${NOMBRE_EVENTO}`;\n\n    rnResults.innerHTML = \"Buscando fotos para el número \" + bibNumber + \"...\";\n\n    try {\n      const url = `${RN_SEARCH_API_ENDPOINT}?eventId=${encodeURIComponent(eventId)}\u0026bibNumber=${encodeURIComponent(bibNumber)}`;\n\n      const res = await fetch(url);\n      const data = await res.json();\n\n      if (!data.ok) {\n        throw new Error(data.message || \"Error buscando resultados\");\n      }\n\n      sessionStorage.setItem(\"rnResults\", JSON.stringify(data));\n\n      window.location.href =\n        `\/pages\/resultados-rn?eventId=${encodeURIComponent(eventId)}\u0026bibNumber=${encodeURIComponent(bibNumber)}`;\n\n    } catch (error) {\n      console.error(error);\n      rnResults.innerHTML = `\n        \u003cp\u003e\u003cstrong\u003e❌ Hubo un error buscando tu número.\u003c\/strong\u003e\u003c\/p\u003e\n        \u003cp\u003eIntenta nuevamente o usa el Reconocimiento Facial.\u003c\/p\u003e\n      `;\n    }\n  });\n\u003c\/script\u003e\n\n\u003c!-- RF_RN_BLOCK_END --\u003e","products":[{"product_id":"eventoprueba-rauldom-0147","title":"EventoPrueba-rauldom-0147.jpg","description":"Derecho de contenido para uso personal. Contactar para derechos de usos publicitarios al Wht: +507 6028-2182","brand":"rauldom","offers":[{"title":"Default Title","offer_id":47698548228332,"sku":"53EventoPrueba-rauldom-0147","price":10.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0715\/5692\/3628\/files\/EventoPrueba-rauldom-0147.jpg?v=1780435895"},{"product_id":"eventoprueba-rauldom-8503","title":"EventoPrueba-rauldom-8503.jpg","description":"Derecho de contenido para uso personal. Contactar para derechos de usos publicitarios al Wht: +507 6028-2182","brand":"rauldom","offers":[{"title":"Default Title","offer_id":47698548490476,"sku":"53EventoPrueba-rauldom-8503","price":10.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0715\/5692\/3628\/files\/EventoPrueba-rauldom-8503.jpg?v=1780435898"},{"product_id":"eventoprueba-rauldom-8594","title":"EventoPrueba-rauldom-8594.jpg","description":"Derecho de contenido para uso personal. Contactar para derechos de usos publicitarios al Wht: +507 6028-2182","brand":"rauldom","offers":[{"title":"Default Title","offer_id":47698548523244,"sku":"53EventoPrueba-rauldom-8594","price":10.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0715\/5692\/3628\/files\/EventoPrueba-rauldom-8594.jpg?v=1780435903"},{"product_id":"eventoprueba-rauldom-8619","title":"EventoPrueba-rauldom-8619.jpg","description":"Derecho de contenido para uso personal. Contactar para derechos de usos publicitarios al Wht: +507 6028-2182","brand":"rauldom","offers":[{"title":"Default Title","offer_id":47698548916460,"sku":"53EventoPrueba-rauldom-8619","price":10.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0715\/5692\/3628\/files\/EventoPrueba-rauldom-8619.jpg?v=1780435912"}],"url":"https:\/\/rauldom.com\/collections\/evento-prueba.oembed","provider":"RaulDom Sport Images","version":"1.0","type":"link"}