{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/7u71ufcZVXVULpspUIni/iCnxm6M09FtK2iFPVkAX/siteMetadata.js"],
  "sourcesContent": ["// Generated by Framer (046e64a)\nconst valuesByLocaleId={hWBf2iiRO:{v0:\"Central Restaurant\",v1:\"We interpret the complexity of the Peruvian territory through immersions and tastings that celebrate the country's diversity and altitudinal irregularity. Together with Mater, we collaborate with an interdisciplinary network.\"}};function getLocalizedValue(key,locale){while(locale){const values=valuesByLocaleId[locale.id];if(values){const value=values[key];if(value)return value;}locale=locale.fallback;}}export default function metadata(params,activeLocale){return{customHTMLBodyEnd:\"\\n\",customHTMLHeadStart:'<script>\\n/* ==== CONFIG ==== */\\nconst GA_MEAS_ID = \"G-KPBMJBRWTG\"; // tu ID\\nconst MESA_UTM = \"utm_source=centralweb&utm_medium=referral&utm_campaign=reserve_cta\";\\nconst DEBUG = /[?&]debug=1\\\\b/i.test(location.search);\\n\\n/* ==== Cargar gtag.js si falta ==== */\\n(function ensureGA(){\\n  if (!window.gtag) {\\n    window.dataLayer = window.dataLayer || [];\\n    window.gtag = function(){ dataLayer.push(arguments); };\\n    const s = document.createElement(\"script\");\\n    s.async = true;\\n    s.src = `https://www.googletagmanager.com/gtag/js?id=${GA_MEAS_ID}`;\\n    document.head.appendChild(s);\\n  }\\n  gtag(\\'js\\', new Date());\\n  gtag(\\'config\\', GA_MEAS_ID, { send_page_view: true });\\n})();\\n\\n/* ==== Helpers ==== */\\nconst lang = (document.documentElement.lang || \"es\").toLowerCase();\\nfunction getPageCategory() {\\n  const path = location.pathname.replace(/\\\\/+$/,\\'\\') || \"/\";\\n  const hash = location.hash || \"\";\\n  if (path === \"/\") return hash.includes(\"#body\") ? \"historia\" : \"home\";\\n  if (path === \"/menu\") return \"experiencias_menu\";\\n  if (path === \"/centralim\") return \"experiencia_central_immersion\";\\n  if (path === \"/theo\") return \"experiencia_theobromas\";\\n  if (path === \"/reservations\") return \"reservas\";\\n  return \"otros\";\\n}\\nfunction sendEvent(name, params = {}) {\\n  const base = {\\n    language: lang,\\n    page_category: getPageCategory(),\\n    page_path: location.pathname + location.search + location.hash,\\n    page_title: document.title\\n  };\\n  if (DEBUG) base.debug_mode = true;\\n  const payload = { ...base, ...params };\\n  console.log(\"[GA4]\", name, payload); // \uD83D\uDC40 ver\\xe1s esto en consola\\n  gtag(\"event\", name, payload);\\n}\\n\\n/* ==== Click Reserva (Mesa247) ==== */\\nfunction setupReservaClicks() {\\n  document.querySelectorAll(\"a[href]\").forEach(a => {\\n    a.addEventListener(\"click\", (ev) => {\\n      const href = a.getAttribute(\"href\") || \"\";\\n      const toMesa = /mesa247/i.test(href) || /mesa247/i.test(a.hostname || \"\");\\n      if (!toMesa) return;\\n\\n      try {\\n        const url = new URL(a.href, location.origin);\\n        if (!url.searchParams.has(\"utm_source\")) {\\n          url.search ? (url.search += \"&\" + MESA_UTM) : (url.search = \"?\" + MESA_UTM);\\n          a.href = url.toString();\\n        }\\n      } catch(e){}\\n\\n      sendEvent(\"click_reserva\", {\\n        event_category: \"CTA\",\\n        event_label: a.textContent?.trim() || \"Reservar\",\\n        outbound_url: a.href\\n      });\\n\\n      // Marca tambi\\xe9n salida externa\\n      if (a.hostname && a.hostname !== location.hostname) {\\n        sendEvent(\"outbound_click\", { outbound_url: a.href });\\n      }\\n    }, { capture: true });\\n  });\\n}\\n\\n/* ==== Click Experiencias ==== */\\nfunction setupExperienciasClicks() {\\n  document.querySelectorAll(\"a[href]\").forEach(a => {\\n    const href = (a.getAttribute(\"href\") || \"\").replace(location.origin, \"\");\\n    const normalized = href.split(\"?\")[0].replace(/\\\\/+$/,\\'\\');\\n    let experience_type = null;\\n    if (normalized === \"/menu\") experience_type = \"tasting_menu\";\\n    if (normalized === \"/centralim\") experience_type = \"central_immersion\";\\n    if (normalized === \"/theo\") experience_type = \"theobromas_lab\";\\n    if (!experience_type) return;\\n\\n    a.addEventListener(\"click\", () => {\\n      sendEvent(\"click_experiencia\", {\\n        event_category: \"CTA\",\\n        event_label: experience_type,\\n        experience_type\\n      });\\n    }, { capture: true });\\n  });\\n}\\n\\n/* ==== Outbound General ==== */\\nfunction setupOutboundGeneral() {\\n  document.querySelectorAll(\"a[href]\").forEach(a => {\\n    const href = a.getAttribute(\"href\") || \"\";\\n    const isProtocol = /^(mailto:|tel:|whatsapp:)/i.test(href);\\n    const isExternal = a.hostname && a.hostname !== location.hostname;\\n    const isMesa247 = /mesa247/i.test(href) || /mesa247/i.test(a.hostname || \"\");\\n    if (!isProtocol && isExternal && !isMesa247) {\\n      a.addEventListener(\"click\", () => {\\n        sendEvent(\"outbound_click\", { outbound_url: a.href });\\n      }, { capture: true });\\n    }\\n  });\\n}\\n\\n/* ==== Scroll Depth ==== */\\nfunction setupScrollDepth() {\\n  const marks = [25,50,75,90];\\n  const fired = new Set();\\n  function handler() {\\n    const st = window.scrollY || document.documentElement.scrollTop;\\n    const docH = Math.max(\\n      document.body.scrollHeight, document.documentElement.scrollHeight,\\n      document.body.offsetHeight, document.documentElement.offsetHeight,\\n      document.body.clientHeight, document.documentElement.clientHeight\\n    );\\n    const winH = window.innerHeight || document.documentElement.clientHeight;\\n    const ratio = Math.min(100, Math.round(((st + winH) / docH) * 100));\\n    marks.forEach(m => {\\n      if (ratio >= m && !fired.has(m)) {\\n        fired.add(m);\\n        sendEvent(\"scroll_depth\", { percent_scrolled: m });\\n      }\\n    });\\n    if (fired.size === marks.length) window.removeEventListener(\"scroll\", handler);\\n  }\\n  window.addEventListener(\"scroll\", handler, { passive: true });\\n  handler();\\n}\\n\\n/* ==== Engaged Time ==== */\\nfunction setupEngagedTime() {\\n  setTimeout(() => sendEvent(\"engaged_time_30s\", { seconds: 30 }), 30000);\\n  setTimeout(() => sendEvent(\"engaged_time_60s\", { seconds: 60 }), 60000);\\n}\\n\\n/* ==== SPA routing (Framer) ==== */\\n(function patchHistory(){\\n  const push = history.pushState, replace = history.replaceState;\\n  function firePV(){ gtag(\\'config\\', GA_MEAS_ID, {\\'page_path\\': location.pathname + location.search + location.hash}); }\\n  function rerun(){ setTimeout(() => { firePV(); onRouteChange(); }, 0); }\\n  history.pushState = function(){ push.apply(this, arguments); rerun(); };\\n  history.replaceState = function(){ replace.apply(this, arguments); rerun(); };\\n  window.addEventListener(\"popstate\", rerun);\\n})();\\nfunction onRouteChange() {\\n  setupReservaClicks();\\n  setupExperienciasClicks();\\n  setupOutboundGeneral();\\n  setupScrollDepth();\\n  setupEngagedTime();\\n}\\ndocument.addEventListener(\"DOMContentLoaded\", onRouteChange);\\n</script>\\n<script>\\n// ---- CAPTURA TOTAL DE CLICS (compatible con Shadow DOM / SVG) ----\\n(function setupShadowSafeClicks(){\\n  function findAnchorInPath(ev){\\n    const path = (ev.composedPath && ev.composedPath()) || [];\\n    for (const el of path){\\n      if (el && el.tagName === \\'A\\' && el.href) return el;\\n      // algunos componentes de Framer guardan el href en dataset\\n      if (el && el.tagName && el.tagName !== \\'A\\' && el.dataset && el.dataset.href){\\n        try {\\n          const a = document.createElement(\\'a\\');\\n          a.href = el.dataset.href;\\n          return a;\\n        } catch(_) {}\\n      }\\n    }\\n    // fallback por si el target s\\xed est\\xe1 en el DOM \u201Ccl\\xe1sico\u201D\\n    const a = ev.target && ev.target.closest && ev.target.closest(\\'a[href]\\');\\n    return a || null;\\n  }\\n\\n  function handleClick(ev){\\n    const a = findAnchorInPath(ev);\\n    if (!a) return;\\n\\n    const rawHref = a.getAttribute(\\'href\\') || a.href || \\'\\';\\n    const host    = a.hostname || \\'\\';\\n    const isExternal = host && host !== location.hostname;\\n    const isProtocol = /^(mailto:|tel:|whatsapp:)/i.test(rawHref);\\n    const isMesa247  = /mesa247/i.test(rawHref) || /mesa247/i.test(host);\\n\\n    // --- Mesa247 (macro) ---\\n    if (isMesa247){\\n      try {\\n        const url = new URL(a.href || rawHref, location.origin);\\n        if (!url.searchParams.has(\\'utm_source\\')){\\n          const extra = \\'utm_source=centralweb&utm_medium=referral&utm_campaign=reserve_cta\\';\\n          url.search ? (url.search += \\'&\\' + extra) : (url.search = \\'?\\' + extra);\\n          // reescribir el destino ANTES de navegar\\n          if (a.tagName === \\'A\\') a.href = url.toString();\\n        }\\n      } catch(_) {}\\n\\n      sendEvent(\\'click_reserva\\', {\\n        event_category: \\'CTA\\',\\n        event_label: (a.textContent || \\'\\').trim() || \\'Reservar\\',\\n        outbound_url: a.href || rawHref\\n      });\\n\\n      // redundante \\xfatil para an\\xe1lisis de salidas\\n      sendEvent(\\'outbound_click\\', { outbound_url: a.href || rawHref });\\n      return;\\n    }\\n\\n    // --- Experiencias (macro) ---\\n    const normalized = rawHref.replace(location.origin,\\'\\').split(\\'?\\')[0].replace(/\\\\/+$/,\\'\\');\\n    let experience_type = null;\\n    if (normalized === \\'/menu\\') experience_type = \\'tasting_menu\\';\\n    if (normalized === \\'/centralim\\') experience_type = \\'central_immersion\\';\\n    if (normalized === \\'/theo\\') experience_type = \\'theobromas_lab\\';\\n    if (experience_type){\\n      sendEvent(\\'click_experiencia\\', {\\n        event_category: \\'CTA\\',\\n        event_label: experience_type,\\n        experience_type\\n      });\\n      return;\\n    }\\n\\n    // --- Outbound general ---\\n    if (!isProtocol && isExternal){\\n      sendEvent(\\'outbound_click\\', { outbound_url: a.href || rawHref });\\n    }\\n  }\\n\\n  // Usamos m\\xfaltiples tipos de interacci\\xf3n por si Framer navega en pointerdown\\n  [\\'click\\',\\'pointerdown\\',\\'mousedown\\',\\'keydown\\'].forEach(t => {\\n    document.addEventListener(t, handleClick, { capture: true, passive: true });\\n  });\\n})();\\n</script>\\n',description:getLocalizedValue(\"v1\",activeLocale)??\"Interpretamos la complejidad del territorio peruano a trav\\xe9s de inmersiones y degustaciones que celebran la diversidad e irregularidad altitudinal del pa\\xeds. Junto a Mater, colaboramos con una red interdisciplinaria.\",favicon:\"https://framerusercontent.com/assets/9ADgKotzyL2R3y4cyYn0sWhjxCY.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/WoZWHaGN7aNgeS7gc3IiJRZmMm0.png\",title:getLocalizedValue(\"v0\",activeLocale)??\"Central Restaurante\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "AACA,IAAMA,EAAiB,CAAC,UAAU,CAAC,GAAG,qBAAqB,GAAG,mOAAmO,CAAC,EAAE,SAASC,EAAkBC,EAAIC,EAAO,CAAC,KAAMA,GAAO,CAAC,IAAMC,EAAOJ,EAAiBG,EAAO,EAAE,EAAE,GAAGC,EAAO,CAAC,IAAMC,EAAMD,EAAOF,CAAG,EAAE,GAAGG,EAAM,OAAOA,CAAM,CAACF,EAAOA,EAAO,QAAS,CAAC,CAAgB,SAARG,EAA0BC,EAAOC,EAAa,CAAC,MAAM,CAAC,kBAAkB;AAAA,EAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAA65R,YAAYP,EAAkB,KAAKO,CAAY,GAAG,gOAAgO,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAMP,EAAkB,KAAKO,CAAY,GAAG,qBAAqB,CAAE",
  "names": ["valuesByLocaleId", "getLocalizedValue", "key", "locale", "values", "value", "metadata", "params", "activeLocale"]
}
