{"slug":"oohsummit","storeName":"OOH Summit","template":"custom","customHtml":"<meta charset=\"utf-8\">\n<meta name=\"theme-color\" content=\"#1a0c0d\">\n<!-- ============================================================================\n     OOH SUMMIT · CIUDAD DE MÉXICO 2026 — Storefront custom (MOBU) — v3\n     v3: medición de embudo (GTM + GA4 + Meta Pixel: ViewContent/Lead/\n     InitiateCheckout/Purchase con value+currency y dedupe), SEO on-page\n     (title/description/OG/Twitter/JSON-LD Event) inyectado por JS, página\n     /gracias in-page (QR + Google Calendar + Purchase) sobre el mismo dominio,\n     assets reales (hero, galería, videos, plano) y checkout con cantidad+cupón.\n     Self-contained: pegar tal cual en WEB → Diseño → plantilla \"Custom HTML\".\n     ============================================================================ -->\n\n<!-- ============ MEDICIÓN + SEO (corre lo antes posible) ============ -->\n<script>\n(function(){\n  // Los IDs de seguimiento se leen del PANEL de Marketing de MOBU (config del storefront) e inyectan\n  // acá. El panel es la única fuente: cambiás GTM/GA4/Pixel ahí y cambia el sitio, sin re-deployar.\n  var EV = {\n    name:\"OOH Summit 2026 — Ciudad de México\",\n    start:\"2026-10-14T09:00:00-06:00\", end:\"2026-10-15T18:00:00-06:00\",\n    url:\"https://www.oohsummit.com/\",\n    venue:\"Polyforum Cultural Siqueiros\",\n    addr:\"Av. Insurgentes Sur 701, Nápoles, Ciudad de México, México\",\n    img:\"https://oohsummit.com/media/oohsummit/ooh2024-d2h-19.jpg\",\n    desc:\"El evento OOH / DOOH más importante de Latinoamérica: dos días de charlas, DemoLabs y networking B2B para la industria de la publicidad exterior. 14 y 15 de octubre de 2026, Polyforum Cultural Siqueiros, Ciudad de México.\",\n    ccy:\"USD\"\n  };\n  window.OOH_EV = EV;\n\n  /* ---- SEO on-page (title/meta/OG/Twitter/canonical + JSON-LD Event) ---- */\n  try{\n    var title = \"OOH Summit 2026 · CDMX — El evento OOH/DOOH más importante de LatAm\";\n    document.title = title;\n    function meta(attr, key, val){\n      var s='meta['+attr+'=\"'+key+'\"]', el=document.head.querySelector(s);\n      if(!el){ el=document.createElement('meta'); el.setAttribute(attr,key); document.head.appendChild(el); }\n      el.setAttribute('content', val);\n    }\n    meta('name','description', EV.desc);\n    meta('name','keywords','OOH, DOOH, publicidad exterior, Out Of Home, LATAM, CDMX, medios, pantallas LED, programática, evento, summit, networking, Ciudad de México');\n    meta('property','og:type','website');\n    meta('property','og:site_name','OOH Summit');\n    meta('property','og:title', title);\n    meta('property','og:description', EV.desc);\n    meta('property','og:image', EV.img);\n    meta('property','og:url', location.origin + location.pathname);\n    meta('property','og:locale','es_MX');\n    meta('name','twitter:card','summary_large_image');\n    meta('name','twitter:title', title);\n    meta('name','twitter:description', EV.desc);\n    meta('name','twitter:image', EV.img);\n    var link=document.head.querySelector('link[rel=\"canonical\"]');\n    if(!link){ link=document.createElement('link'); link.rel='canonical'; document.head.appendChild(link); }\n    link.href = EV.url;\n    var ld={\"@context\":\"https://schema.org\",\"@type\":\"Event\",\"name\":EV.name,\n      \"startDate\":EV.start,\"endDate\":EV.end,\n      \"eventStatus\":\"https://schema.org/EventScheduled\",\n      \"eventAttendanceMode\":\"https://schema.org/OfflineEventAttendanceMode\",\n      \"image\":[EV.img],\"description\":EV.desc,\"url\":EV.url,\n      \"location\":{\"@type\":\"Place\",\"name\":EV.venue,\n        \"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Av. Insurgentes Sur 701\",\"addressLocality\":\"Ciudad de México\",\"addressRegion\":\"CDMX\",\"addressCountry\":\"MX\"}},\n      \"organizer\":{\"@type\":\"Organization\",\"name\":\"OOH Summit\",\"url\":EV.url},\n      \"offers\":{\"@type\":\"Offer\",\"price\":\"180\",\"priceCurrency\":\"USD\",\"availability\":\"https://schema.org/InStock\",\"url\":EV.url+\"#entradas\",\"validFrom\":\"2026-01-01T00:00:00-06:00\"}};\n    var sc=document.createElement('script'); sc.type='application/ld+json'; sc.text=JSON.stringify(ld); document.head.appendChild(sc);\n  }catch(e){}\n\n  /* ---- Inyección de etiquetas desde el PANEL de Marketing de MOBU (config del storefront) ---- */\n  window.dataLayer = window.dataLayer || [];\n  window.gtag = window.gtag || function(){ dataLayer.push(arguments); };\n  function loadJS(src){ var s=document.createElement('script'); s.async=true; s.src=src; (document.head||document.documentElement).appendChild(s); }\n  // Buffer de eventos de Meta: si el Pixel aún no se inyectó (config async), se encolan y se disparan tras el init (orden correcto).\n  var pixelBuf=[]; function fbTrack(ev,pp,oo){ if(window.__pixel){ try{ fbq('track',ev,pp,oo); }catch(e){} } else { pixelBuf.push([ev,pp,oo]); } }\n  function injGTM(id){ dataLayer.push({'gtm.start':new Date().getTime(),event:'gtm.js'}); loadJS('https://www.googletagmanager.com/gtm.js?id='+id); }\n  function injGA4(id){ loadJS('https://www.googletagmanager.com/gtag/js?id='+id); gtag('js', new Date()); gtag('config', id, {anonymize_ip:true}); window.__ga4=id; }\n  function injPixel(id){\n    if(window.fbq) return;\n    !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n      if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n      t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');\n    fbq('init', id); fbq('track','PageView'); window.__pixel=id;\n    for(var _i=0;_i<pixelBuf.length;_i++){ try{ fbq('track',pixelBuf[_i][0],pixelBuf[_i][1],pixelBuf[_i][2]); }catch(e){} } pixelBuf.length=0;\n  }\n  // Seguridad (reset de contraseña): si venís del link ?reset=token, stasheamos el token y LIMPIAMOS la URL\n  // ACÁ, sincrónicamente y ANTES de cualquier analytics, para que el token NO viaje a GA4/GTM/Pixel (page_location)\n  // ni quede en el address bar / history / Referer. El flujo de reset lee window.__OOH_RESET, nunca la URL.\n  try{ var _rp=new URLSearchParams(location.search); if(_rp.get('reset')){ window.__OOH_RESET=_rp.get('reset'); _rp.delete('reset'); var _rq=_rp.toString(); history.replaceState({}, '', location.pathname + (_rq?('?'+_rq):'') + location.hash); } }catch(_e){}\n  try{\n    var SLUG='oohsummit'; // fijo: en el cutover a www.oohsummit.com, hostname.split daría 'www' → config 404 → sin analytics\n    var useCfg=function(cfg){\n        cfg=cfg||{};\n        if(cfg.gtmContainerId) injGTM(cfg.gtmContainerId);\n        if(cfg.gaMeasurementId) injGA4(cfg.gaMeasurementId);\n        if(cfg.metaPixelId) injPixel(cfg.metaPixelId);\n      };\n    var shellCfg=null; try{ shellCfg=window.MOBU&&window.MOBU.config; }catch(_e){}\n    if(shellCfg&&shellCfg.slug===SLUG) useCfg(shellCfg); // la vidriera ya trajo la config: no la pedimos de nuevo\n    else fetch('https://api.mobu.market/api/public/storefronts/'+SLUG+'/config',{headers:{Accept:'application/json'}})\n      .then(function(r){ return r.json(); }).then(useCfg).catch(function(){});\n  }catch(e){}\n\n  /* ---- API de eventos del embudo → gtag (GA4) + fbq (Pixel) + dataLayer (GTM) ---- */\n  function uid(){ try{ return (crypto&&crypto.randomUUID)?crypto.randomUUID():String(Date.now())+Math.random(); }catch(e){ return String(Date.now())+Math.random(); } }\n  function dl(o){ try{ dataLayer.push(o); }catch(e){} }\n  var IN='Entrada OOH Summit 2026';\n  window.oohTrack = {\n    viewItem:function(value){\n      var v=Number(value)||0;\n      try{ gtag('event','view_item',{currency:EV.ccy,value:v,items:[{item_name:IN,price:v}]}); }catch(e){}\n      fbTrack('ViewContent',{content_name:IN,content_type:'product',currency:EV.ccy,value:v});\n      dl({event:'view_item',ecommerce:{currency:EV.ccy,value:v}});\n    },\n    beginCheckout:function(value, qty, eventId){\n      var v=Number(value)||0, q=Number(qty)||1;\n      try{ gtag('event','begin_checkout',{currency:EV.ccy,value:v,items:[{item_name:IN,price:v,quantity:q}]}); }catch(e){}\n      fbTrack('InitiateCheckout',{currency:EV.ccy,value:v,num_items:q}, eventId?{eventID:eventId}:undefined);\n      dl({event:'begin_checkout',ecommerce:{currency:EV.ccy,value:v}});\n    },\n    lead:function(where){\n      try{ gtag('event','generate_lead',{currency:EV.ccy,value:0,method:where||'form'}); }catch(e){}\n      fbTrack('Lead',{content_name:where||'lead'});\n      dl({event:'generate_lead',method:where||'form'});\n    },\n    // Guarda la intención antes de ir a Stripe para poder emitir Purchase al volver.\n    stash:function(o){ try{ sessionStorage.setItem('ooh_pending', JSON.stringify(o)); }catch(e){} },\n    purchaseFromStash:function(fallbackId){\n      var o=null; try{ o=JSON.parse(sessionStorage.getItem('ooh_pending')||'null'); }catch(e){}\n      var tid=(o&&o.id)||fallbackId||uid(), value=o?(Number(o.value)||0):0, qty=o?(Number(o.qty)||1):1;\n      try{ gtag('event','purchase',{transaction_id:tid,currency:EV.ccy,value:value,items:[{item_name:(o&&o.name)||IN,price:value/(qty||1),quantity:qty}]}); }catch(e){}\n      fbTrack('Purchase',{currency:EV.ccy,value:value,num_items:qty},{eventID:tid});\n      dl({event:'purchase',ecommerce:{transaction_id:tid,currency:EV.ccy,value:value}});\n      try{ sessionStorage.removeItem('ooh_pending'); }catch(e){}\n      return o;\n    }\n  };\n})();\n</script>\n\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Archivo:wght@400;500;600;700;800;900&display=swap');\n\nhtml,body{ margin:0 !important; padding:0 !important; }\n.oohs, .oohs *{ box-sizing:border-box; margin:0; padding:0; }\n.oohs{\n  --red:#B31E23; --red-deep:#6E1214; --red-bright:#E4362E;\n  --ink:#0E0E0F; --ink2:#161618; --paper:#FFFFFF; --smoke:#F4F4F5;\n  --line:rgba(255,255,255,.14); --line-dark:rgba(14,14,15,.10);\n  --muted:rgba(255,255,255,.66); --muted-ink:rgba(14,14,15,.60);\n  font-family:'Archivo','Helvetica Neue',Arial,sans-serif;\n  color:var(--ink); background:var(--paper); line-height:1.5;\n  -webkit-font-smoothing:antialiased; overflow-x:hidden;\n}\n.oohs img{ max-width:100%; display:block; }\n.oohs .wrap{ width:100%; max-width:1160px; margin:0 auto; padding:0 24px; }\n.oohs .eyebrow{ font-size:12px; font-weight:700; letter-spacing:.28em; text-transform:uppercase; }\n.oohs .disp{ font-weight:900; letter-spacing:-.01em; line-height:.92; text-transform:uppercase; }\n.oohs a{ color:inherit; text-decoration:none; }\n\n/* ---------- NAV ---------- */\n.oohs .nav{ position:fixed !important; top:0; left:0; right:0; z-index:1000;\n  display:flex; align-items:center; justify-content:space-between;\n  padding:18px 32px; background:transparent; transition:background .3s, padding .3s, box-shadow .3s; }\n.oohs .nav.scrolled{ background:rgba(14,14,15,.92) !important; backdrop-filter:blur(12px); -webkit-backdrop-filter:blur(12px); padding:12px 32px; box-shadow:0 1px 0 rgba(255,255,255,.08); }\n.oohs [id]{ scroll-margin-top:84px; }\n.oohs .nav .brand{ color:#fff; }\n.oohs .nav .links{ display:flex; align-items:center; gap:30px; }\n.oohs .nav .links a{ color:rgba(255,255,255,.82); font-size:13px; font-weight:600; letter-spacing:.16em; text-transform:uppercase; transition:color .2s; }\n.oohs .nav .links a:hover{ color:#fff; }\n.oohs .nav .cta{ background:var(--red-bright); color:#fff !important; padding:11px 20px; border-radius:6px; letter-spacing:.14em; }\n.oohs .nav .cta:hover{ background:#fff; color:var(--red) !important; }\n@media(max-width:920px){ .oohs .nav .links a:not(.cta){ display:none; } .oohs .nav{ padding:16px 20px; } }\n\n/* ---------- HERO ---------- */\n.oohs .hero{ position:relative; min-height:100vh; display:flex; flex-direction:column;\n  align-items:center; justify-content:center; text-align:center; color:#fff; padding:120px 20px 60px;\n  background:#5C1012; overflow:hidden; }\n.oohs .hero .bg{ position:absolute; inset:0; z-index:0; background-size:cover; background-position:center; opacity:.30; }\n.oohs .hero .tint{ content:\"\"; position:absolute; inset:0; z-index:0;\n  background:radial-gradient(120% 90% at 62% 30%, rgba(196,42,38,.86) 0%, rgba(168,30,32,.9) 34%, rgba(126,22,24,.94) 68%, #5C1012 100%); }\n.oohs .hero::after{ content:\"\"; position:absolute; inset:0; z-index:0;\n  background:radial-gradient(120% 80% at 50% 40%, transparent 40%, rgba(60,8,10,.55) 100%); }\n.oohs .hero > *{ position:relative; z-index:1; }\n.oohs .lockup{ margin-bottom:26px; }\n.oohs .lockup .l1{ font-size:clamp(84px,17vw,230px); }\n.oohs .lockup .l2{ font-weight:600; font-size:clamp(34px,6.6vw,92px); letter-spacing:.02em; line-height:1; margin-top:-.04em; }\n.oohs .lockup .l3{ font-weight:500; font-size:clamp(15px,2.7vw,34px); letter-spacing:.34em; margin-top:.35em; }\n.oohs .year{ display:flex; align-items:center; justify-content:center; gap:20px; margin:14px 0 30px; }\n.oohs .year span{ font-weight:900; font-size:clamp(40px,7vw,84px); letter-spacing:.02em; }\n.oohs .year i{ height:2px; width:clamp(30px,7vw,80px); background:rgba(255,255,255,.6); display:block; }\n.oohs .hero .date{ font-weight:800; font-size:clamp(26px,4.6vw,46px); letter-spacing:.01em; }\n.oohs .hero .place{ font-size:clamp(11px,1.7vw,15px); font-weight:600; letter-spacing:.24em; text-transform:uppercase; color:var(--muted); margin-top:14px; }\n.oohs .hero .lead{ max-width:560px; margin:22px auto 0; font-size:clamp(15px,2vw,18px); color:rgba(255,255,255,.86); }\n.oohs .hero .btns{ display:flex; gap:14px; justify-content:center; flex-wrap:wrap; margin-top:34px; }\n.oohs .btn{ display:inline-flex; align-items:center; gap:9px; font-weight:700; font-size:15px; letter-spacing:.02em; padding:16px 30px; border-radius:8px; cursor:pointer; border:1.5px solid transparent; transition:transform .15s, background .2s, color .2s; }\n.oohs .btn:hover{ transform:translateY(-2px); }\n.oohs .btn-solid{ background:#fff; color:var(--ink); }\n.oohs .btn-solid:hover{ background:var(--red-bright); color:#fff; }\n.oohs .btn-ghost{ background:rgba(255,255,255,.08); color:#fff; border-color:rgba(255,255,255,.5); }\n.oohs .btn-ghost:hover{ background:rgba(255,255,255,.16); }\n/* countdown */\n.oohs .cd{ display:flex; gap:clamp(18px,5vw,54px); justify-content:center; margin-top:48px; }\n.oohs .cd div{ text-align:center; }\n.oohs .cd b{ display:block; font-weight:900; font-size:clamp(30px,5vw,52px); line-height:1; font-variant-numeric:tabular-nums; }\n.oohs .cd small{ font-size:11px; font-weight:600; letter-spacing:.2em; color:var(--muted); text-transform:uppercase; }\n\n/* ---------- STATS strip ---------- */\n.oohs .stats{ background:var(--ink); color:#fff; padding:44px 0; }\n.oohs .stats .row{ display:flex; flex-wrap:wrap; justify-content:space-between; gap:24px; text-align:center; }\n.oohs .stats .row > div{ flex:1; min-width:110px; }\n.oohs .stats b{ display:block; font-weight:900; font-size:clamp(30px,4.2vw,44px); color:#fff; }\n.oohs .stats small{ font-size:11px; font-weight:600; letter-spacing:.18em; color:rgba(255,255,255,.55); text-transform:uppercase; }\n.oohs .stats b em{ font-style:normal; color:var(--red-bright); }\n\n/* ---------- SECTION base ---------- */\n.oohs section{ padding:clamp(64px,9vw,116px) 0; }\n.oohs .sec-ink{ background:var(--ink2); color:#fff; }\n.oohs .sec-paper{ background:var(--paper); color:var(--ink); }\n.oohs .sec-smoke{ background:var(--smoke); color:var(--ink); }\n.oohs h2.title{ font-weight:900; text-transform:uppercase; font-size:clamp(34px,5.2vw,66px); line-height:.98; letter-spacing:-.01em; }\n.oohs .kick{ color:var(--red-bright); }\n.oohs .lede{ font-size:clamp(17px,2.3vw,22px); max-width:640px; margin-top:18px; }\n.oohs .sec-ink .lede{ color:rgba(255,255,255,.72); }\n\n/* what-is bullets */\n/* BALANCE_GRID (elastic): flex-wrap + flex-grow:1 → la última fila siempre llena el ancho, sin huecos. */\n.oohs .feat{ display:flex; flex-wrap:wrap; gap:20px; margin-top:52px; align-items:stretch; }\n.oohs .feat .card{ flex:1 1 calc(33.333% - 20px); min-width:min(240px,100%); border:1px solid var(--line); border-radius:14px; padding:26px; background:rgba(255,255,255,.02); transition:border-color .3s cubic-bezier(.4,0,.2,1), box-shadow .3s cubic-bezier(.4,0,.2,1), transform .3s cubic-bezier(.4,0,.2,1); }\n.oohs .feat .card:hover{ transform:translateY(-4px); border-color:rgba(228,54,46,.5); box-shadow:0 0 0 1px rgba(228,54,46,.18), 0 20px 46px -20px rgba(228,54,46,.42); }\n/* animación mobu-cajas (OOH): el badge del número se llena de rojo y escala; el título se pinta blanco. */\n.oohs .feat .n{ display:inline-flex; align-items:center; justify-content:center; width:46px; height:46px; border-radius:13px; background:rgba(228,54,46,.12); font-weight:900; color:var(--red-bright); font-size:16px; letter-spacing:.02em; transition:transform .3s cubic-bezier(.4,0,.2,1), color .3s, background .3s; }\n.oohs .feat .card:hover .n{ transform:scale(1.07); color:#fff; background:linear-gradient(135deg,var(--red-bright),var(--red-deep)); }\n.oohs .feat h4{ font-size:19px; font-weight:800; margin:14px 0 8px; transition:color .3s; }\n.oohs .feat .card:hover h4{ color:#fff; }\n.oohs .feat p{ color:rgba(255,255,255,.66); font-size:15px; }\n\n/* foros */\n.oohs .foros{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:52px; }\n.oohs .foro{ border-radius:18px; padding:34px; color:#fff; position:relative; overflow:hidden; min-height:340px; display:flex; flex-direction:column; }\n.oohs .foro.red{ background:linear-gradient(150deg,#B31E23,#7E1618); }\n.oohs .foro.dark{ background:linear-gradient(150deg,#242427,#0E0E0F); border:1px solid rgba(255,255,255,.08); }\n.oohs .foro .tag{ font-size:11px; font-weight:700; letter-spacing:.24em; text-transform:uppercase; opacity:.7; }\n.oohs .foro h3{ font-weight:900; text-transform:uppercase; font-size:clamp(26px,3.6vw,40px); line-height:1; margin:8px 0 18px; }\n.oohs .foro ul{ list-style:none; margin-top:auto; }\n.oohs .foro li{ padding:9px 0; border-top:1px solid rgba(255,255,255,.16); font-size:15px; display:flex; gap:10px; }\n.oohs .foro li::before{ content:\"—\"; opacity:.55; }\n@media(max-width:820px){ .oohs .foros{ grid-template-columns:1fr; } }\n\n/* venue stats + plano */\n.oohs .venue-grid{ display:grid; grid-template-columns:1.05fr .95fr; gap:34px; margin-top:44px; align-items:center; }\n.oohs .venue-plano{ border-radius:16px; overflow:hidden; border:1px solid var(--line-dark); background:#fff; box-shadow:0 20px 50px rgba(14,14,15,.10); }\n.oohs .venue-plano img{ width:100%; height:auto; display:block; }\n.oohs .venue{ display:grid; grid-template-columns:repeat(2,1fr); gap:18px; }\n.oohs .venue > div{ border:1px solid var(--line-dark); border-radius:14px; padding:26px 18px; text-align:center; }\n.oohs .venue b{ display:block; font-weight:900; font-size:clamp(30px,4vw,46px); color:var(--red); }\n.oohs .venue small{ font-size:12px; font-weight:600; letter-spacing:.12em; color:var(--muted-ink); text-transform:uppercase; }\n@media(max-width:820px){ .oohs .venue-grid{ grid-template-columns:1fr; } }\n\n/* audience */\n.oohs .aud{ display:flex; flex-wrap:wrap; gap:18px; margin-top:52px; align-items:stretch; }\n.oohs .aud > div{ flex:1 1 calc(25% - 18px); min-width:min(170px,100%); border-top:3px solid var(--red-bright); padding-top:20px; }\n.oohs .aud b{ display:block; font-weight:900; font-size:clamp(40px,5.5vw,64px); line-height:1; }\n.oohs .aud h4{ font-size:16px; font-weight:800; margin:8px 0 4px; }\n.oohs .aud p{ font-size:14px; color:rgba(255,255,255,.6); }\n\n/* ---------- VIDEOS ---------- */\n.oohs .vids{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:52px; }\n/* Cajas cuadradas, más grandes, sin controles nativos (reproducción al hover). */\n.oohs .vid{ position:relative; border-radius:18px; overflow:hidden; border:1px solid var(--line); background:#000; aspect-ratio:1/1; box-shadow:0 18px 46px -22px rgba(0,0,0,.55); transition:transform .25s cubic-bezier(.2,.7,.2,1), box-shadow .25s, border-color .25s; }\n.oohs .vid:hover{ transform:translateY(-4px); border-color:var(--red-bright); box-shadow:0 26px 60px -20px rgba(228,54,46,.4); }\n.oohs .vid video{ width:100%; height:100%; object-fit:cover; display:block; background:#000; pointer-events:none; }\n.oohs .vid video::-webkit-media-controls{ display:none !important; }\n@media(max-width:640px){ .oohs .vids{ grid-template-columns:1fr; } }\n\n/* ---------- TICKETS widget ---------- */\n.oohs .tk{ background:linear-gradient(180deg,#0E0E0F,#1a0c0d 60%,#2a0e10); color:#fff; }\n.oohs .tk .head{ text-align:center; max-width:640px; margin:0 auto 44px; }\n.oohs #ooh-tickets{ max-width:820px; margin:0 auto; display:grid; gap:14px; }\n.oohs .tkt{ display:flex; align-items:center; gap:20px; border:1px solid var(--line); border-radius:14px; padding:22px 24px; background:rgba(255,255,255,.03); transition:border-color .2s, background .2s; }\n.oohs .tkt:hover{ border-color:var(--red-bright); background:rgba(228,54,46,.06); }\n.oohs .tkt .info{ flex:1; min-width:0; }\n.oohs .tkt .nm{ font-weight:800; font-size:19px; }\n.oohs .tkt .av{ font-size:13px; color:var(--muted); margin-top:4px; }\n.oohs .tkt .av.soldout{ color:#ff7a7a; }\n.oohs .tkt .pr{ text-align:right; }\n.oohs .tkt .pr b{ font-weight:900; font-size:24px; white-space:nowrap; }\n.oohs .tkt .pr small{ display:block; font-size:11px; letter-spacing:.14em; color:var(--muted); text-transform:uppercase; }\n.oohs .tkt button{ background:var(--red-bright); color:#fff; border:0; font-weight:700; font-size:14px; padding:13px 22px; border-radius:8px; cursor:pointer; white-space:nowrap; transition:background .2s, transform .15s; }\n.oohs .tkt button:hover{ background:#fff; color:var(--red); transform:translateY(-1px); }\n.oohs .tkt button:disabled{ background:rgba(255,255,255,.12); color:var(--muted); cursor:not-allowed; }\n.oohs .tk-note{ text-align:center; color:var(--muted); font-size:13px; margin-top:22px; }\n.oohs .tk-msg{ text-align:center; padding:20px; border-radius:12px; background:rgba(255,255,255,.05); border:1px solid var(--line); }\n@media(max-width:600px){ .oohs .tkt{ flex-wrap:wrap; } .oohs .tkt .pr{ text-align:left; } }\n\n/* dialog + overlay (compartido: compra y gracias) */\n.oohs .ov{ position:fixed; inset:0; z-index:9999; background:rgba(8,4,5,.72); backdrop-filter:blur(4px); display:none; align-items:center; justify-content:center; padding:20px; }\n.oohs .ov.on{ display:flex; }\n.oohs .dlg{ width:100%; max-width:460px; background:#161314; color:#fff; border:1px solid var(--line); border-radius:18px; padding:30px; max-height:92vh; overflow:auto; }\n.oohs .dlg h4{ font-weight:900; font-size:22px; text-transform:uppercase; }\n.oohs .dlg p.sub{ color:var(--muted); font-size:14px; margin:6px 0 20px; }\n.oohs .dlg label{ display:block; font-size:12px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); margin:14px 0 6px; }\n.oohs .dlg input{ width:100%; background:rgba(255,255,255,.06); border:1px solid var(--line); border-radius:10px; padding:13px 14px; color:#fff; font-size:15px; font-family:inherit; }\n.oohs .dlg input:focus{ outline:none; border-color:var(--red-bright); }\n.oohs .qty{ display:flex; align-items:center; gap:12px; }\n.oohs .qty button{ width:46px; height:46px; flex:0 0 46px; border:1px solid var(--line); background:rgba(255,255,255,.06); color:#fff; border-radius:10px; font-size:22px; font-weight:800; line-height:1; cursor:pointer; transition:border-color .2s, background .2s; }\n.oohs .qty button:hover:not(:disabled){ border-color:var(--red-bright); background:rgba(228,54,46,.1); }\n.oohs .qty button:disabled{ opacity:.4; cursor:not-allowed; }\n.oohs .qty input{ width:70px; text-align:center; font-weight:800; font-size:17px; padding:12px 0; }\n.oohs .qty .qmax{ font-size:12px; color:var(--muted); }\n.oohs .tot{ margin-top:20px; padding-top:16px; border-top:1px solid var(--line); }\n.oohs .totline{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:9px; }\n.oohs .totline span{ font-size:12px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--muted); }\n.oohs .totline .v{ font-size:15px; font-weight:800; color:#fff; letter-spacing:0; text-transform:none; }\n.oohs .totline.disc span, .oohs .totline.disc .v{ color:#8fe6a4; }\n.oohs .totline.grand{ margin-top:12px; margin-bottom:0; }\n.oohs .totline.grand b{ font-weight:900; font-size:26px; }\n.oohs .codemsg{ font-size:12.5px; font-weight:700; margin-top:9px; min-height:15px; letter-spacing:0; }\n.oohs .dlg .go{ width:100%; margin-top:18px; background:var(--red-bright); color:#fff; border:0; font-weight:800; font-size:15px; padding:15px; border-radius:10px; cursor:pointer; transition:background .2s; }\n.oohs .dlg .go:hover:not(:disabled){ background:#fff; color:var(--red); }\n.oohs .dlg .go:disabled{ opacity:.6; cursor:wait; }\n.oohs .dlg .x{ float:right; cursor:pointer; color:var(--muted); font-size:20px; line-height:1; }\n.oohs .dlg .err{ color:#ff9a9a; font-size:13px; margin-top:12px; min-height:16px; }\n.oohs .dlg.dlg-wide{ max-width:640px; }\n.oohs .dlg select, .oohs .dlg textarea{ width:100%; background:rgba(255,255,255,.06); border:1px solid var(--line); border-radius:10px; padding:13px 14px; color:#fff; font-size:15px; font-family:inherit; }\n.oohs .dlg select{ appearance:none; -webkit-appearance:none; background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'><path d='M1 1l5 5 5-5' fill='none' stroke='%23bdb5b7' stroke-width='2'/></svg>\"); background-repeat:no-repeat; background-position:right 14px center; padding-right:36px; cursor:pointer; }\n.oohs .dlg select option{ background:#161314; color:#fff; }\n.oohs .dlg select:focus, .oohs .dlg textarea:focus{ outline:none; border-color:var(--red-bright); }\n.oohs .dlg textarea{ resize:vertical; min-height:84px; }\n.oohs .dlg .g2{ display:grid; grid-template-columns:1fr 1fr; gap:0 14px; }\n.oohs .dlg .g2 label{ margin-top:12px; }\n@media (max-width:600px){ .oohs .dlg .g2{ grid-template-columns:1fr; } }\n.oohs .dlg .ok{ color:#8fe6a4; font-size:14px; margin-top:12px; }\n/* Portal: link \"olvidé contraseña\", divisor y botón Google */\n.oohs .dlg .pforgot{ display:block; text-align:center; margin-top:12px; font-size:12.5px; font-weight:700; color:var(--muted); text-decoration:none; letter-spacing:.01em; }\n.oohs .dlg .pforgot:hover{ color:#fff; text-decoration:underline; }\n.oohs .dlg .pdiv{ display:flex; align-items:center; gap:12px; margin:16px 0 12px; color:var(--muted); font-size:11px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; }\n.oohs .dlg .pdiv:before, .oohs .dlg .pdiv:after{ content:\"\"; flex:1; height:1px; background:var(--line); }\n.oohs .dlg .gbtn{ width:100%; display:flex; align-items:center; justify-content:center; gap:10px; background:#fff; color:#0E0E0F; border:0; font-weight:800; font-size:14.5px; padding:14px; border-radius:10px; cursor:pointer; font-family:inherit; transition:transform .12s ease, box-shadow .2s ease; }\n.oohs .dlg .gbtn:hover:not(:disabled){ transform:translateY(-1px); box-shadow:0 10px 26px -10px rgba(0,0,0,.55); }\n.oohs .dlg .gbtn:disabled{ opacity:.6; cursor:wait; }\n.oohs .dlg .gbtn svg{ flex:none; }\n/* ===== Cartel de cookies del shell (#sf-consent) → paleta OOH SUMMIT. Vive fuera de .oohs (lo agrega el\n   shell al <body>), así que NO puede usar var(--*): colores literales, !important para ganar al shell. ===== */\n#sf-consent .sfc-card{ background:#161618 !important; color:#fff !important; border:1px solid rgba(255,255,255,.14) !important; box-shadow:0 -10px 44px rgba(0,0,0,.5) !important; }\n#sf-consent .sfc-txt{ color:rgba(255,255,255,.86) !important; }\n#sf-consent .sfc-txt b{ color:#fff !important; }\n#sf-consent .sfc-cats{ color:rgba(255,255,255,.82) !important; }\n#sf-consent .sfc-b{ font-family:'Archivo','Helvetica Neue',Arial,sans-serif !important; letter-spacing:.02em; }\n#sf-consent .sfc-pri{ background:#E4362E !important; color:#fff !important; border-color:#E4362E !important; }\n#sf-consent .sfc-pri:hover{ background:#fff !important; color:#B31E23 !important; }\n#sf-consent .sfc-ghost{ background:transparent !important; border-color:rgba(255,255,255,.30) !important; color:rgba(255,255,255,.9) !important; }\n#sf-consent .sfc-ghost:hover{ border-color:#fff !important; color:#fff !important; }\n/* gracias */\n.oohs .ty{ text-align:center; }\n.oohs .ty .chk{ width:64px; height:64px; margin:0 auto 16px; border-radius:50%; background:rgba(143,230,164,.14); border:1.5px solid #8fe6a4; display:flex; align-items:center; justify-content:center; color:#8fe6a4; font-size:32px; }\n.oohs .ty h4{ font-size:24px; }\n.oohs .ty p{ color:var(--muted); font-size:14px; margin:10px 0 0; }\n.oohs .ty .qrbox{ margin:22px auto 0; background:#fff; border-radius:14px; padding:16px; max-width:230px; }\n.oohs .ty .qrbox img{ width:100%; height:auto; display:block; }\n.oohs .ty .tks{ margin-top:16px; text-align:left; display:grid; gap:8px; }\n.oohs .ty .tkrow{ display:flex; justify-content:space-between; gap:12px; font-size:13px; padding:10px 12px; border:1px solid var(--line); border-radius:10px; }\n.oohs .ty .acts{ display:grid; gap:10px; margin-top:20px; }\n.oohs .ty .acts a, .oohs .ty .acts button{ display:inline-flex; align-items:center; justify-content:center; gap:8px; width:100%; padding:13px; border-radius:10px; font-weight:800; font-size:14px; cursor:pointer; border:1.5px solid transparent; font-family:inherit; }\n.oohs .ty .a-primary{ background:var(--red-bright); color:#fff; }\n.oohs .ty .a-ghost{ background:rgba(255,255,255,.06); color:#fff; border-color:var(--line); }\n\n/* ---------- FOOTER ---------- */\n.oohs .foot{ background:#000; color:#fff; padding:70px 0 40px; text-align:center; }\n.oohs .foot .place{ color:var(--muted); font-size:13px; letter-spacing:.2em; text-transform:uppercase; margin-top:16px; }\n.oohs .foot .contact{ margin-top:22px; font-size:15px; }\n.oohs .foot .contact a{ color:var(--red-bright); font-weight:700; }\n.oohs .foot .social{ margin-top:18px; display:flex; gap:18px; justify-content:center; }\n.oohs .foot .social a{ color:rgba(255,255,255,.7); font-size:13px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; }\n.oohs .foot .social a:hover{ color:var(--red-bright); }\n.oohs .foot .by{ margin-top:36px; font-size:12px; color:rgba(255,255,255,.4); letter-spacing:.1em; }\n\n/* logo lockup — namespaced */\n.oohs .ooh-lg{ display:inline-block; line-height:.86; text-align:center; color:inherit; background:none !important; }\n.oohs .ooh-lg .ooh-o{ font-weight:900; letter-spacing:-.02em; }\n.oohs .ooh-lg .ooh-s{ font-weight:600; letter-spacing:.16em; }\n.oohs .ooh-lg .ooh-c{ font-weight:500; letter-spacing:.28em; }\n/* Logo oficial OOH Summit (imagen real, variante blanca para fondos oscuros). */\n.oohs{ --ooh-logo:url(\"data:image/png;base64,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\"); }\n.oohs .ooh-logo-img{ background:var(--ooh-logo) center/contain no-repeat; display:block; aspect-ratio:1320/1085; }\n.oohs .ooh-logo-hero{ width:min(360px,74vw); margin:0 auto 10px; }\n\n/* ================= SECCIONES ================= */\n.oohs .ooh-pillars{ display:flex; flex-wrap:wrap; gap:20px; margin-top:52px; align-items:stretch; }\n.oohs .ooh-pillar{ flex:1 1 calc(33.333% - 20px); min-width:min(240px,100%); border:1px solid var(--line-dark); border-radius:14px; padding:30px 26px; background:#fff; transition:transform .3s cubic-bezier(.4,0,.2,1), box-shadow .3s, border-color .3s; }\n.oohs .ooh-pillar:hover{ transform:translateY(-4px); box-shadow:0 0 0 1px rgba(228,54,46,.14), 0 20px 44px -18px rgba(179,30,35,.28); border-color:rgba(228,54,46,.45); }\n.oohs .ooh-pillar-n{ display:inline-flex; align-items:center; justify-content:center; width:52px; height:52px; border-radius:14px; background:rgba(228,54,46,.10); font-weight:900; color:var(--red-bright); font-size:24px; letter-spacing:-.02em; line-height:1; transition:transform .3s cubic-bezier(.4,0,.2,1), color .3s, background .3s; }\n.oohs .ooh-pillar:hover .ooh-pillar-n{ transform:scale(1.07); color:#fff; background:linear-gradient(135deg,var(--red-bright),var(--red-deep)); }\n.oohs .ooh-pillar h4{ font-size:20px; font-weight:800; margin:16px 0 8px; }\n.oohs .ooh-pillar p{ color:var(--muted-ink); font-size:15px; }\n\n.oohs .ooh-agenda{ display:grid; grid-template-columns:1fr 1fr; gap:24px; margin-top:52px; }\n.oohs .ooh-day{ border:1px solid var(--line); border-radius:18px; padding:30px; background:rgba(255,255,255,.02); }\n.oohs .ooh-day-h{ display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; padding-bottom:18px; border-bottom:1px solid var(--line); }\n.oohs .ooh-day-k{ font-weight:900; text-transform:uppercase; font-size:22px; letter-spacing:.02em; color:var(--red-bright); }\n.oohs .ooh-day-d{ font-size:12px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--muted); }\n.oohs .ooh-tl{ list-style:none; }\n.oohs .ooh-tl li{ display:flex; gap:18px; padding:14px 0; border-top:1px solid rgba(255,255,255,.08); }\n.oohs .ooh-tl li:first-child{ border-top:0; padding-top:18px; }\n.oohs .ooh-t{ flex:0 0 52px; font-weight:900; font-size:15px; font-variant-numeric:tabular-nums; color:#fff; }\n.oohs .ooh-e{ display:flex; flex-direction:column; gap:3px; }\n.oohs .ooh-e b{ font-weight:700; font-size:15px; color:#fff; }\n.oohs .ooh-e i{ font-style:normal; font-size:13px; color:rgba(255,255,255,.6); }\n.oohs .ooh-note{ margin-top:26px; font-size:13px; font-style:italic; color:rgba(255,255,255,.5); }\n.oohs .ooh-agenda[hidden], .oohs .ooh-note[hidden], .oohs .ooh-soon[hidden]{ display:none; }\n.oohs .ooh-t{ flex:0 0 64px; }\n.oohs .ooh-t small{ display:block; font-weight:600; font-size:12px; color:rgba(255,255,255,.45); }\n.oohs .ooh-e{ min-width:0; }\n.oohs .ooh-e b{ overflow-wrap:anywhere; }\n.oohs .ooh-room{ display:inline-block; align-self:flex-start; font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--red-bright); border:1px solid rgba(228,54,46,.5); border-radius:999px; padding:2px 9px; margin-bottom:4px; }\n.oohs .ooh-spk{ font-size:13px; color:rgba(255,255,255,.85); }\n.oohs .ooh-e details{ margin-top:4px; }\n.oohs .ooh-e summary{ cursor:pointer; font-size:12px; font-weight:700; color:rgba(255,255,255,.55); list-style:none; }\n.oohs .ooh-e summary::-webkit-details-marker{ display:none; }\n.oohs .ooh-e details p{ margin-top:6px; font-size:13px; line-height:1.55; color:rgba(255,255,255,.7); white-space:pre-line; }\n@media(max-width:520px){ .oohs .ooh-day{ padding:22px 18px; } .oohs .ooh-tl li{ gap:12px; } .oohs .ooh-t{ flex-basis:56px; } }\n@media(max-width:820px){ .oohs .ooh-agenda{ grid-template-columns:1fr; } }\n\n/* Agenda \"Próximamente\" */\n.oohs .ooh-soon{ margin-top:44px; border:1px solid var(--line); border-radius:16px; padding:44px 28px; text-align:center; background:linear-gradient(180deg,rgba(228,54,46,.07),transparent); }\n.oohs .ooh-soon-badge{ display:inline-block; font-size:12px; font-weight:800; letter-spacing:.16em; text-transform:uppercase; color:var(--red-bright); border:1px solid var(--red-bright); border-radius:999px; padding:7px 16px; }\n.oohs .ooh-soon-t{ font-size:26px; font-weight:900; margin:18px 0 8px; }\n.oohs .ooh-soon-p{ color:var(--muted); max-width:560px; margin:0 auto 22px; font-size:15px; line-height:1.6; }\n.oohs .ooh-soon-cta{ display:inline-block; }\n\n/* Sección NOVEDADES (captura de email) */\n.oohs .ooh-news{ border-top:1px solid var(--line); }\n.oohs .ooh-news .wrap{ text-align:center; }\n.oohs .ooh-news h2{ font-size:clamp(26px,4vw,40px); font-weight:900; letter-spacing:-.02em; }\n.oohs .ooh-news p.lede{ margin:14px auto 26px; max-width:600px; }\n.oohs .ooh-newsform{ display:flex; gap:10px; max-width:640px; margin:0 auto; flex-wrap:wrap; justify-content:center; }\n.oohs .ooh-newsform input{ flex:1 1 180px; min-width:170px; background:rgba(255,255,255,.06); border:1px solid var(--line); border-radius:12px; padding:15px 16px; color:#fff; font-size:15px; font-family:inherit; }\n.oohs .ooh-newsform input#ooh-news-email{ flex-basis:260px; }\n.oohs .ooh-newsform input::placeholder{ color:rgba(255,255,255,.5); }\n.oohs .ooh-newsform button{ background:var(--red-bright); color:#fff; border:0; font-weight:800; font-size:15px; padding:15px 26px; border-radius:12px; cursor:pointer; white-space:nowrap; flex:1 1 100%; margin-top:8px; transition:filter .2s; font-family:inherit; }\n.oohs .ooh-newsform button:hover:not(:disabled){ filter:brightness(1.1); }\n.oohs .ooh-newsform button:disabled{ opacity:.6; cursor:not-allowed; }\n.oohs .ooh-news-msg{ margin-top:14px; font-size:14px; font-weight:700; min-height:18px; }\n.oohs .ooh-news-fine{ margin-top:10px; font-size:12px; color:rgba(255,255,255,.45); }\n\n/* CTA flotante con slide-in */\n.oohs .ooh-slidecta{ position:fixed; left:24px; bottom:24px; z-index:60; max-width:340px; background:linear-gradient(135deg,#1a1412,#241a17); border:1px solid var(--red-bright); border-radius:16px; padding:18px 20px; box-shadow:0 18px 50px rgba(0,0,0,.5); transform:translateY(160%); opacity:0; transition:transform .5s cubic-bezier(.16,1,.3,1), opacity .4s; }\n.oohs .ooh-slidecta.show{ transform:translateY(0); opacity:1; }\n.oohs .ooh-slidecta .sc-x{ position:absolute; top:8px; right:12px; color:var(--muted); cursor:pointer; font-size:16px; line-height:1; }\n.oohs .ooh-slidecta b{ display:block; font-size:15px; font-weight:900; margin-bottom:4px; }\n.oohs .ooh-slidecta span{ display:block; font-size:13px; color:var(--muted); margin-bottom:12px; line-height:1.4; }\n.oohs .ooh-slidecta a{ display:inline-block; background:var(--red-bright); color:#fff; font-weight:800; font-size:13px; padding:10px 16px; border-radius:10px; }\n@media(max-width:560px){ .oohs .ooh-slidecta{ left:12px; right:12px; bottom:12px; max-width:none; } }\n\n/* Videos hover-play */\n.oohs .vid{ position:relative; }\n.oohs .ooh-vid-hint{ position:absolute; left:12px; bottom:12px; z-index:2; pointer-events:none; background:rgba(0,0,0,.6); color:#fff; font-size:12px; font-weight:700; padding:6px 12px; border-radius:999px; backdrop-filter:blur(4px); transition:opacity .3s; }\n.oohs .vid.playing .ooh-vid-hint{ opacity:0; }\n\n.oohs .ooh-gallery{ display:flex; flex-wrap:wrap; gap:16px; margin-top:52px; align-items:stretch; }\n.oohs .ooh-shot{ flex:1 1 calc(33.333% - 16px); min-width:min(220px,100%); position:relative; aspect-ratio:4/3; border-radius:14px; overflow:hidden; display:flex; align-items:flex-end; padding:16px; background-size:cover; background-position:center; }\n.oohs .ooh-shot::before{ content:\"\"; position:absolute; inset:0; background:linear-gradient(180deg,transparent 40%,rgba(14,14,15,.6)); }\n.oohs .ooh-shot{ background-color:#2a1a1b; }\n.oohh-hint{ text-align:center; }\n@media (max-width:720px){ .oohs input, .oohs select, .oohs textarea{ font-size:16px !important; } .oohs .cd small{ letter-spacing:.12em; } }\n.oohs .ooh-e summary{ display:inline-block; padding:8px 0; margin:-4px 0; }\n.oohs .ooh-shot-l{ position:relative; z-index:1; font-size:11px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; color:#fff; }\n.oohs .ooh-recap{ display:flex; flex-wrap:wrap; gap:18px; margin-top:34px; padding-top:34px; border-top:1px solid var(--line-dark); text-align:center; }\n.oohs .ooh-recap > *{ flex:1 1 calc(25% - 18px); min-width:min(150px,100%); }\n.oohs .ooh-recap b{ display:block; font-weight:900; font-size:clamp(30px,4vw,46px); line-height:1; color:var(--red); }\n.oohs .ooh-recap small{ font-size:12px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; color:var(--muted-ink); }\n\n.oohs .ooh-sponsors{ display:flex; flex-wrap:wrap; gap:16px; margin-top:52px; align-items:stretch; }\n.oohs .ooh-tile{ flex:1 1 calc(25% - 16px); min-width:min(180px,100%); display:flex; align-items:center; justify-content:center; text-align:center; min-height:112px; padding:16px; border:1px dashed var(--line); border-radius:14px; background:rgba(255,255,255,.02); color:rgba(255,255,255,.42); font-size:12px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; transition:border-color .2s, color .2s, background .2s; }\n.oohs .ooh-tile:hover{ border-color:var(--red-bright); color:rgba(255,255,255,.85); background:rgba(228,54,46,.06); }\n/* Sponsors agrupados por categoría (tier del módulo Eventos): Main Sponsor › Alliance › Oro › Plata › Bronce › Clásico › Media Partners */\n.oohs .ooh-sponsors.grouped{ display:block; margin-top:44px; }\n.oohs .ooh-sptier{ margin-top:38px; }\n.oohs .ooh-sponsors.grouped .ooh-sptier:first-child{ margin-top:0; }\n.oohs .ooh-sptier-h{ display:flex; align-items:center; gap:16px; margin-bottom:18px; }\n.oohs .ooh-sptier-h b{ font-size:12px; font-weight:800; letter-spacing:.22em; text-transform:uppercase; color:var(--red-bright); white-space:nowrap; }\n.oohs .ooh-sptier-h i{ flex:1; height:1px; background:linear-gradient(to right,rgba(255,255,255,.18),rgba(255,255,255,0)); }\n.oohs .ooh-sptier-grid{ display:flex; flex-wrap:wrap; gap:16px; align-items:stretch; justify-content:center; }\n.oohs .ooh-tile.has-logo{ border-style:solid; border-color:rgba(255,255,255,.08); background:rgba(255,255,255,.03); }\n.oohs .ooh-tile img{ max-width:80%; max-height:56%; object-fit:contain; }\n/* jerarquía: 2 por fila (main) › 3 (alliance/oro) › 4 (resto). max-width = base, así categorías de 1-2 sponsors quedan centradas y proporcionadas, no estiradas a todo el ancho. */\n.oohs .t-main .ooh-tile{ flex:1 1 calc(50% - 16px); max-width:calc(50% - 16px); min-height:150px; }\n.oohs .t-main .ooh-tile img{ max-height:64%; }\n.oohs .t-alliance .ooh-tile,.oohs .t-oro .ooh-tile{ flex:1 1 calc(33.333% - 16px); max-width:calc(33.333% - 16px); min-height:130px; }\n.oohs .t-plata .ooh-tile,.oohs .t-bronce .ooh-tile,.oohs .t-clasico .ooh-tile,.oohs .t-media .ooh-tile,.oohs .t-other .ooh-tile{ flex:1 1 calc(25% - 16px); max-width:calc(25% - 16px); min-height:112px; }\n@media(max-width:820px){\n  .oohs .t-main .ooh-tile,.oohs .t-alliance .ooh-tile,.oohs .t-oro .ooh-tile,.oohs .t-plata .ooh-tile,.oohs .t-bronce .ooh-tile{ flex:1 1 calc(50% - 16px); max-width:calc(50% - 16px); min-height:110px; }\n  .oohs .t-clasico .ooh-tile,.oohs .t-media .ooh-tile,.oohs .t-other .ooh-tile{ flex:1 1 calc(33.333% - 16px); max-width:calc(33.333% - 16px); min-height:92px; }\n}\n@media(max-width:520px){\n  .oohs .ooh-sptier-grid .ooh-tile{ flex:1 1 calc(50% - 12px); max-width:calc(50% - 12px); min-height:88px; }\n}\n.oohs .ooh-sponsor-cta{ display:flex; align-items:center; justify-content:space-between; gap:28px; flex-wrap:wrap; margin-top:40px; padding:clamp(26px,4vw,40px); border-radius:18px; background:linear-gradient(150deg,#B31E23,#7E1618); }\n.oohs .ooh-sponsor-copy{ flex:1; min-width:260px; }\n.oohs .ooh-sponsor-cta h3{ font-weight:900; text-transform:uppercase; font-size:clamp(20px,2.6vw,30px); line-height:1.04; color:#fff; }\n.oohs .ooh-sponsor-cta p{ margin-top:10px; font-size:15px; color:rgba(255,255,255,.86); max-width:560px; }\n@media(max-width:820px){ .oohs .ooh-sponsors{ grid-template-columns:1fr 1fr; } }\n\n/* FAQ — acordeón con lenguaje MOBU: hover mobu-caja (levanta + glow rojo) + toggle como tile rojo que se llena. */\n.oohs .ooh-faq{ max-width:860px; margin:44px auto 0; display:flex; flex-direction:column; gap:12px; }\n.oohs .ooh-q{ border:1px solid var(--line-dark); border-radius:14px; background:#fff; overflow:hidden; transition:border-color .3s cubic-bezier(.4,0,.2,1), box-shadow .3s cubic-bezier(.4,0,.2,1), transform .3s cubic-bezier(.4,0,.2,1); }\n.oohs .ooh-q:hover{ transform:translateY(-2px); border-color:rgba(228,54,46,.42); box-shadow:0 0 0 1px rgba(228,54,46,.13), 0 16px 38px -18px rgba(179,30,35,.26); }\n.oohs .ooh-q[open]{ border-color:rgba(228,54,46,.5); box-shadow:0 0 0 1px rgba(228,54,46,.16), 0 18px 42px -18px rgba(179,30,35,.3); }\n.oohs .ooh-q summary{ list-style:none; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:20px 22px; font-weight:800; font-size:clamp(16px,2vw,18px); color:var(--ink); transition:color .2s; }\n.oohs .ooh-q summary::-webkit-details-marker{ display:none; }\n.oohs .ooh-q:hover summary, .oohs .ooh-q[open] summary{ color:var(--red); }\n.oohs .ooh-q-i{ position:relative; flex:0 0 34px; width:34px; height:34px; border-radius:10px; background:rgba(228,54,46,.10); overflow:hidden; transition:background .3s cubic-bezier(.4,0,.2,1), transform .3s cubic-bezier(.4,0,.2,1); }\n.oohs .ooh-q:hover .ooh-q-i, .oohs .ooh-q[open] .ooh-q-i{ background:linear-gradient(135deg,var(--red-bright),var(--red-deep)); transform:scale(1.06); }\n.oohs .ooh-q-i::before, .oohs .ooh-q-i::after{ content:\"\"; position:absolute; background:var(--red-bright); border-radius:2px; transition:transform .25s, opacity .25s, background .3s; }\n.oohs .ooh-q-i::before{ top:16px; left:9px; width:16px; height:2px; }\n.oohs .ooh-q-i::after{ top:9px; left:16px; width:2px; height:16px; }\n.oohs .ooh-q:hover .ooh-q-i::before, .oohs .ooh-q:hover .ooh-q-i::after, .oohs .ooh-q[open] .ooh-q-i::before, .oohs .ooh-q[open] .ooh-q-i::after{ background:#fff; }\n.oohs .ooh-q[open] .ooh-q-i::after{ transform:scaleY(0); opacity:0; }\n.oohs .ooh-a{ padding:0 22px 22px; }\n.oohs .ooh-a p{ color:var(--muted-ink); font-size:15px; line-height:1.6; max-width:720px; }\n.oohs .ooh-q[open] .ooh-a{ animation:ooh-faq-in .28s ease; }\n@keyframes ooh-faq-in{ from{ opacity:0; transform:translateY(-6px); } to{ opacity:1; transform:none; } }\n</style>\n\n<div class=\"oohs\">\n\n  <!-- NAV -->\n  <nav class=\"nav\">\n    <a href=\"#top\" class=\"brand\">\n      <span class=\"ooh-logo-img\" style=\"width:46px;\" role=\"img\" aria-label=\"OOH Summit\"></span>\n    </a>\n    <div class=\"links\">\n      <a href=\"#evento\">El evento</a>\n      <a href=\"#venue\">Venue</a>\n      <a href=\"#experiencia\">Experiencia</a>\n      <a href=\"#programa\">Programa</a>\n      <a href=\"#videos\">Videos</a>\n      <a href=\"#sponsors\">Sponsors</a>\n      <a href=\"#novedades\">Novedades</a>\n      <a href=\"#\" id=\"ooh-portal-link\">Mis entradas</a>\n      <a href=\"#envivo\" class=\"ooh-live-pill\" id=\"ooh-live-nav\" aria-label=\"Ver la transmisión en vivo\"><span class=\"ooh-live-dot\" aria-hidden=\"true\"></span>EN VIVO</a>\n      <a href=\"#entradas\" class=\"cta\">RESERVAR →</a>\n    </div>\n  </nav>\n\n  <!-- ============================================================================\n       HERO SCROLL · \"La pantalla se instala\" (MOBU · 2026-09-05)\n       Secuencia de 60 cuadros (Seedance trabajado: color unificado + logo horneado) dibujada en canvas y\n       gobernada por el scroll. El logo cae por encima del nav e impacta en el panel; desde abajo nacen\n       MÉXICO / 2026 / fecha / lugar dentro de la pantalla. CTA y cuenta regresiva (#ooh-cd) siempre visibles.\n       Cuadros: https://oohsummit.com/media/oohsummit/hero/{1600|1280}/f_001..060.webp · geometría del panel medida en el video.\n       ============================================================================ -->\n  <style>\n    .oohs{overflow-x:clip !important;overflow-y:visible !important}   /* overflow-x:hidden convertía a .oohs en scroll container y anulaba el sticky del hero */\n    .oohs .oohh-scrolly,.oohh-scrolly{position:relative;height:300vh;padding:0;margin:0;background:#1a0c0d}\n    .oohh-stage{position:sticky;top:0;height:100svh;min-height:560px;background:#1a0c0d;color:#fff;overflow:visible}\n    .oohh-sentinel{position:absolute;top:0;left:0;width:1px;height:70vh;opacity:0;pointer-events:none;margin:0;padding:0;min-height:0;background:none;border:0}\n    .oohh-frame{position:absolute;inset:0;overflow:hidden}\n    .oohh-frame canvas{position:absolute;left:0;top:0;width:100%;height:100%;display:block}\n    .oohh-fade{position:absolute;inset:0;pointer-events:none;background:linear-gradient(to bottom,rgba(14,14,15,.5) 0,rgba(14,14,15,0) 130px)}\n    .oohh-hint{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);font-size:11px;letter-spacing:.18em;text-transform:uppercase;opacity:.85;display:flex;flex-direction:column;align-items:center;gap:8px;transition:opacity .3s;z-index:4;text-shadow:0 1px 8px rgba(0,0,0,.5);color:#fff}\n    .oohh-hint i{display:block;width:1px;height:34px;background:linear-gradient(to bottom,#fff,transparent);animation:oohhHint 1.6s ease-in-out infinite}\n    @keyframes oohhHint{0%{transform:scaleY(.2);transform-origin:top;opacity:0}40%{transform:scaleY(1);opacity:1}100%{transform:scaleY(1);transform-origin:bottom;opacity:0}}\n    .oohh-plane{position:absolute;left:0;top:0;width:2000px;height:1000px;transform-origin:0 0;pointer-events:none;will-change:transform}\n    #oohh-drop{position:fixed;z-index:1001;opacity:0;width:360px;height:296px}\n    #oohh-drop img{position:absolute;left:0;top:0;width:100%;height:100%;filter:drop-shadow(0 0 18px rgba(255,120,110,.6)) drop-shadow(0 0 60px rgba(255,80,70,.35))}\n    #oohh-clip{z-index:3;overflow:hidden}\n    .oohh-born{position:absolute;left:0;width:100%;text-align:center;color:#fff;\n      -webkit-mask-image:repeating-linear-gradient(90deg,transparent 0 4px,#000 4px 200px),repeating-linear-gradient(0deg,transparent 0 4px,#000 4px 250px);-webkit-mask-composite:source-in;\n      mask-image:repeating-linear-gradient(90deg,transparent 0 4px,#000 4px 200px),repeating-linear-gradient(0deg,transparent 0 4px,#000 4px 250px);mask-composite:intersect}\n    .oohh-born .ln{opacity:0;transform:translateY(420px);will-change:transform,opacity;text-shadow:0 0 22px rgba(255,140,130,.55),0 0 2px rgba(255,255,255,.6);font-family:'Archivo','Helvetica Neue',Arial,sans-serif}\n    .oohh-born .mx{font-weight:500;font-size:64px;letter-spacing:.42em;line-height:1;text-indent:.42em}\n    .oohh-born .yr{font-weight:900;font-size:110px;letter-spacing:-.02em;line-height:.95;margin-top:4px}\n    .oohh-born .dt{font-weight:700;font-size:44px;letter-spacing:.06em;margin-top:18px}\n    .oohh-born .pl{font-weight:500;font-size:30px;letter-spacing:.22em;text-transform:uppercase;margin-top:10px;opacity:.9}\n    .oohh-scan{position:absolute;left:50%;top:0;height:6px;width:0;transform:translateX(-50%);background:linear-gradient(90deg,rgba(255,240,236,0),#fff2ee 20%,#fff2ee 80%,rgba(255,240,236,0));box-shadow:0 0 18px 4px rgba(255,220,214,.7);opacity:0}\n    .oohh-below{position:absolute;left:0;right:0;z-index:2;display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 24px;top:var(--oohh-below-top,64%)}\n    .oohh-below .btns{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}\n    .oohs .oohh-below .cd{margin-top:16px;gap:clamp(16px,3vw,30px)}\n    .oohs .oohh-below .cd b{font-size:clamp(22px,2.6vw,30px)}\n    .oohs .oohh-below .cd small{color:rgba(255,255,255,.8)}\n    .oohh-below .btn-solid{position:relative}\n    .oohh-stage.oohh-final .oohh-below .btn-solid::after{content:\"\";position:absolute;inset:-1.5px;border-radius:inherit;box-shadow:0 0 0 2px rgba(228,54,46,.75);pointer-events:none;animation:oohhPulse 1.6s cubic-bezier(.16,1,.3,1) infinite}\n    @keyframes oohhPulse{0%{transform:scale(1);opacity:.9}100%{transform:scale(1.12,1.5);opacity:0}}\n    @media (prefers-reduced-motion: reduce){ .oohh-stage.oohh-final .oohh-below .btn-solid::after{animation:none;opacity:0} }\n    /* la barra de navegación recibe el golpe del logo */\n    .oohs .nav{transition:filter .12s}\n    .oohs .nav .oohh-shock{position:absolute;inset:0;pointer-events:none;background:radial-gradient(60% 200% at var(--oohh-sx,50%) 50%,rgba(255,225,220,.55),rgba(255,225,220,0) 70%);opacity:0}\n    .oohs .nav.oohh-hit{filter:brightness(1.35)}\n    .oohs .nav.oohh-hit .oohh-shock{animation:oohhShock .45s ease-out}\n    .oohs .nav.oohh-hit .links a{transform:translateX(var(--oohh-kick,0)) translateY(2px);transition:transform .18s cubic-bezier(.2,.9,.3,1.4)}\n    @keyframes oohhShock{0%{opacity:0}15%{opacity:1}100%{opacity:0}}\n    @media (max-width:720px){ .oohs .oohh-scrolly,.oohh-scrolly{height:260vh} .oohs .oohh-stage{height:auto;min-height:0} .oohs .oohh-stage .oohh-below .btns{gap:8px} .oohs .oohh-stage .oohh-below .btn{padding:11px 16px;font-size:13px;letter-spacing:0} .oohs .oohh-stage .oohh-below .cd{margin-top:12px;gap:14px} .oohs .oohh-stage .oohh-below .cd b{font-size:20px} }\n    @media (prefers-reduced-motion: reduce){ #oohh-drop{display:none} .oohh-hint{display:none} }\n  </style>\n\n  <section class=\"oohh-scrolly\" id=\"top\">\n    <div class=\"oohh-stage\" id=\"oohh-stage\" aria-label=\"OOH Summit México 2026\">\n      <div class=\"hero oohh-sentinel\" aria-hidden=\"true\"></div>\n      <div class=\"oohh-frame\"><canvas id=\"oohh-cv\" aria-hidden=\"true\"></canvas><div class=\"oohh-fade\" aria-hidden=\"true\"></div></div>\n      <div class=\"oohh-plane\" id=\"oohh-clip\" aria-hidden=\"true\">\n        <div class=\"oohh-scan\" id=\"oohh-scan\"></div>\n        <div class=\"oohh-born\" id=\"oohh-born\">\n          <div class=\"ln mx\">MÉXICO</div>\n          <div class=\"ln yr\">2026</div>\n          <div class=\"ln dt\">14 Y 15 DE OCTUBRE</div>\n          <div class=\"ln pl\">Polyforum Cultural Siqueiros · CDMX</div>\n        </div>\n      </div>\n      <h1 style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);margin:-1px\">OOH Summit México 2026 · 14 y 15 de octubre · Polyforum Cultural Siqueiros, Ciudad de México</h1>\n      <div class=\"oohh-below\" id=\"oohh-below\">\n        <div class=\"btns\">\n          <a href=\"#entradas\" class=\"btn btn-solid\">Reservar mi lugar →</a>\n          <a href=\"#evento\" class=\"btn btn-ghost\">Conocer el evento</a>\n        </div>\n        <div class=\"cd\" id=\"ooh-cd\">\n          <div><b data-u=\"d\">–</b><small>Días</small></div>\n          <div><b data-u=\"h\">–</b><small>Horas</small></div>\n          <div><b data-u=\"m\">–</b><small>Minutos</small></div>\n          <div><b data-u=\"s\">–</b><small>Segundos</small></div>\n        </div>\n      </div>\n      <div class=\"oohh-hint\" id=\"oohh-hint\" aria-hidden=\"true\">Desplazá para instalar la pantalla<i></i></div>\n    </div>\n  </section>\n  <div class=\"oohh-plane\" id=\"oohh-drop\" aria-hidden=\"true\"><img src=\"https://oohsummit.com/media/oohsummit/hero/logo-ooh-summit.png\" alt=\"\"></div>\n\n  <script>\n  (function(){\n    var $ = function(id){ return document.getElementById(id); };\n    var scrolly = document.querySelector('.oohh-scrolly'), stage = $('oohh-stage'), cv = $('oohh-cv'), drop = $('oohh-drop'), clip = $('oohh-clip'), born = $('oohh-born'), scan = $('oohh-scan'), hint = $('oohh-hint');\n    if (!scrolly || !stage || !cv || !cv.getContext) return;\n    var ctx = cv.getContext('2d');\n    var rm = window.matchMedia && matchMedia('(prefers-reduced-motion: reduce)').matches;\n    var nav = document.querySelector('.oohs .nav');\n    if (nav && !nav.querySelector('.oohh-shock')) { var sh = document.createElement('div'); sh.className = 'oohh-shock'; sh.setAttribute('aria-hidden', 'true'); nav.appendChild(sh); }\n    // ---- cuadros ----\n    var N = 60, FPS = 12, BASE = 'https://oohsummit.com/media/oohsummit/hero/';\n    var conn = navigator.connection || {}, lite = !!conn.saveData || /(^|slow-)2g|3g/.test(conn.effectiveType || '');\n    var SET = innerWidth > 720 ? '1600' : '1280', SRCW = +SET;\n    var STEP = (innerWidth <= 720 || lite) ? 2 : 1; // celular / conexión lenta: 1 de cada 2 cuadros, con fundido entre ellos\n    var SRC = []; for (var i = 1; i <= N; i++) SRC.push(BASE + SET + '/f_' + String(i).padStart(3, '0') + '.webp');\n    var imgs = new Array(N), loaded = 0;\n    function loadFrame(i){ return new Promise(function(res){ var im = new Image(); im.decoding = 'async'; im.onload = function(){ imgs[i] = im; loaded++; res(); }; im.onerror = res; im.src = SRC[i]; }); }\n    // ---- geometría del panel (normalizada al cuadro 16:9) ----\n    var QUAD = [[894.9/3840, 396.4/2160],[2516.3/3840, 544.5/2160],[2537.9/3840, 1209.4/2160],[896.4/3840, 1265.9/2160]];\n    var PANEL_W = (2537.9 - 894.9) / 3840, PANEL_TOP = 396.4 / 2160, PANEL_BOT = 1265.9 / 2160, VW = 16, VH = 9;\n    var SW = 2000, SH = 1000, LW = 0.26 * SW, LH = LW * 296 / 360, LCY = 0.30 * SH;\n    var K = { holdA: 4.097, logoFull: 4.367, end: 4.867 };\n    var P = { fallStart: 0.58, impact: 0.74, handoff: 0.79, scan: 0.76, bornStart: 0.78, bornEnd: 0.97, fin: 0.96 };\n    var lerp = function(a, b, t){ return a + (b - a) * t; }, clamp01 = function(x){ return Math.min(1, Math.max(0, x)); };\n    function tOf(p){\n      if (p <= P.fallStart) return lerp(0, K.holdA, p / P.fallStart);\n      if (p <= P.impact) return K.holdA;\n      if (p <= P.handoff) return lerp(K.holdA, K.logoFull, (p - P.impact) / (P.handoff - P.impact));\n      if (p <= P.bornEnd) return lerp(K.logoFull, K.end, (p - P.handoff) / (P.bornEnd - P.handoff));\n      return K.end;\n    }\n    function homography(src, dst){\n      var A = [], b = [], i;\n      for (i = 0; i < 4; i++) { var u = src[i][0], v = src[i][1], x = dst[i][0], y = dst[i][1]; A.push([u, v, 1, 0, 0, 0, -x * u, -x * v]); b.push(x); A.push([0, 0, 0, u, v, 1, -y * u, -y * v]); b.push(y); }\n      var n = 8, M = A.map(function(r, k){ return r.concat([b[k]]); });\n      for (var c = 0; c < n; c++) { var p = c; for (var r = c + 1; r < n; r++) if (Math.abs(M[r][c]) > Math.abs(M[p][c])) p = r; var tmp = M[c]; M[c] = M[p]; M[p] = tmp;\n        for (r = 0; r < n; r++) { if (r === c) continue; var f = M[r][c] / M[c][c]; for (var k = c; k <= n; k++) M[r][k] -= f * M[c][k]; } }\n      return M.map(function(r, k){ return r[n] / r[k]; });\n    }\n    var m3d = function(h){ return 'matrix3d(' + h[0] + ',' + h[3] + ',0,' + h[6] + ', ' + h[1] + ',' + h[4] + ',0,' + h[7] + ', 0,0,1,0, ' + h[2] + ',' + h[5] + ',0,1)'; };\n    var mobile = function(){ return innerWidth <= 720; };\n    var W = 0, H = 0, dpr = 1, imgRect = null, Hm = null, quadS = null;\n    function layout(){\n      var r;\n      if (mobile()) {\n        var vw = innerWidth, iw = vw * 0.92 / PANEL_W, ih = iw * VH / VW, panelH = (PANEL_BOT - PANEL_TOP) * ih, navH = (nav ? nav.offsetHeight : 66) + 14;\n        var need = navH + panelH + 210, stH = Math.max(need, screenH), top = navH;\n        stage.style.height = Math.round(stH) + 'px';\n        imgRect = { x: (vw - iw) / 2, y: top - PANEL_TOP * ih, w: iw, h: ih };\n      } else {\n        stage.style.height = '';\n        r = stage.getBoundingClientRect(); var s = Math.max(r.width / VW, r.height / VH), w = VW * s, h = VH * s;\n        imgRect = { x: (r.width - w) / 2, y: (r.height - h) / 2, w: w, h: h };\n      }\n      r = stage.getBoundingClientRect(); W = Math.round(r.width); H = Math.round(r.height); dpr = Math.min(2, window.devicePixelRatio || 1, Math.max(1, SRCW / imgRect.w));\n      if (cv.width !== Math.round(W * dpr) || cv.height !== Math.round(H * dpr)) { cv.width = Math.round(W * dpr); cv.height = Math.round(H * dpr); }\n      quadS = QUAD.map(function(q){ return [imgRect.x + q[0] * imgRect.w, imgRect.y + q[1] * imgRect.h]; });\n      Hm = homography([[0, 0], [SW, 0], [SW, SH], [0, SH]], quadS);\n      clip.style.transform = m3d(Hm);\n      var bottom = Math.max(quadS[2][1], quadS[3][1]); stage.style.setProperty('--oohh-below-top', (bottom + (mobile() ? 18 : 28)) + 'px');\n      if (hint) { if (mobile()) { var bl = $('oohh-below'), ht = Math.round(bottom + 18 + (bl ? bl.offsetHeight : 120) + 28); hint.style.bottom = 'auto'; hint.style.top = ht + 'px'; hint.style.display = (ht + 56 > stage.offsetHeight) ? 'none' : ''; } else { hint.style.top = ''; hint.style.bottom = ''; hint.style.display = ''; } }\n    }\n    var proj = function(u, v){ var h = Hm, w = h[6] * u + h[7] * v + 1; return [(h[0] * u + h[1] * v + h[2]) / w, (h[3] * u + h[4] * v + h[5]) / w]; };\n    function logoRect(dy, s){ var cx = SW / 2, cy = LCY + dy, hw = LW * s / 2, hh = LH * s / 2; return [[cx - hw, cy - hh], [cx + hw, cy - hh], [cx + hw, cy + hh], [cx - hw, cy + hh]]; }\n    var stRect = null;\n    function dropTransform(dy, s){ var st = stRect; var pts = logoRect(dy, s).map(function(p){ var q = proj(p[0], p[1]); return [q[0] + st.left, q[1] + st.top]; }); return m3d(homography([[0, 0], [360, 0], [360, 296], [0, 296]], pts)); }\n    born.style.top = (LCY + LH / 2 + 30) + 'px';\n    var lastDrawKey = '';\n    function nearestLoaded(i){ for (var d = 0; d < N; d++) { if (imgs[i - d]) return i - d; if (imgs[i + d]) return i + d; } return -1; }\n    function draw(t){\n      var f = Math.max(0, Math.min(N - 1, t * FPS)), i0 = Math.min(N - 1, Math.floor(f / STEP) * STEP), i1 = Math.min(N - 1, i0 + STEP), a = i1 > i0 ? (f - i0) / (i1 - i0) : 0;\n      var j0 = nearestLoaded(i0), j1 = nearestLoaded(i1);\n      var key = j0 + '|' + j1 + '|' + a.toFixed(2) + '|' + W + 'x' + H + '|' + (imgRect.x | 0) + ',' + (imgRect.y | 0);\n      if (key === lastDrawKey || j0 < 0) return; lastDrawKey = key;\n      ctx.setTransform(dpr, 0, 0, dpr, 0, 0); ctx.fillStyle = '#1a0c0d'; ctx.fillRect(0, 0, W, H);\n      ctx.globalAlpha = 1; ctx.drawImage(imgs[j0], imgRect.x, imgRect.y, imgRect.w, imgRect.h);\n      if (j1 !== j0 && a > 0.02) { ctx.globalAlpha = a; ctx.drawImage(imgs[j1], imgRect.x, imgRect.y, imgRect.w, imgRect.h); ctx.globalAlpha = 1; }\n      if (mobile()) { var yb = imgRect.y + imgRect.h, gb = ctx.createLinearGradient(0, yb - 110, 0, yb); gb.addColorStop(0, 'rgba(26,12,13,0)'); gb.addColorStop(1, '#1a0c0d'); ctx.fillStyle = gb; ctx.fillRect(0, yb - 110, W, 112); }\n    }\n    var easeOutCubic = function(t){ return 1 - Math.pow(1 - t, 3); }, easeInQuad = function(t){ return t * t; };\n    var hitDone = false, lines = Array.prototype.slice.call(born.querySelectorAll('.ln'));\n    function choreo(p){\n      if (p >= P.fallStart && p <= P.handoff && !rm) {\n        if (p <= P.impact) {\n          var k = clamp01((p - P.fallStart) / (P.impact - P.fallStart)), e = easeInQuad(k);\n          var kpx = SH / (quadS[3][1] - quadS[0][1]), restTopPage = quadS[0][1] + (LCY - LH / 2) / kpx, stTop = stRect.top;\n          var dyStart = -(restTopPage + stTop + LH / kpx + 14) * kpx, dy = dyStart * (1 - e), stretch = 1 + 0.10 * Math.sin(Math.PI * k);\n          drop.style.transform = dropTransform(dy, 1) + ' scale(1,' + stretch.toFixed(3) + ')'; drop.style.opacity = Math.min(1, k * 5).toFixed(3);\n          var c = proj(SW / 2, LCY + dy), st = stRect, cy = c[1] + st.top, cx = c[0] + st.left;\n          if (!hitDone && nav && cy > 10 && cy < 120) { hitDone = true; nav.style.setProperty('--oohh-sx', (cx / innerWidth * 100).toFixed(1) + '%'); nav.classList.add('oohh-hit');\n            Array.prototype.forEach.call(nav.querySelectorAll('.links a'), function(a){ var rr = a.getBoundingClientRect(); a.style.setProperty('--oohh-kick', (Math.sign(rr.left + rr.width / 2 - cx) * 6) + 'px'); });\n            setTimeout(function(){ nav.classList.remove('oohh-hit'); Array.prototype.forEach.call(nav.querySelectorAll('.links a'), function(a){ a.style.removeProperty('--oohh-kick'); }); }, 420); }\n        } else {\n          var k2 = clamp01((p - P.impact) / (P.handoff - P.impact)), s = 1 + 0.06 * Math.exp(-k2 * 7) * Math.cos(k2 * 14);\n          drop.style.transform = dropTransform(0, s); drop.style.opacity = (1 - k2).toFixed(3);\n        }\n      } else { drop.style.opacity = 0; if (p < P.fallStart) hitDone = false; }\n      if (p >= P.scan && p <= P.bornEnd) { var ks = clamp01((p - P.scan) / 0.08); scan.style.width = (SW * 0.46 * easeOutCubic(ks)) + 'px'; scan.style.top = (LCY + LH / 2 + 22) + 'px'; scan.style.opacity = (0.85 * (1 - clamp01((ks - 0.7) / 0.3))).toFixed(3); }\n      else scan.style.opacity = 0;\n      var kb = clamp01((p - P.bornStart) / (P.bornEnd - P.bornStart));\n      lines.forEach(function(el, i){ var ki = clamp01((kb - i * 0.14) / 0.58), e2 = easeOutCubic(ki); el.style.transform = 'translateY(' + ((1 - e2) * 420).toFixed(1) + 'px)'; el.style.opacity = Math.min(1, ki * 2.2).toFixed(3); });\n      stage.classList.toggle('oohh-final', p >= P.fin);\n      if (hint) hint.style.opacity = p < 0.04 ? 1 : 0;\n    }\n    var p = 0, ticking = false, forceP = null, pinMode = false;\n    function progress(){ var r = scrolly.getBoundingClientRect(); var travel = r.height - stage.offsetHeight; return travel > 0 ? clamp01(-r.top / travel) : 1; }\n    // Si el sticky no engancha (algún ancestro con overflow/transform), pineamos a mano con position:fixed\n    function checkSticky(){ if (pinMode || forceP !== null) return; var r = scrolly.getBoundingClientRect(), h = stage.offsetHeight; if (r.top < -24 && r.bottom > h + 24 && Math.abs(stage.getBoundingClientRect().top) > 6) pinMode = true; }\n    function pin(){ if (!pinMode) return; var r = scrolly.getBoundingClientRect(), h = stage.offsetHeight; var s = stage.style; s.left = '0'; s.right = '0'; s.width = 'auto';\n      if (r.top >= 0) { s.position = 'absolute'; s.top = '0'; s.bottom = 'auto'; } else if (r.bottom <= h) { s.position = 'absolute'; s.top = 'auto'; s.bottom = '0'; } else { s.position = 'fixed'; s.top = '0'; s.bottom = 'auto'; } }\n    var dirty = true, lastW = innerWidth, screenH = innerHeight;\n    function render(){ ticking = false; checkSticky(); pin(); if (dirty) { dirty = false; layout(); } stRect = stage.getBoundingClientRect(); p = rm ? 1 : (forceP !== null ? forceP : progress()); draw(tOf(p)); choreo(p); }\n    var req = function(){ if (!ticking) { ticking = true; requestAnimationFrame(render); } };\n    // En celular la barra de direcciones cambia el alto al scrollear: sólo re-maquetamos si cambia el ANCHO (o en desktop).\n    var onResize = function(){ if (innerWidth !== lastW || innerWidth > 720) { lastW = innerWidth; screenH = innerHeight; dirty = true; lastDrawKey = ''; req(); } };\n    addEventListener('scroll', req, { passive: true }); addEventListener('resize', onResize); addEventListener('orientationchange', function(){ setTimeout(function(){ lastW = -1; onResize(); }, 200); });\n    if (document.fonts && document.fonts.ready) document.fonts.ready.then(function(){ dirty = true; lastDrawKey = ''; req(); });\n    window.OOHH = { setP: function(v){ forceP = (v === null || v === undefined) ? null : clamp01(v); req(); } };\n    (function(){\n      render();\n      var use = [], i; for (i = 0; i < N; i += STEP) use.push(i); if (use[use.length - 1] !== N - 1) use.push(N - 1);\n      var order = use.filter(function(x, j){ return j > 0 && j % 4 === 0; }).concat(use.filter(function(x, j){ return j > 0 && j % 4; }));\n      var k = 0, total = use.length; function worker(){ if (k >= order.length) return Promise.resolve(); var i2 = order[k++]; return loadFrame(i2).then(function(){ if (loaded % 6 === 0 || loaded === total) { lastDrawKey = ''; req(); } return worker(); }); }\n      var rest = function(){ Promise.all([worker(), worker(), worker()]).then(function(){ lastDrawKey = ''; req(); }); };\n      loadFrame(0).then(function(){ lastDrawKey = ''; req(); (window.requestIdleCallback || function(f){ setTimeout(f, 200); })(rest, { timeout: 1200 }); });\n    })();\n  })();\n  </script>\n\n  <!-- STATS 2025 -->\n  <div class=\"stats\">\n    <div class=\"wrap\"><div class=\"row\">\n      <div><b>1.277</b><small>Inscriptos 2025</small></div>\n      <div><b>830</b><small>Asistentes / día</small></div>\n      <div><b><em>+</em>10</b><small>Países</small></div>\n      <div><b>16</b><small>Charlas</small></div>\n      <div><b>1.100</b><small>After party</small></div>\n    </div></div>\n  </div>\n\n  <!-- QUÉ ES -->\n\n  <!-- ============================================================================\n       EN VIVO · transmisión del evento (MOBU · 2026-10-13)\n       Iframe de YouTube (live_stream del canal UCdoAcWzEL20h9zXveevMxwg) cargado al acercarse a la sección: autoplay muteado\n       (los navegadores sólo permiten autoplay sin sonido) y botón «Activar sonido» vía IFrame API (postMessage).\n       Entrada: clip-path + escala sobre transform/opacity, una sola vez. Reduced motion: sólo fundido.\n       ============================================================================ -->\n  <section class=\"sec-ink ooh-live\" id=\"envivo\" aria-labelledby=\"ooh-live-title\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow ooh-live-eyebrow\"><span class=\"ooh-live-dot\" aria-hidden=\"true\"></span>En vivo</div>\n      <h2 class=\"title\" id=\"ooh-live-title\" style=\"margin-top:14px;\">Seguí en vivo cada una de las charlas del evento</h2>\n      <p class=\"lede\">Transmisión oficial desde el escenario principal del OOH Summit México 2026.</p>\n      <div class=\"ooh-live-frame\" id=\"ooh-live-frame\">\n        <div class=\"ooh-live-poster\" aria-hidden=\"true\">\n          <span class=\"ooh-live-badge\"><span class=\"ooh-live-dot\"></span>EN VIVO</span>\n          <span class=\"ooh-live-wait\" id=\"ooh-live-wait\">Conectando con la transmisión…</span>\n        </div>\n        <button type=\"button\" class=\"ooh-live-sound\" id=\"ooh-live-sound\" hidden>Activar sonido</button>\n      </div>\n      <p class=\"ooh-live-foot\">¿No ves la transmisión? <a href=\"https://www.youtube.com/@dinalightled/live\" target=\"_blank\" rel=\"noopener\">Abrila en YouTube →</a></p>\n    </div>\n  </section>\n\n  <section class=\"sec-ink\" id=\"evento\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow kick\">¿Qué es OOH Summit?</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">El evento OOH / DOOH más<br>importante de Latinoamérica</h2>\n      <p class=\"lede\">Un HUB regional donde convergen creatividad, innovación y tecnología aplicada al universo Out&nbsp;Of&nbsp;Home. Dos días de contenido, tecnología y negocios para toda la industria de la publicidad exterior de LatAm.</p>\n      <div class=\"feat\">\n        <div class=\"card\"><div class=\"n\">01</div><h4>Negocios en toda LATAM</h4><p>Networking, vínculos y oportunidades comerciales con los principales players de la región.</p></div>\n        <div class=\"card\"><div class=\"n\">02</div><h4>Charlas, paneles y demos</h4><p>Los referentes del sector compartiendo tendencias, casos y tecnología en vivo.</p></div>\n        <div class=\"card\"><div class=\"n\">03</div><h4>Buenas prácticas</h4><p>Espacios de diálogo para adoptar estándares y elevar la industria OOH/DOOH.</p></div>\n      </div>\n    </div>\n  </section>\n\n  <!-- QUÉ VAS A VER -->\n  <section class=\"sec-paper\" id=\"ver\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">Qué vas a ver</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">No es una feria más</h2>\n      <p class=\"lede\" style=\"color:var(--muted-ink);\">Las reuniones que mueven la aguja: ver, tocar y comparar antes de invertir.</p>\n      <div class=\"ooh-pillars\">\n        <div class=\"ooh-pillar\">\n          <div class=\"ooh-pillar-n\">01</div>\n          <h4>Contenido</h4>\n          <p>Charlas &amp; paneles con los referentes del OOH / DOOH de LatAm: casos, tendencias y tecnología.</p>\n        </div>\n        <div class=\"ooh-pillar\">\n          <div class=\"ooh-pillar-n\">02</div>\n          <h4>Tecnología</h4>\n          <p>DemoLabs en vivo: pantallas LED, medición de audiencias y proof-of-play para tocar y comparar.</p>\n        </div>\n        <div class=\"ooh-pillar\">\n          <div class=\"ooh-pillar-n\">03</div>\n          <h4>Negocio</h4>\n          <p>Networking B2B real entre productoras, medios, marcas y equipos comerciales.</p>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <!-- EXPERIENCIA / FOROS -->\n  <section class=\"sec-paper\" id=\"experiencia\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">La experiencia 2026</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Dos foros, una<br>industria completa</h2>\n      <div class=\"foros\">\n        <div class=\"foro red\">\n          <div class=\"tag\">Foro de la Juventud</div>\n          <h3>Charlas &amp; contenido</h3>\n          <ul>\n            <li>380 personas de aforo</li>\n            <li>16 charlas de 40 min cada una</li>\n            <li>Paneles y debates con especialistas</li>\n            <li>Entrevistas mano a mano</li>\n            <li>Workshops técnicos con demos</li>\n            <li>Streaming en vivo (+8 hs)</li>\n          </ul>\n        </div>\n        <div class=\"foro dark\">\n          <div class=\"tag\">Foro Universal</div>\n          <h3>Stands &amp; networking</h3>\n          <ul>\n            <li>1.180 m² · hasta 500 personas</li>\n            <li>16 stands con pantallas LED</li>\n            <li>12 salas VIP lounge</li>\n            <li>DemoLabs: demos y reuniones 1:1</li>\n            <li>Open Space para networking B2B</li>\n            <li>Coffee breaks, catering y cocktail de cierre</li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <!-- PROGRAMA 2026 -->\n  <section class=\"sec-ink\" id=\"programa\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow kick\">Programa 2026</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Dos días de contenido de primer nivel</h2>\n      <p class=\"lede\">Keynotes · paneles · workshops · DemoLabs en vivo · streaming (+8&nbsp;hs).</p>\n\n      <!-- ====== AGENDA: se lee del módulo Eventos de MOBU (Eventos → Agenda, actividades PUBLICADAS) ======\n           Si la agenda no carga o no hay actividades publicadas, queda visible el bloque \"Próximamente\". -->\n      <div class=\"ooh-soon\" id=\"ooh-agenda-soon\">\n        <span class=\"ooh-soon-badge\">Próximamente</span>\n        <h3 class=\"ooh-soon-t\">Estamos cerrando la agenda</h3>\n        <p class=\"ooh-soon-p\">Dos jornadas con keynotes, paneles, workshops y DemoLabs en vivo. Publicamos el detalle día por día muy pronto. Dejanos tu email y te la mandamos apenas esté lista.</p>\n        <a href=\"#novedades\" class=\"cta ooh-soon-cta\">Recibir la agenda por email →</a>\n      </div>\n      <div class=\"ooh-agenda\" id=\"ooh-agenda\" hidden></div>\n      <p class=\"ooh-note\" id=\"ooh-agenda-note\" hidden>Programa sujeto a cambios.</p>\n    </div>\n  </section>\n\n  <!-- VENUE -->\n  <section class=\"sec-smoke\" id=\"venue\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">El venue</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Polyforum Cultural<br>Siqueiros</h2>\n      <p class=\"lede\" style=\"color:var(--muted-ink);\">Av. Insurgentes Sur 701, Nápoles, Ciudad de México. Un ícono cultural para un evento a la altura de la industria.</p>\n      <div class=\"venue-grid\">\n        <div class=\"venue-plano\">\n          <img src=\"https://oohsummit.com/media/oohsummit/plano-foro-1.jpg\" alt=\"Plano del Foro Universal — OOH Summit 2026, Polyforum Cultural Siqueiros, CDMX\" loading=\"lazy\"\n               onerror=\"this.closest('.venue-plano').style.display='none'\">\n        </div>\n        <div class=\"venue\">\n          <div><b>1.180</b><small>m² de superficie</small></div>\n          <div><b>700</b><small>Capacidad máxima</small></div>\n          <div><b>16</b><small>Stands con LED</small></div>\n          <div><b>12</b><small>Salas VIP lounge</small></div>\n        </div>\n      </div>\n    </div>\n  </section>\n\n  <!-- AUDIENCIA -->\n  <section class=\"sec-ink\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow kick\">La audiencia</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Quién asiste al Summit</h2>\n      <div class=\"aud\">\n        <div><b>80%</b><h4>Decisores &amp; especialistas</h4><p>asisten cada edición del OOH Summit.</p></div>\n        <div><b>40%</b><h4>C-Level · VP · Director</h4><p>Alta jerarquía, poder de decisión.</p></div>\n        <div><b>40%</b><h4>Especialistas &amp; Media</h4><p>Expertos del sector y medios.</p></div>\n        <div><b>20%</b><h4>Técnicos &amp; Industria</h4><p>Perfil operativo y técnico.</p></div>\n      </div>\n    </div>\n  </section>\n\n  <!-- VIDEOS -->\n  <section class=\"sec-smoke\" id=\"videos\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">Videos</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Reviví la experiencia</h2>\n      <p class=\"lede\" style=\"color:var(--muted-ink);\">La edición anterior reunió a la industria OOH / DOOH de toda la región durante dos días. Así se vivió.</p>\n      <div class=\"vids\">\n        <div class=\"vid\"><video class=\"ooh-hovervid\" data-mobu-media=\"exp.video1\" data-mobu-poster=\"exp.video1poster\" src=\"https://oohsummit.com/media/oohsummit/video-01.mp4\" muted loop playsinline preload=\"metadata\" poster=\"https://oohsummit.com/media/oohsummit/img-3x-1.jpg\" tabindex=\"-1\" disablepictureinpicture controlslist=\"nodownload noplaybackrate nofullscreen\"></video><span class=\"ooh-vid-hint\">▶ Pasá el cursor para reproducir</span></div>\n        <div class=\"vid\"><video class=\"ooh-hovervid\" data-mobu-media=\"exp.video2\" data-mobu-poster=\"exp.video2poster\" src=\"https://oohsummit.com/media/oohsummit/video-02.mp4\" muted loop playsinline preload=\"metadata\" poster=\"https://oohsummit.com/media/oohsummit/img-3x-2.jpg\" tabindex=\"-1\" disablepictureinpicture controlslist=\"nodownload noplaybackrate nofullscreen\"></video><span class=\"ooh-vid-hint\">▶ Pasá el cursor para reproducir</span></div>\n      </div>\n    </div>\n  </section>\n\n  <!-- EDICIONES ANTERIORES (galería con fotos reales) -->\n  <section class=\"sec-paper\" id=\"ediciones\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">Ediciones anteriores</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">OOH Summit en acción</h2>\n      <p class=\"lede\" style=\"color:var(--muted-ink);\">Escenario principal, DemoLabs, stands con pantallas LED, networking B2B y el after party de la industria.</p>\n      <div class=\"ooh-gallery\">\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-3.jpg\"><span class=\"ooh-shot-l\">Escenario principal</span></div>\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-4.jpg\"><span class=\"ooh-shot-l\">Auditorio en vivo</span></div>\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-5.jpg\"><span class=\"ooh-shot-l\">DemoLabs</span></div>\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-9.jpg\"><span class=\"ooh-shot-l\">Networking</span></div>\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-10.jpg\"><span class=\"ooh-shot-l\">Stands LED</span></div>\n        <div class=\"ooh-shot\" data-bg=\"https://oohsummit.com/media/oohsummit/img-3x-11.jpg\"><span class=\"ooh-shot-l\">After party</span></div>\n      </div>\n      <div class=\"ooh-recap\">\n        <div><b>1.277</b><small>Inscriptos</small></div>\n        <div><b>830</b><small>Asistentes / día</small></div>\n        <div><b>+10</b><small>Países</small></div>\n        <div><b>1.100</b><small>After party</small></div>\n      </div>\n    </div>\n  </section>\n\n  <!-- SPONSORS -->\n  <section class=\"sec-ink\" id=\"sponsors\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow kick\">Quiénes lo hacen posible</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Sponsors &amp; partners</h2>\n      <p class=\"lede\">Las marcas líderes del ecosistema OOH / DOOH que hacen posible el Summit edición tras edición.</p>\n      <!-- La grilla se llena con los sponsors reales del módulo (endpoint público). Si no hay / falla, quedan los placeholders. -->\n      <div class=\"ooh-sponsors\" id=\"ooh-sponsors\">\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n        <div class=\"ooh-tile\">Tu marca aquí</div>\n      </div>\n      <div class=\"ooh-sponsor-cta\">\n        <div class=\"ooh-sponsor-copy\">\n          <h3>¿Querés exponer tu marca ante +830 decisores por día?</h3>\n          <p>Sumate como sponsor o partner y conectá con los principales players de la industria OOH / DOOH de LatAm.</p>\n        </div>\n        <a class=\"btn btn-solid\" id=\"ooh-sponsor-btn\" href=\"#sponsors\" role=\"button\">Quiero ser sponsor →</a>\n      </div>\n    </div>\n  </section>\n\n  <!-- ENTRADAS (widget MOBU) -->\n  <section class=\"tk\" id=\"entradas\">\n    <div class=\"wrap\">\n      <div class=\"head\">\n        <div class=\"eyebrow kick\">Entradas</div>\n        <h2 class=\"title\" style=\"margin-top:14px;\">Asegurá tu lugar</h2>\n        <p class=\"lede\" style=\"margin:16px auto 0; color:var(--muted);\">14 y 15 de Octubre · Polyforum Cultural Siqueiros, CDMX. Cupo limitado a 700 lugares.</p>\n      </div>\n      <div id=\"ooh-tickets\">\n        <div class=\"tk-msg\">Cargando entradas…</div>\n      </div>\n      <p class=\"tk-note\">Pago seguro · Recibís tu entrada con código QR por email para acreditarte en el acceso.</p>\n    </div>\n  </section>\n\n  <!-- FAQ -->\n  <section class=\"sec-paper\" id=\"faq\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow\" style=\"color:var(--red);\">FAQ</div>\n      <h2 class=\"title\" style=\"margin-top:14px;\">Preguntas frecuentes</h2>\n      <div class=\"ooh-faq\">\n        <details class=\"ooh-q\">\n          <summary>¿Qué incluye la entrada?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Acceso a los dos días del evento, todas las charlas y paneles, los DemoLabs, las áreas de networking y sponsors, y la app de contactos del evento.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Puedo comprar varias entradas juntas?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Sí. Elegí la cantidad en el checkout: se cobran todas en un solo pago y recibís un e-ticket con QR por cada una.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Dónde es?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>En el Polyforum Cultural Siqueiros, Av. Insurgentes Sur 701, Col. Nápoles, Ciudad de México.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Tengo un código de descuento o invitación?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Ingresalo en el campo \"Código\" del checkout: se aplica el descuento (o la cortesía 100%) automáticamente antes de pagar.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Puedo transferir mi entrada?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Sí. Si no podés asistir, podés transferir tu entrada a otra persona contactando al organizador antes del evento.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Emiten factura?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Sí. Podés solicitar tu factura cargando tus datos fiscales al momento de comprar la entrada. La factura se emite por el monto final que abonás (con el descuento del código ya aplicado).</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Cómo recibo mi entrada?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Apenas se acredita el pago te llega un e-ticket con código QR por email. También podés reacceder a tus entradas cuando quieras desde <b>\"Mis entradas\"</b> en la barra de navegación.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Cuándo se anuncian la agenda y los speakers?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Se confirman próximamente. Dejá tu nombre y email en <b>\"Recibir novedades\"</b> y te avisamos la agenda, los speakers y los early birds antes que a nadie.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Qué medios de pago aceptan?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>El pago es online y seguro con tarjeta de crédito o débito a través de nuestra pasarela. Se cobra en un solo pago y recibís la confirmación al instante.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿En qué idioma es el evento?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Todo el contenido —charlas, paneles y DemoLabs— es en español, pensado para toda la industria OOH / DOOH de Latinoamérica.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Puedo ser sponsor o expositor?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Sí. Sumate como sponsor o partner y conectá con los principales players de la región. Escribinos desde el botón <b>\"Quiero ser sponsor\"</b> en la sección Sponsors y te enviamos la propuesta.</p></div>\n        </details>\n        <details class=\"ooh-q\">\n          <summary>¿Hay descuentos para grupos o empresas?<span class=\"ooh-q-i\"></span></summary>\n          <div class=\"ooh-a\"><p>Sí. Para compras corporativas o de equipos escribinos y te pasamos un código con tarifa especial que aplicás directamente en el checkout.</p></div>\n        </details>\n      </div>\n    </div>\n  </section>\n\n  <!-- NOVEDADES (captura de email → CRM lead) -->\n  <section class=\"sec-ink ooh-news\" id=\"novedades\">\n    <div class=\"wrap\">\n      <div class=\"eyebrow kick\">Novedades del evento</div>\n      <h2 data-mobu-text=\"nov.titulo\">Enterate primero</h2>\n      <p class=\"lede\" data-mobu-text=\"nov.subtitulo\">Agenda, speakers confirmados, sponsors y early birds: te avisamos por email antes que a nadie.</p>\n      <form class=\"ooh-newsform\" id=\"ooh-news-form\" novalidate>\n        <input id=\"ooh-news-name\" type=\"text\" name=\"fname\" placeholder=\"Nombre\" autocomplete=\"given-name\" aria-label=\"Nombre\" required>\n        <input id=\"ooh-news-last\" type=\"text\" name=\"lname\" placeholder=\"Apellido\" autocomplete=\"family-name\" aria-label=\"Apellido\" required>\n        <input id=\"ooh-news-email\" type=\"email\" name=\"email\" placeholder=\"tu@email.com\" autocomplete=\"email\" aria-label=\"Tu email\" required>\n        <button type=\"submit\" id=\"ooh-news-btn\" data-mobu-text=\"nov.boton\">Recibir novedades</button>\n      </form>\n      <div class=\"ooh-news-msg\" id=\"ooh-news-msg\"></div>\n      <p class=\"ooh-news-fine\">Sin spam. Sólo novedades del OOH Summit 2026. Te podés dar de baja cuando quieras.</p>\n    </div>\n  </section>\n\n  <!-- CTA FLOTANTE (slide-in) -->\n  <div class=\"ooh-slidecta\" id=\"ooh-slidecta\" data-mobu-visible=\"slide.visible\">\n    <span class=\"sc-x\" id=\"ooh-sc-x\" aria-label=\"Cerrar\">✕</span>\n    <b>¿Todavía no tenés tu lugar?</b>\n    <span>Recibí la agenda, los speakers y los early birds del OOH Summit 2026.</span>\n    <a href=\"#novedades\" id=\"ooh-sc-go\">Recibir novedades →</a>\n  </div>\n\n  <!-- FOOTER -->\n  <footer class=\"foot\">\n    <div class=\"wrap\">\n      <span style=\"display:inline-block;text-align:center;\">\n        <span class=\"ooh-logo-img\" style=\"width:118px;margin:0 auto;\" role=\"img\" aria-label=\"OOH Summit\"></span>\n        <span style=\"display:block;margin-top:8px;font-size:11px;font-weight:500;letter-spacing:.28em;color:var(--muted);\">CIUDAD DE MÉXICO</span>\n      </span>\n      <div class=\"place\">14 y 15 de Octubre · 2026</div>\n      <div class=\"contact\">Consultas: <a href=\"mailto:info@oohsummit.com\">info@oohsummit.com</a></div>\n      <div class=\"by\">Ticketera y acreditación con tecnología MOBU</div>\n    </div>\n  </footer>\n\n  <!-- SPONSOR DIALOG (formulario \"Quiero ser sponsor\" del CRM) -->\n  <div class=\"ov\" id=\"ooh-sp-ov\" aria-hidden=\"true\">\n    <div class=\"dlg dlg-wide\" role=\"dialog\" aria-labelledby=\"ooh-sp-t\">\n      <span class=\"x\" id=\"ooh-sp-x\" aria-label=\"Cerrar\">✕</span>\n      <h4 id=\"ooh-sp-t\">Quiero ser sponsor</h4>\n      <p class=\"sub\">Contanos sobre tu marca y te contactamos con la propuesta de sponsoreo del OOH Summit 2026.</p>\n      <form id=\"ooh-sp-form\" novalidate>\n        <div class=\"g2\">\n          <div><label for=\"ooh-sp-fn\">Nombre</label><input id=\"ooh-sp-fn\" type=\"text\" autocomplete=\"given-name\" required></div>\n          <div><label for=\"ooh-sp-ln\">Apellido</label><input id=\"ooh-sp-ln\" type=\"text\" autocomplete=\"family-name\" required></div>\n          <div><label for=\"ooh-sp-job\">Cargo</label><input id=\"ooh-sp-job\" type=\"text\" autocomplete=\"organization-title\" placeholder=\"Ej. Marketing Manager\" required></div>\n          <div><label for=\"ooh-sp-em\">Email</label><input id=\"ooh-sp-em\" type=\"email\" autocomplete=\"email\" placeholder=\"tu@empresa.com\" required></div>\n          <div><label for=\"ooh-sp-ph\">Teléfono</label><input id=\"ooh-sp-ph\" type=\"tel\" autocomplete=\"tel\" placeholder=\"+54 9 11 …\" required></div>\n          <div><label for=\"ooh-sp-co\">Marca / Empresa</label><input id=\"ooh-sp-co\" type=\"text\" autocomplete=\"organization\" required></div>\n          <div><label for=\"ooh-sp-ct\">País</label><input id=\"ooh-sp-ct\" type=\"text\" autocomplete=\"country-name\" required></div>\n          <div><label for=\"ooh-sp-web\">Sitio web</label><input id=\"ooh-sp-web\" type=\"url\" autocomplete=\"url\" placeholder=\"https://…\"></div>\n          <div><label for=\"ooh-sp-ig\">Instagram</label><input id=\"ooh-sp-ig\" type=\"text\" placeholder=\"@marca\"></div>\n          <div><label for=\"ooh-sp-li\">LinkedIn</label><input id=\"ooh-sp-li\" type=\"text\" placeholder=\"linkedin.com/company/…\"></div>\n          <div><label for=\"ooh-sp-kind\">Tipo de participación</label>\n            <select id=\"ooh-sp-kind\" required>\n              <option value=\"\">Elegí una opción…</option>\n              <option>Sponsor</option><option>Expositor</option><option>Partner / Media partner</option><option>Todavía no lo sé</option>\n            </select></div>\n          <div><label for=\"ooh-sp-bud\">Presupuesto estimado (USD)</label>\n            <select id=\"ooh-sp-bud\">\n              <option value=\"\">A definir</option>\n              <option>Hasta 5.000</option><option>5.000 – 15.000</option><option>15.000 – 30.000</option><option>Más de 30.000</option>\n            </select></div>\n        </div>\n        <label for=\"ooh-sp-msg\">Contanos qué buscás <span style=\"text-transform:none;letter-spacing:0;font-weight:500\">(opcional)</span></label>\n        <textarea id=\"ooh-sp-msg\" rows=\"3\" placeholder=\"Objetivos, formato que te interesa, fechas…\"></textarea>\n        <div aria-hidden=\"true\" style=\"position:absolute;left:-9999px;top:-9999px\"><label for=\"ooh-sp-hp\">No completar</label><input id=\"ooh-sp-hp\" type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\"></div>\n        <button type=\"submit\" class=\"go\" id=\"ooh-sp-go\">Enviar → te contactamos en 48 h</button>\n        <div class=\"err\" id=\"ooh-sp-err\"></div>\n        <div class=\"ok\" id=\"ooh-sp-ok\" style=\"display:none\"></div>\n      </form>\n    </div>\n  </div>\n\n  <!-- BUY DIALOG -->\n  <div class=\"ov\" id=\"ooh-ov\">\n    <div class=\"dlg\">\n      <span class=\"x\" id=\"ooh-x\">✕</span>\n      <h4 id=\"ooh-dlg-t\">Tu entrada</h4>\n      <p class=\"sub\" id=\"ooh-dlg-s\">Completá tus datos para continuar.</p>\n      <label>Nombre y apellido</label>\n      <input id=\"ooh-name\" type=\"text\" autocomplete=\"name\" placeholder=\"Juan Pérez\">\n      <label>Email</label>\n      <input id=\"ooh-email\" type=\"email\" autocomplete=\"email\" placeholder=\"juan@empresa.com\">\n      <label id=\"ooh-company-label\">Empresa (opcional)</label>\n      <input id=\"ooh-company\" type=\"text\" autocomplete=\"organization\" placeholder=\"Tu empresa\">\n      <label>Cantidad</label>\n      <div class=\"qty\">\n        <button type=\"button\" id=\"ooh-qminus\" aria-label=\"Menos\">−</button>\n        <input id=\"ooh-qty\" type=\"text\" inputmode=\"numeric\" value=\"1\" readonly>\n        <button type=\"button\" id=\"ooh-qplus\" aria-label=\"Más\">+</button>\n        <span class=\"qmax\" id=\"ooh-qmax\"></span>\n      </div>\n      <label>Código de descuento o invitación (opcional)</label>\n      <input id=\"ooh-code\" type=\"text\" autocomplete=\"off\" placeholder=\"Ej. OOH-XXXXXXXX\" style=\"text-transform:uppercase\">\n      <details style=\"margin-top:14px\">\n        <summary style=\"cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid rgba(255,255,255,.22);border-radius:12px;background:rgba(255,255,255,.06);font-size:14px;font-weight:700;color:#fff\"><span style=\"display:inline-flex;width:22px;height:22px;border-radius:999px;background:#e5322d;color:#fff;align-items:center;justify-content:center;font-size:16px;line-height:1\">＋</span><span>Facturar a otro nombre <span style=\"font-weight:500;opacity:.75\">(opcional)</span></span><span style=\"margin-left:auto;font-size:12px;font-weight:500;opacity:.75\">Razón social · Tax ID · domicilio</span></summary>\n        <div style=\"margin-top:6px\">\n          <label>Razón social / Nombre en la factura</label>\n          <input id=\"ooh-bname\" type=\"text\" autocomplete=\"off\" placeholder=\"Empresa S.A. / Nombre y apellido\">\n          <label>Email de facturación</label>\n          <input id=\"ooh-bemail\" type=\"email\" autocomplete=\"off\" placeholder=\"facturacion@empresa.com\">\n          <label>Tax ID / EIN / CUIT (opcional)</label>\n          <input id=\"ooh-btax\" type=\"text\" autocomplete=\"off\" placeholder=\"Identificación fiscal\">\n          <label>Domicilio fiscal (opcional)</label>\n          <input id=\"ooh-baddr\" type=\"text\" autocomplete=\"off\" placeholder=\"Dirección fiscal\">\n        </div>\n      </details>\n      <div class=\"tot\" id=\"ooh-tot\" style=\"display:none;\">\n        <div class=\"totline\"><span>Subtotal</span><span class=\"v\" id=\"ooh-sub-v\">—</span></div>\n        <div class=\"totline disc\" id=\"ooh-disc-row\" style=\"display:none;\"><span id=\"ooh-disc-l\">Descuento</span><span class=\"v\" id=\"ooh-disc-v\">—</span></div>\n        <div class=\"totline grand\"><span>Total</span><b id=\"ooh-tot-v\">—</b></div>\n        <div class=\"codemsg\" id=\"ooh-code-msg\"></div>\n      </div>\n      <button class=\"go\" id=\"ooh-go\">Continuar</button>\n      <div class=\"err\" id=\"ooh-err\"></div>\n      <div class=\"ok\" id=\"ooh-ok\" style=\"display:none;\"></div>\n    </div>\n  </div>\n\n  <!-- GRACIAS DIALOG (post-pago) -->\n  <div class=\"ov\" id=\"ooh-ty-ov\">\n    <div class=\"dlg\">\n      <div class=\"ty\">\n        <div class=\"chk\">✓</div>\n        <h4 id=\"ooh-ty-t\">¡Listo! Tu lugar está confirmado</h4>\n        <p id=\"ooh-ty-p\">Te enviamos tu entrada con código QR por email. Presentalo en el acceso para acreditarte.</p>\n        <div id=\"ooh-ty-qr\" class=\"qrbox\" style=\"display:none;\"><img alt=\"Tu entrada QR — OOH Summit 2026\"></div>\n        <div id=\"ooh-ty-tks\" class=\"tks\"></div>\n        <div class=\"acts\">\n          <a id=\"ooh-ty-cal\" class=\"a-primary\" target=\"_blank\" rel=\"noopener\" href=\"#\">\uD83D\uDDD3 Agendar en Google Calendar</a>\n          <a id=\"ooh-ty-view\" class=\"a-ghost\" target=\"_blank\" rel=\"noopener\" href=\"#\" style=\"display:none;\">Ver / descargar mi entrada</a>\n          <button id=\"ooh-ty-x\" class=\"a-ghost\" type=\"button\">Volver al sitio</button>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- PORTAL \"MIS ENTRADAS\" (cuenta del comprador) -->\n  <div class=\"ov\" id=\"ooh-portal-ov\">\n    <div class=\"dlg\">\n      <span class=\"x\" id=\"ooh-p-x\">✕</span>\n      <div id=\"ooh-p-auth\">\n        <h4 id=\"ooh-p-title\">Mis entradas</h4>\n        <p class=\"sub\" id=\"ooh-p-sub\">Ingresá para ver, descargar y reenviar tus entradas.</p>\n        <div id=\"ooh-p-namewrap\" style=\"display:none;\">\n          <label>Nombre y apellido</label>\n          <input id=\"ooh-p-name\" type=\"text\" autocomplete=\"name\" placeholder=\"Juan Pérez\">\n        </div>\n        <label>Email</label>\n        <input id=\"ooh-p-email\" type=\"email\" autocomplete=\"email\" placeholder=\"juan@empresa.com\">\n        <label>Contraseña</label>\n        <input id=\"ooh-p-pass\" type=\"password\" autocomplete=\"current-password\" placeholder=\"Mínimo 8 caracteres\">\n        <button class=\"go\" id=\"ooh-p-go\" style=\"margin-top:16px;\">Ingresar</button>\n        <div class=\"err\" id=\"ooh-p-msg\"></div>\n        <a href=\"#\" id=\"ooh-p-forgot\" class=\"pforgot\">¿Olvidaste tu contraseña?</a>\n        <div class=\"pdiv\"><span>o</span></div>\n        <button type=\"button\" class=\"gbtn\" id=\"ooh-p-google\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" aria-hidden=\"true\"><path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"/><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"/><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"/><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"/></svg>\n          Continuar con Google\n        </button>\n        <p style=\"text-align:center;margin-top:14px;font-size:13px;color:var(--muted);\">\n          <span id=\"ooh-p-toggle-t\">¿No tenés cuenta?</span>\n          <a href=\"#\" id=\"ooh-p-toggle\" style=\"color:var(--red-bright);font-weight:700;\">Registrate</a>\n        </p>\n      </div>\n      <div id=\"ooh-p-in\" style=\"display:none;\">\n        <h4>Hola <span id=\"ooh-p-who\"></span> \uD83D\uDC4B</h4>\n        <p class=\"sub\">Tus entradas del OOH Summit 2026. Descargá el QR o reenviá cada una.</p>\n        <div id=\"ooh-p-tickets\" class=\"tks\"></div>\n        <button class=\"a-ghost\" id=\"ooh-p-logout\" type=\"button\" style=\"margin-top:16px;width:100%;\">Cerrar sesión</button>\n      </div>\n      <div id=\"ooh-p-reset\" style=\"display:none;\">\n        <h4>Nueva contraseña</h4>\n        <p class=\"sub\">Elegí una nueva contraseña para tu cuenta del OOH Summit.</p>\n        <label>Nueva contraseña</label>\n        <input id=\"ooh-p-rpass\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Mínimo 8 caracteres\">\n        <label>Repetir contraseña</label>\n        <input id=\"ooh-p-rpass2\" type=\"password\" autocomplete=\"new-password\" placeholder=\"Repetí la contraseña\">\n        <button class=\"go\" id=\"ooh-p-rgo\" style=\"margin-top:16px;\">Guardar contraseña</button>\n        <div class=\"err\" id=\"ooh-p-rmsg\"></div>\n        <a href=\"#\" id=\"ooh-p-rback\" class=\"pforgot\" style=\"margin-top:14px;\">← Volver a iniciar sesión</a>\n      </div>\n    </div>\n  </div>\n\n</div>\n\n<script>\n(function(){\n  var API = \"https://api.mobu.market\";\n  var EDITION = \"ee4e6f9b-9321-4a10-b49d-918dab78bbc8\";\n  // Formularios del CRM (MOBU → CRM → Formularios): Novedades y Quiero ser sponsor.\n  var NEWS_FORM = \"50ac8da62cc041dfa443b962860bee08\";\n  var SPONSOR_FORM = \"477173f776de4886b11dc9e1afd6ed25\";\n  var MAX_QTY = 10; // tope por compra\n  var EV = window.OOH_EV || {};\n  var T = window.oohTrack || {viewItem:function(){},beginCheckout:function(){},lead:function(){},stash:function(){},purchaseFromStash:function(){return null;}};\n\n  /* ----- countdown ----- */\n  var target = new Date(\"2026-10-14T09:00:00-06:00\").getTime();\n  function tick(){\n    var d = target - Date.now(); if (d < 0) d = 0;\n    var s = Math.floor(d/1000);\n    var map = { d:Math.floor(s/86400), h:Math.floor(s%86400/3600), m:Math.floor(s%3600/60), s:s%60 };\n    var box = document.getElementById(\"ooh-cd\"); if(!box) return;\n    for (var k in map){ var el = box.querySelector('[data-u=\"'+k+'\"]'); if(el) el.textContent = (k===\"d\"?map[k]:String(map[k]).padStart(2,\"0\")); }\n  }\n  tick(); setInterval(tick, 1000);\n\n  /* ----- nav fija ----- */\n  var nav = document.querySelector('.oohs .nav');\n  var hero = document.querySelector('.oohs .hero');\n  function setScrolled(on){\n    if(!nav) return;\n    nav.classList.toggle('scrolled', on);\n    if(on) nav.style.setProperty('background','rgba(14,14,15,.92)','important');\n    else nav.style.removeProperty('background');\n  }\n  if(nav && hero && 'IntersectionObserver' in window){\n    new IntersectionObserver(function(es){ setScrolled(es[0].intersectionRatio < 0.65); }, { threshold:[0,0.65,1] }).observe(hero);\n  } else if(nav){\n    var os=function(){ setScrolled((window.scrollY||document.documentElement.scrollTop||0) > 40); };\n    os(); window.addEventListener('scroll', os, { passive:true });\n  }\n\n  /* ----- sponsor lead ----- */\n  var spBtn = document.getElementById(\"ooh-sponsor-btn\");\n  if(spBtn) spBtn.addEventListener(\"click\", function(){ T.lead(\"sponsor\"); });\n\n  /* ----- money ----- */\n  function money(v, cur){\n    var n = Number(v)||0;\n    var iso = (!cur || cur==='DOLAR' || cur==='DOLARES' || cur==='USD') ? 'USD' : cur;\n    try { return new Intl.NumberFormat('es-MX',{style:'currency',currency:iso,maximumFractionDigits:0}).format(n); }\n    catch(e){ return (iso==='USD'?'US$ ':(cur||'USD')+' ')+n.toLocaleString('es-MX'); }\n  }\n\n  /* ----- load ticket types ----- */\n  var container = document.getElementById(\"ooh-tickets\");\n  var CURRENCY = \"USD\";   var COMPANY_REQUIRED = false; // lo define la edición (empresa obligatoria por edición en MOBU)\n  function load(){\n    fetch(API+\"/api/public/events/editions/\"+EDITION, {headers:{Accept:\"application/json\"}})\n      .then(function(r){ if(!r.ok) throw new Error(r.status); return r.json(); })\n      .then(function(ed){\n        CURRENCY = ed.currency || \"USD\";\n        COMPANY_REQUIRED = !!ed.companyRequired;\n        try{ var cl=document.getElementById(\"ooh-company-label\"), ci=document.getElementById(\"ooh-company\");\n          if(cl) cl.textContent = COMPANY_REQUIRED ? \"Empresa\" : \"Empresa (opcional)\";\n          if(ci){ ci.required = COMPANY_REQUIRED; ci.placeholder = COMPANY_REQUIRED ? \"Tu empresa (obligatoria)\" : \"Tu empresa\"; }\n        }catch(e){}\n        try{ var _cc=(CURRENCY||\"USD\").toUpperCase(); if(_cc===\"DOLAR\"||_cc===\"DOLARES\"||_cc===\"USDT\"||_cc===\"USDC\") _cc=\"USD\"; if(window.OOH_EV) window.OOH_EV.ccy=_cc; }catch(e){}\n        var types = (ed.ticketTypes||[]).filter(function(t){ return t.visibility !== \"HIDDEN\"; });\n        if (!types.length){ container.innerHTML = '<div class=\"tk-msg\">Las entradas estarán disponibles muy pronto.</div>'; return; }\n        container.innerHTML = \"\";\n        var minPrice = null;\n        types.forEach(function(t){\n          var p = Number(t.price)||0; if(p>0 && (minPrice===null || p<minPrice)) minPrice=p;\n          var avail = (t.available==null) ? null : Number(t.available);\n          var sold = avail!=null && avail<=0;\n          var row = document.createElement(\"div\"); row.className = \"tkt\";\n          row.innerHTML =\n            '<div class=\"info\"><div class=\"nm\"></div><div class=\"av'+(sold?' soldout':'')+'\"></div></div>'+\n            '<div class=\"pr\"><b></b><small>por persona</small></div>'+\n            '<button></button>';\n          row.querySelector(\".nm\").textContent = t.name || \"Entrada\";\n          row.querySelector(\".av\").textContent = sold ? \"Agotada\" : (avail!=null ? (avail+\" disponibles\") : \"Disponible\");\n          row.querySelector(\".pr b\").textContent = (Number(t.price)>0) ? money(t.price, CURRENCY) : \"Sin cargo\";\n          var btn = row.querySelector(\"button\");\n          btn.textContent = sold ? \"Agotada\" : (Number(t.price)>0 ? \"Comprar\" : \"Registrarme\");\n          btn.disabled = sold;\n          if(!sold) btn.addEventListener(\"click\", function(){ openBuy(t); });\n          container.appendChild(row);\n        });\n        T.viewItem(minPrice||0);\n    /* ?code= del QR/PDF de códigos: abre la COMPRA como PÁGINA (overlay con fondo sólido) directamente en la\n       entrada del código (incluso una Cortesía oculta), con el código ya escrito. Reusa el checkout existente. */\n    try{ var _cp=new URLSearchParams(location.search); var _pc=_cp.get('code');\n      if(_pc){ var PRECODE=_pc.trim(); _cp.delete('code'); var _cq=_cp.toString();\n        history.replaceState({},'',location.pathname+(_cq?('?'+_cq):'')+location.hash);\n        if(!document.getElementById('ooh-buypage-css')){ var _st=document.createElement('style'); _st.id='ooh-buypage-css';\n          _st.textContent='#ooh-ov.aspage{background:#0b0b0c;backdrop-filter:none}#ooh-ov.aspage .dlg{max-width:560px;width:100%;box-shadow:none}';\n          document.head.appendChild(_st); }\n        fetch(API+\"/api/public/events/editions/\"+EDITION+\"/promo-codes/resolve?code=\"+encodeURIComponent(PRECODE),{headers:{Accept:\"application/json\"}})\n          .then(function(r){return r.json();})\n          .then(function(res){\n            var t = res && res.ticketType ? res.ticketType : null;         // entrada del código (Cortesía oculta incluida)\n            if(t){ openBuy(t); } else { var b=document.querySelector(\"#ooh-tickets button\"); if(b){ b.click(); } }\n            try{ var _ov=document.getElementById('ooh-ov'); if(_ov) _ov.classList.add('aspage'); }catch(e){}\n            try{ elCode.value=PRECODE; elCode.dispatchEvent(new Event(\"input\",{bubbles:true})); }catch(e){}\n          }).catch(function(){});\n      } }catch(_e){}\n      })\n      .catch(function(){\n        container.innerHTML = '<div class=\"tk-msg\">No pudimos cargar las entradas en este momento. Escribinos a <a href=\"mailto:info@oohsummit.com\" style=\"color:var(--red-bright)\">info@oohsummit.com</a>.</div>';\n      });\n  }\n  load();\n\n  /* ----- buy flow ----- */\n  var ov = document.getElementById(\"ooh-ov\"), current = null, maxQ = MAX_QTY;\n  var elName=document.getElementById(\"ooh-name\"), elEmail=document.getElementById(\"ooh-email\"), elCo=document.getElementById(\"ooh-company\");\n  var elCode=document.getElementById(\"ooh-code\"), elQty=document.getElementById(\"ooh-qty\"), elQmax=document.getElementById(\"ooh-qmax\");\n  var elBName=document.getElementById(\"ooh-bname\"), elBEmail=document.getElementById(\"ooh-bemail\"), elBTax=document.getElementById(\"ooh-btax\"), elBAddr=document.getElementById(\"ooh-baddr\");\n  var elTot=document.getElementById(\"ooh-tot\"), elTotV=document.getElementById(\"ooh-tot-v\");\n  var elSubV=document.getElementById(\"ooh-sub-v\"), elDiscRow=document.getElementById(\"ooh-disc-row\"),\n      elDiscV=document.getElementById(\"ooh-disc-v\"), elDiscL=document.getElementById(\"ooh-disc-l\"),\n      elCodeMsg=document.getElementById(\"ooh-code-msg\");\n  var quoteSeq=0, quoteTimer=null, lastTotal=null;\n  var elErr=document.getElementById(\"ooh-err\"), elOk=document.getElementById(\"ooh-ok\"), elGo=document.getElementById(\"ooh-go\");\n  var qMinus=document.getElementById(\"ooh-qminus\"), qPlus=document.getElementById(\"ooh-qplus\");\n\n  function qty(){ return Math.max(1, parseInt(elQty.value,10)||1); }\n  function paidTicket(){ return current && Number(current.price)>0; }\n  function showBreak(subtotal, discountTotal, total, msg, color){\n    elTot.style.display=\"block\";\n    elSubV.textContent = money(subtotal, CURRENCY);\n    if(discountTotal>0){ elDiscRow.style.display=\"flex\"; elDiscV.textContent = \"− \"+money(discountTotal, CURRENCY); }\n    else { elDiscRow.style.display=\"none\"; }\n    elTotV.textContent = money(total, CURRENCY); lastTotal=Number(total)||0;\n    elCodeMsg.textContent = msg||\"\"; elCodeMsg.style.color = color||\"\";\n  }\n  function refreshTotal(){\n    if(!current) return;\n    var n = qty();\n    qMinus.disabled = n<=1;\n    qPlus.disabled = n>=maxQ;\n    elGo.textContent = paidTicket() ? (\"Continuar al pago →\") : (\"Confirmar registro →\");\n    if(!paidTicket()){ elTot.style.display=\"none\"; return; }\n    var subtotal = (Number(current.price)||0)*n;\n    // Pinta subtotal/total sin descuento de inmediato; el cupón (si hay) lo recalcula contra el backend.\n    showBreak(subtotal, 0, subtotal, \"\", \"\");\n    scheduleQuote();\n  }\n  function scheduleQuote(){\n    var code=(elCode.value||\"\").trim().toUpperCase();\n    if(quoteTimer){ clearTimeout(quoteTimer); }\n    var seq=++quoteSeq;\n    quoteTimer=setTimeout(function(){ fetchQuote(seq, code); }, code ? 350 : 0);\n  }\n  function fetchQuote(seq, code){\n    if(!current || !paidTicket()) return;\n    var n=qty(), subtotal=(Number(current.price)||0)*n;\n    if(!code){ if(seq===quoteSeq) showBreak(subtotal,0,subtotal,\"\",\"\"); return; }\n    var u = API+\"/api/public/events/editions/\"+EDITION+\"/promo-codes/quote\"+\n            \"?ticketTypeId=\"+encodeURIComponent(current.id)+\"&quantity=\"+n+\"&code=\"+encodeURIComponent(code);\n    fetch(u, {headers:{Accept:\"application/json\"}})\n      .then(function(r){ return r.json(); })\n      .then(function(d){\n        if(seq!==quoteSeq) return; // respuesta vieja (código/cantidad cambió): la ignoro\n        if(d && d.valid){\n          var dt=Number(d.discountTotal)||0, tot=(d.total!=null?Number(d.total):subtotal);\n          showBreak(Number(d.subtotal)||subtotal, dt, tot, dt>0?\"✓ Código aplicado\":\"✓ Código válido\", \"#8fe6a4\");\n        } else {\n          showBreak(subtotal, 0, subtotal, (d&&d.reason)||\"Código no válido\", \"#ff9a9a\");\n        }\n      })\n      .catch(function(){ if(seq===quoteSeq) showBreak(subtotal,0,subtotal,\"\",\"\"); }); // endpoint no disponible → sin descuento\n  }\n  elCode.addEventListener(\"input\", refreshTotal);\n  function setQty(n){ elQty.value = Math.min(maxQ, Math.max(1, n)); refreshTotal(); }\n  qMinus.addEventListener(\"click\", function(){ setQty(qty()-1); });\n  qPlus.addEventListener(\"click\", function(){ setQty(qty()+1); });\n\n  function openBuy(t){\n    current = t;\n    var avail = (t.available==null) ? MAX_QTY : Math.max(1, Math.min(MAX_QTY, Number(t.available)));\n    maxQ = avail;\n    document.getElementById(\"ooh-dlg-t\").textContent = t.name || \"Tu entrada\";\n    document.getElementById(\"ooh-dlg-s\").textContent = (Number(t.price)>0 ? money(t.price,CURRENCY)+\" c/u · \" : \"\") + \"14–15 Oct 2026, CDMX\";\n    elErr.style.color=\"\"; elErr.textContent=\"\"; elOk.style.display=\"none\"; elOk.textContent=\"\";\n    elCode.value=\"\"; elQty.value=\"1\"; elGo.disabled=false;\n    if(elBName) elBName.value=\"\"; if(elBEmail) elBEmail.value=\"\"; if(elBTax) elBTax.value=\"\"; if(elBAddr) elBAddr.value=\"\";\n    elQmax.textContent = (t.available!=null ? (\"máx. \"+maxQ) : \"\");\n    refreshTotal();\n    ov.classList.add(\"on\"); setTimeout(function(){ elName.focus(); }, 50);\n  }\n  function close(){ ov.classList.remove(\"on\"); if(quoteTimer){ clearTimeout(quoteTimer); quoteTimer=null; } }\n  document.getElementById(\"ooh-x\").addEventListener(\"click\", close);\n  ov.addEventListener(\"click\", function(e){ if(e.target===ov) close(); });\n\n  function fail(msg){ elErr.style.color=\"\"; elErr.textContent=msg; elGo.disabled=false; refreshTotal(); }\n  function gotoOrShow(res){\n    var b = res.body||{};\n    if (b.checkoutUrl){ window.location.href = b.checkoutUrl; return true; }\n    if (b.ticketUrl){ window.location.href = b.ticketUrl; return true; }\n    if (b.requiresKycBeforePayment){ elErr.textContent=\"\"; elOk.style.display=\"block\"; elOk.textContent=\"Te registramos. Te enviamos un email para verificar tu identidad y completar la compra.\"; elGo.textContent=\"Listo ✓\"; return true; }\n    return false;\n  }\n\n  elGo.addEventListener(\"click\", function(){\n    var name=elName.value.trim(), email=elEmail.value.trim(), company=elCo.value.trim();\n    var code=(elCode.value||\"\").trim().toUpperCase()||null, n=qty();\n    var bname=(elBName.value||\"\").trim()||null, bemail=(elBEmail.value||\"\").trim()||null,\n        btax=(elBTax.value||\"\").trim()||null, baddr=(elBAddr.value||\"\").trim()||null;\n    if(!name){ fail(\"Ingresá tu nombre.\"); return; }\n    if(!/^\\S+@\\S+\\.\\S+$/.test(email)){ fail(\"Ingresá un email válido.\"); return; }\n    if(COMPANY_REQUIRED && !company){ fail(\"Indicá tu empresa para continuar.\"); try{ document.getElementById(\"ooh-company\").focus(); }catch(e){} return; }\n    elErr.textContent=\"\"; elOk.style.display=\"none\"; elGo.disabled=true; elGo.textContent=\"Procesando…\";\n\n    var single = (n<=1);\n    var url = API + \"/api/public/events/editions/\" + EDITION + (single ? \"/register\" : \"/register-group\");\n    var payload = single\n      ? { ticketTypeId: current.id, attendeeName:name, attendeeEmail:email, company:company||null, promoCode:code, billingName:bname, billingEmail:bemail, billingTaxId:btax, billingAddress:baddr }\n      : { ticketTypeId: current.id, attendeeName:name, attendeeEmail:email, company:company||null, promoCode:code, quantity:n, billingName:bname, billingEmail:bemail, billingTaxId:btax, billingAddress:baddr };\n\n    // Guardamos la intención (valor estimado, sin descuento) para el evento Purchase al volver de Stripe.\n    T.stash({ value:(lastTotal!=null?lastTotal:(Number(current.price)||0)*n), qty:n, name:(current.name||'Entrada OOH Summit 2026') });\n    fetch(url, { method:\"POST\", headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"}, body: JSON.stringify(payload) })\n      .then(function(r){ return r.json().then(function(b){ return {ok:r.ok, status:r.status, body:b}; }).catch(function(){ return {ok:r.ok, status:r.status, body:{}}; }); })\n      .then(function(res){\n        if(!res.ok){\n          if(!single && (res.status===404 || res.status===405)){\n            fail(\"Por ahora la compra de varias entradas juntas no está disponible. Comprá de a una (cantidad 1) o escribinos a info@oohsummit.com.\"); return;\n          }\n          var msg = (res.body && (res.body.message||res.body.error)) || \"No pudimos procesar tu solicitud.\";\n          fail(msg); return;\n        }\n        // guardamos el id real para dedupe del Purchase\n        var b=res.body||{}; var id=b.inscriptionId||(b.orderId?('order:'+b.orderId):null); if(id){ try{ T.beginCheckout((Number(current.price)||0)*n, n, id); }catch(e){} }\n        if(id){ try{ var o=JSON.parse(sessionStorage.getItem('ooh_pending')||'{}'); o.id=id; sessionStorage.setItem('ooh_pending',JSON.stringify(o)); }catch(e){} }\n        if(gotoOrShow(res)) return;\n        fail(\"Recibimos tu inscripción pero no pudimos abrir el pago. Escribinos a info@oohsummit.com.\");\n      })\n      .catch(function(){ fail(\"Error de conexión. Probá de nuevo.\"); });\n  });\n\n  /* ================= PÁGINA DE GRACIAS (post-pago) ================= */\n  function gcalUrl(){\n    var s=\"20261014T150000Z\", e=\"20261016T000000Z\"; // 14 Oct 09:00 – 15 Oct 18:00 (CDMX, UTC-6)\n    var q = \"action=TEMPLATE&text=\"+encodeURIComponent(\"OOH Summit 2026 — Ciudad de México\")+\n            \"&dates=\"+s+\"/\"+e+\n            \"&details=\"+encodeURIComponent(\"Tu entrada al OOH Summit 2026. Presentá tu QR en el acceso. \"+ (EV.url||\"https://www.oohsummit.com/\"))+\n            \"&location=\"+encodeURIComponent(\"Polyforum Cultural Siqueiros, Av. Insurgentes Sur 701, Nápoles, CDMX\");\n    return \"https://calendar.google.com/calendar/render?\"+q;\n  }\n  function qs(name){ try{ return new URLSearchParams(location.search).get(name); }catch(e){ return null; } }\n  function isThanks(){\n    return /\\/gracias/i.test(location.pathname) || !!qs(\"inscription\") || !!qs(\"order\") || qs(\"status\")===\"cancel\";\n  }\n  function showThanks(){\n    var tyOv=document.getElementById(\"ooh-ty-ov\");\n    var cancel = qs(\"status\")===\"cancel\";\n    var insId = qs(\"inscription\"), ordId = qs(\"order\");\n    document.getElementById(\"ooh-ty-cal\").href = gcalUrl();\n    document.getElementById(\"ooh-ty-x\").addEventListener(\"click\", function(){\n      tyOv.classList.remove(\"on\");\n      try{ history.replaceState({}, \"\", location.origin + \"/\"); }catch(e){}\n    });\n    if(cancel){\n      document.getElementById(\"ooh-ty-t\").textContent = \"Tu pago quedó pendiente\";\n      document.getElementById(\"ooh-ty-p\").textContent = \"No se completó el pago. Podés volver a intentarlo desde la sección Entradas cuando quieras.\";\n      document.querySelector('.oohs #ooh-ty-ov .chk').textContent = \"!\";\n      document.querySelector('.oohs #ooh-ty-ov .chk').style.color = \"#ffcf8f\";\n      document.querySelector('.oohs #ooh-ty-ov .chk').style.borderColor = \"#ffcf8f\";\n      document.getElementById(\"ooh-ty-cal\").style.display=\"none\";\n      tyOv.classList.add(\"on\");\n      return;\n    }\n    // Pago OK → Purchase (con dedupe por id) + intento de mostrar el/los QR.\n    var stash = T.purchaseFromStash(insId||(ordId?('order:'+ordId):null));\n    tyOv.classList.add(\"on\");\n    // Intentar traer la entrada emitida (endpoint público; puede no estar disponible aún → se cae al aviso por email).\n    if(insId){\n      fetchTickets(\"/api/public/events/inscriptions/\"+encodeURIComponent(insId)+\"/tickets\", 0, insId);\n    } else if(ordId){\n      fetchTickets(\"/api/public/events/orders/\"+encodeURIComponent(ordId)+\"/tickets\", 0, null);\n    }\n  }\n  function renderTickets(tokens, insId){\n    if(!tokens || !tokens.length) return;\n    var box=document.getElementById(\"ooh-ty-tks\");\n    var qrWrap=document.getElementById(\"ooh-ty-qr\");\n    var view=document.getElementById(\"ooh-ty-view\");\n    // QR grande de la primera entrada\n    var first=tokens[0];\n    qrWrap.querySelector(\"img\").src = API+\"/api/public/events/tickets/\"+encodeURIComponent(first.token)+\"/qr.png\";\n    qrWrap.style.display=\"block\";\n    view.href = API+\"/api/public/events/tickets/\"+encodeURIComponent(first.token)+\"/qr.png\";\n    view.setAttribute(\"download\",\"entrada-oohsummit-2026.png\");\n    view.style.display=\"inline-flex\";\n    view.textContent = \"Ver / descargar mi entrada (QR)\";\n    document.getElementById(\"ooh-ty-p\").textContent = \"Estas son tus entradas. También te las enviamos por email con la factura.\";\n    box.innerHTML=\"\";\n    tokens.forEach(function(t){\n      var wrap=document.createElement(\"div\"); wrap.style.cssText=\"border:1px solid var(--line);border-radius:10px;padding:10px 12px;\";\n      var row=document.createElement(\"div\"); row.className=\"tkrow\"; row.style.cssText=\"border:0;padding:0;align-items:center;\";\n      var nm=document.createElement(\"span\"); nm.textContent=(t.attendeeName||\"Entrada\");\n      var lk=document.createElement(\"a\"); lk.target=\"_blank\"; lk.rel=\"noopener\"; lk.style.cssText=\"color:var(--red-bright);font-weight:800\";\n      lk.href=API+\"/api/public/events/tickets/\"+encodeURIComponent(t.token)+\"/qr.png\"; lk.setAttribute(\"download\",\"entrada-oohsummit-2026.png\"); lk.textContent=\"N° \"+(t.visibleNumber||\"—\")+\" ↓\";\n      row.appendChild(nm); row.appendChild(lk); wrap.appendChild(row);\n      // Reasignar a otra persona (sólo el comprador: requiere el id de inscripción, que el QR no expone)\n      if(insId){\n      var toggle=document.createElement(\"button\"); toggle.type=\"button\";\n      toggle.style.cssText=\"background:none;border:0;color:var(--muted);font-size:12px;font-weight:700;cursor:pointer;padding:6px 0 0;text-decoration:underline;font-family:inherit\";\n      toggle.textContent=\"✉ Enviar esta entrada a otra persona\";\n      var form=document.createElement(\"div\"); form.style.cssText=\"display:none;margin-top:10px;gap:8px;\";\n      var iName=document.createElement(\"input\"); iName.type=\"text\"; iName.placeholder=\"Nombre y apellido\";\n      var iMail=document.createElement(\"input\"); iMail.type=\"email\"; iMail.placeholder=\"Email\";\n      [iName,iMail].forEach(function(i){ i.style.cssText=\"width:100%;margin-bottom:8px;background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:8px;padding:10px 12px;color:#fff;font-size:14px;font-family:inherit\"; });\n      var send=document.createElement(\"button\"); send.type=\"button\"; send.textContent=\"Enviar entrada →\";\n      send.style.cssText=\"width:100%;background:var(--red-bright);color:#fff;border:0;font-weight:800;font-size:13px;padding:11px;border-radius:8px;cursor:pointer;font-family:inherit\";\n      var msg=document.createElement(\"div\"); msg.style.cssText=\"font-size:12px;margin-top:6px;min-height:14px;color:var(--muted)\";\n      form.appendChild(iName); form.appendChild(iMail); form.appendChild(send); form.appendChild(msg);\n      toggle.addEventListener(\"click\", function(){ form.style.display = form.style.display===\"none\" ? \"block\" : \"none\"; });\n      send.addEventListener(\"click\", function(){\n        var nn=iName.value.trim(), ee=iMail.value.trim();\n        if(!nn){ msg.style.color=\"#ff9a9a\"; msg.textContent=\"Ingresá el nombre.\"; return; }\n        if(!/^\\S+@\\S+\\.\\S+$/.test(ee)){ msg.style.color=\"#ff9a9a\"; msg.textContent=\"Ingresá un email válido.\"; return; }\n        send.disabled=true; send.textContent=\"Enviando…\"; msg.style.color=\"var(--muted)\"; msg.textContent=\"\";\n        fetch(API+\"/api/public/events/inscriptions/\"+encodeURIComponent(insId)+\"/tickets/\"+encodeURIComponent(t.token)+\"/reassign\", {\n          method:\"POST\", headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},\n          body: JSON.stringify({ attendeeName:nn, attendeeEmail:ee })\n        }).then(function(r){ return r.json().then(function(b){ return {ok:r.ok,b:b}; }).catch(function(){ return {ok:r.ok,b:{}}; }); })\n          .then(function(res){\n            if(res.ok){ msg.style.color=\"#8fe6a4\"; msg.textContent=\"Entrada enviada a \"+ee+\" ✓\"; nm.textContent=nn; send.textContent=\"Enviada ✓\"; }\n            else { msg.style.color=\"#ff9a9a\"; msg.textContent=(res.b&&(res.b.error||res.b.message))||\"No pudimos enviarla.\"; send.disabled=false; send.textContent=\"Enviar entrada →\"; }\n          }).catch(function(){ msg.style.color=\"#ff9a9a\"; msg.textContent=\"Error de conexión.\"; send.disabled=false; send.textContent=\"Enviar entrada →\"; });\n      });\n      wrap.appendChild(toggle); wrap.appendChild(form);\n      }\n      box.appendChild(wrap);\n    });\n  }\n  function fetchTickets(path, tries, insId){\n    tries = tries||0;\n    fetch(API+path, {headers:{Accept:\"application/json\"}})\n      .then(function(r){ if(!r.ok) throw new Error(r.status); return r.json(); })\n      .then(function(d){\n        var tokens = d.tickets || d.items || (d.token ? [d] : []);\n        tokens = (tokens||[]).filter(function(t){ return t && t.token; });\n        if(tokens.length){ renderTickets(tokens, insId); return; }\n        // emisión async: reintentar unas veces\n        if(tries<6){ setTimeout(function(){ fetchTickets(path, tries+1, insId); }, 2500); }\n      })\n      .catch(function(){ /* endpoint aún no disponible: queda el aviso \"te llega por email\" */ });\n  }\n  if(isThanks()){ showThanks(); }\n\n  /* ================= VIDEOS: reproducir al pasar el cursor ================= */\n  (function(){\n    Array.prototype.forEach.call(document.querySelectorAll('.oohs .ooh-hovervid'), function(v){\n      var box = v.closest('.vid') || v;\n      // El hover se escucha en la CAJA (el <video> tiene pointer-events:none para ocultar toda acción del player).\n      box.addEventListener('mouseenter', function(){ try{ v.muted=true; var p=v.play(); if(p&&p.catch)p.catch(function(){}); }catch(e){} box.classList.add('playing'); });\n      box.addEventListener('mouseleave', function(){ try{ v.pause(); }catch(e){} box.classList.remove('playing'); });\n      v.addEventListener('play', function(){ box.classList.add('playing'); });\n      v.addEventListener('pause', function(){ box.classList.remove('playing'); });\n    });\n  })();\n\n  /* ================= NOVEDADES (captura de email → CRM lead) + CTA slide-in ================= */\n  (function(){\n    var form=document.getElementById(\"ooh-news-form\"), emailEl=document.getElementById(\"ooh-news-email\");\n    var nameEl=document.getElementById(\"ooh-news-name\"), lastEl=document.getElementById(\"ooh-news-last\");\n    var nbtn=document.getElementById(\"ooh-news-btn\"), nmsg=document.getElementById(\"ooh-news-msg\");\n    if(form){\n      form.addEventListener(\"submit\", function(e){\n        e.preventDefault();\n        var fname=(nameEl&&nameEl.value||\"\").trim(), lname=(lastEl&&lastEl.value||\"\").trim();\n        var email=(emailEl.value||\"\").trim();\n        if(!fname || !lname){ nmsg.style.color=\"#ff9a9a\"; nmsg.textContent=\"Completá tu nombre y apellido.\"; return; }\n        if(!/^\\S+@\\S+\\.\\S+$/.test(email)){ nmsg.style.color=\"#ff9a9a\"; nmsg.textContent=\"Ingresá un email válido.\"; return; }\n        var fullName=(fname+\" \"+lname).trim();\n        nbtn.disabled=true; nbtn.textContent=\"Enviando…\"; nmsg.textContent=\"\";\n        // Formulario \"Novedades OOH Summit\" del CRM (Formularios): crea el lead con etiqueta NEWSLETTER y origen del evento.\n        fetch(API+\"/api/public/crm/forms/\"+NEWS_FORM+\"/submit\",{\n          method:\"POST\", headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},\n          body: JSON.stringify({ firstName:fname, lastName:lname, email:email, phone:\"\", website:\"\" })\n        }).then(function(r){ return r.ok; })\n          .then(function(ok){\n            if(ok){ nmsg.style.color=\"#8fe6a4\"; nmsg.textContent=\"¡Listo, \"+fname+\"! Te avisamos de todas las novedades ✓\"; emailEl.value=\"\"; if(nameEl)nameEl.value=\"\"; if(lastEl)lastEl.value=\"\"; nbtn.textContent=\"Suscripto ✓\"; try{ T.lead(\"newsletter\"); }catch(e){} }\n            else { nmsg.style.color=\"#ff9a9a\"; nmsg.textContent=\"No pudimos registrarte. Probá de nuevo.\"; nbtn.disabled=false; nbtn.textContent=\"Recibir novedades\"; }\n          })\n          .catch(function(){ nmsg.style.color=\"#ff9a9a\"; nmsg.textContent=\"Error de conexión. Probá de nuevo.\"; nbtn.disabled=false; nbtn.textContent=\"Recibir novedades\"; });\n      });\n    }\n    /* ----- SPONSOR: modal → formulario \"Quiero ser sponsor\" del CRM (persona + empresa vinculadas, lead SPONSOR, oportunidad en el embudo) ----- */\n    (function(){\n      var spOv=document.getElementById(\"ooh-sp-ov\"), spBtn=document.getElementById(\"ooh-sponsor-btn\"), spForm=document.getElementById(\"ooh-sp-form\");\n      if(!spOv || !spBtn || !spForm) return;\n      var $=function(id){ return document.getElementById(id); };\n      var spGo=$(\"ooh-sp-go\"), spErr=$(\"ooh-sp-err\"), spOk=$(\"ooh-sp-ok\");\n      function spOpen(e){ if(e) e.preventDefault(); spErr.textContent=\"\"; spOv.classList.add(\"on\"); spOv.setAttribute(\"aria-hidden\",\"false\"); setTimeout(function(){ try{ $(\"ooh-sp-fn\").focus(); }catch(x){} }, 50); }\n      function spClose(){ spOv.classList.remove(\"on\"); spOv.setAttribute(\"aria-hidden\",\"true\"); }\n      spBtn.addEventListener(\"click\", spOpen);\n      $(\"ooh-sp-x\").addEventListener(\"click\", spClose);\n      spOv.addEventListener(\"click\", function(e){ if(e.target===spOv) spClose(); });\n      document.addEventListener(\"keydown\", function(e){ if(e.key===\"Escape\" && spOv.classList.contains(\"on\")) spClose(); });\n      var v=function(id){ return ($(id).value||\"\").trim(); };\n      spForm.addEventListener(\"submit\", function(e){\n        e.preventDefault();\n        var req=[[\"ooh-sp-fn\",\"tu nombre\"],[\"ooh-sp-ln\",\"tu apellido\"],[\"ooh-sp-job\",\"tu cargo\"],[\"ooh-sp-em\",\"tu email\"],[\"ooh-sp-ph\",\"tu teléfono\"],[\"ooh-sp-co\",\"la marca o empresa\"],[\"ooh-sp-ct\",\"el país\"],[\"ooh-sp-kind\",\"el tipo de participación\"]];\n        for(var i=0;i<req.length;i++){ if(!v(req[i][0])){ spErr.textContent=\"Completá \"+req[i][1]+\".\"; try{ $(req[i][0]).focus(); }catch(x){} return; } }\n        if(!/^\\S+@\\S+\\.\\S+$/.test(v(\"ooh-sp-em\"))){ spErr.textContent=\"Ingresá un email válido.\"; return; }\n        var answers={}; answers[\"Tipo de participación\"]=v(\"ooh-sp-kind\"); if(v(\"ooh-sp-bud\")) answers[\"Presupuesto estimado (USD)\"]=v(\"ooh-sp-bud\");\n        var body={ firstName:v(\"ooh-sp-fn\"), lastName:v(\"ooh-sp-ln\"), jobTitle:v(\"ooh-sp-job\"), email:v(\"ooh-sp-em\"), phone:v(\"ooh-sp-ph\"),\n          company:v(\"ooh-sp-co\"), country:v(\"ooh-sp-ct\"), web:v(\"ooh-sp-web\"), instagram:v(\"ooh-sp-ig\"), linkedin:v(\"ooh-sp-li\"),\n          message:v(\"ooh-sp-msg\"), answers:answers, website:v(\"ooh-sp-hp\") };\n        spGo.disabled=true; spGo.textContent=\"Enviando…\"; spErr.textContent=\"\";\n        fetch(API+\"/api/public/crm/forms/\"+SPONSOR_FORM+\"/submit\",{ method:\"POST\", headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"}, body:JSON.stringify(body) })\n          .then(function(r){ return r.ok; })\n          .then(function(ok){\n            if(ok){\n              spForm.querySelectorAll(\"input,select,textarea,button\").forEach(function(el){ el.style.display=\"none\"; });\n              spForm.querySelectorAll(\"label,.g2\").forEach(function(el){ el.style.display=\"none\"; });\n              spOk.style.display=\"block\"; spOk.textContent=\"¡Gracias, \"+v(\"ooh-sp-fn\")+\"! Recibimos los datos de \"+v(\"ooh-sp-co\")+\". Te contactamos en menos de 48 h con la propuesta ✓\";\n              try{ T.lead(\"sponsor\"); }catch(x){}\n            } else { spErr.textContent=\"No pudimos enviar tu solicitud. Probá de nuevo o escribinos a info@oohsummit.com.\"; spGo.disabled=false; spGo.textContent=\"Enviar → te contactamos en 48 h\"; }\n          })\n          .catch(function(){ spErr.textContent=\"Error de conexión. Probá de nuevo.\"; spGo.disabled=false; spGo.textContent=\"Enviar → te contactamos en 48 h\"; });\n      });\n    })();\n    var cta=document.getElementById(\"ooh-slidecta\");\n    if(cta){\n      var dismissed=false; try{ dismissed = sessionStorage.getItem(\"ooh_cta_x\")===\"1\"; }catch(e){}\n      var shown=false;\n      function hide(){ cta.classList.remove(\"show\"); dismissed=true; window.removeEventListener(\"scroll\", maybeShow); try{ sessionStorage.setItem(\"ooh_cta_x\",\"1\"); }catch(e){} }\n      function maybeShow(){\n        if(shown||dismissed) return;\n        var sc=window.scrollY||document.documentElement.scrollTop, h=document.documentElement.scrollHeight-window.innerHeight;\n        if(h>0 && sc/h>0.32){ cta.classList.add(\"show\"); shown=true; window.removeEventListener(\"scroll\", maybeShow); }\n      }\n      window.addEventListener(\"scroll\", maybeShow, {passive:true});\n      document.getElementById(\"ooh-sc-x\").addEventListener(\"click\", hide);\n      document.getElementById(\"ooh-sc-go\").addEventListener(\"click\", hide);\n    }\n  })();\n\n  /* ================= AGENDA (leída del módulo Eventos: Eventos → Agenda, sólo actividades PUBLICADAS) ================= */\n  (function(){\n    var box=document.getElementById('ooh-agenda'), soon=document.getElementById('ooh-agenda-soon'), note=document.getElementById('ooh-agenda-note');\n    if(!box) return;\n    var DOW=['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'];\n    var MON=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];\n    // Las horas vienen en hora local del evento (\"2026-10-14T09:00:00\"): se cortan del string, sin Date(), para no correrlas a la zona del visitante.\n    function hm(s){ return (typeof s==='string' && s.length>=16) ? s.substr(11,5) : ''; }\n    function ymd(s){ return (typeof s==='string' && s.length>=10) ? s.substr(0,10) : ''; }\n    function dayLabel(d){\n      var p=d.split('-'); if(p.length!==3) return '';\n      var dt=new Date(Date.UTC(+p[0],+p[1]-1,+p[2]));\n      return DOW[dt.getUTCDay()]+' '+(+p[2])+' de '+MON[+p[1]-1];\n    }\n    function el(tag,cls,txt){ var e=document.createElement(tag); if(cls) e.className=cls; if(txt!=null) e.textContent=txt; return e; }\n    fetch(API+\"/api/public/events/editions/\"+EDITION+\"/agenda\",{headers:{Accept:'application/json'}})\n      .then(function(r){ if(!r.ok) throw new Error('agenda '+r.status); return r.json(); })\n      .then(function(d){\n        var acts=(d&&Array.isArray(d.activities))?d.activities:[];\n        if(!acts.length) return; // sin actividades publicadas → queda \"Próximamente\"\n        var rooms={}, spk={};\n        ((d&&d.rooms)||[]).forEach(function(r){ rooms[r.id]=r; });\n        ((d&&d.speakers)||[]).forEach(function(s){ spk[s.id]=s; });\n        // Agrupar por día: la fecha de inicio manda; sin fecha, la clave de día que cargó el organizador.\n        var days=[], byKey={};\n        acts.forEach(function(a){\n          var k=ymd(a.startsAt)||a.dayKey||'—';\n          if(!byKey[k]){ byKey[k]=[]; days.push(k); }\n          byKey[k].push(a);\n        });\n        days.sort();\n        box.innerHTML='';\n        days.forEach(function(k,i){\n          var day=el('div','ooh-day'), h=el('div','ooh-day-h');\n          h.appendChild(el('span','ooh-day-k','Día '+(i+1)));\n          var lbl=/^\\d{4}-\\d{2}-\\d{2}$/.test(k)?dayLabel(k):'';\n          if(lbl) h.appendChild(el('span','ooh-day-d',lbl));\n          day.appendChild(h);\n          var ul=el('ul','ooh-tl');\n          byKey[k].forEach(function(a){\n            var li=el('li'), t=el('span','ooh-t',hm(a.startsAt)||'—');\n            var end=hm(a.endsAt);\n            if(end && a.endsAt>a.startsAt) t.appendChild(el('small',null,'a '+end));\n            li.appendChild(t);\n            var e=el('span','ooh-e');\n            var room=a.roomId&&rooms[a.roomId];\n            if(room&&room.name) e.appendChild(el('span','ooh-room',room.name));\n            e.appendChild(el('b',null,a.title||''));\n            var names=(a.speakerIds||[]).map(function(id){ var s=spk[id]; if(!s) return ''; return s.name+(s.company?' ('+s.company+')':''); }).filter(Boolean);\n            if(a.moderator) names.push('Modera: '+a.moderator);\n            if(names.length) e.appendChild(el('span','ooh-spk',names.join(' · ')));\n            if(a.category) e.appendChild(el('i',null,a.category));\n            if(a.description){\n              var det=el('details'); det.appendChild(el('summary',null,'Ver detalle'));\n              det.appendChild(el('p',null,a.description)); e.appendChild(det);\n            }\n            li.appendChild(e); ul.appendChild(li);\n          });\n          day.appendChild(ul); box.appendChild(day);\n        });\n        box.hidden=false; if(note) note.hidden=false; if(soon) soon.hidden=true;\n      })\n      .catch(function(){ /* falla → queda \"Próximamente\" */ });\n  })();\n\n  /* ================= SPONSORS (leídos del módulo Eventos, AGRUPADOS POR CATEGORÍA) ================= */\n  (function(){\n    var grid=document.getElementById('ooh-sponsors');\n    if(!grid) return;\n    // Jerarquía de categorías: se muestran en este orden; cada tier con su tamaño de tile.\n    var TIERS=[\n      {label:'Main Sponsor',     cls:'t-main',     match:['main sponsor','main']},\n      {label:'Alliance Partner', cls:'t-alliance', match:['alliance partner','alliance']},\n      {label:'Oro',              cls:'t-oro',      match:['oro','gold']},\n      {label:'Plata',            cls:'t-plata',    match:['plata','silver']},\n      {label:'Bronce',           cls:'t-bronce',   match:['bronce','bronze']},\n      {label:'Clásico',          cls:'t-clasico',  match:['clasico','clásico','classic']},\n      {label:'Media Partners',   cls:'t-media',    match:['media partner','media partners','media']}\n    ];\n    function tierIndex(t){\n      var s=(t||'').toString().trim().toLowerCase();\n      if(!s) return -1;\n      for(var i=0;i<TIERS.length;i++){ for(var j=0;j<TIERS[i].match.length;j++){ if(s.indexOf(TIERS[i].match[j])!==-1) return i; } }\n      return -1;\n    }\n    function tile(s){\n      var logo = s.logoLightUrl || s.logoUrl || s.logoMonoUrl || null;\n      var el = s.website ? document.createElement('a') : document.createElement('div');\n      if(s.website){ el.href=s.website; el.target='_blank'; el.rel='noopener'; }\n      el.className='ooh-tile'+(logo?' has-logo':''); el.title=s.name||'';\n      el.style.cssText='display:flex;align-items:center;justify-content:center;';\n      if(logo){\n        var img=document.createElement('img'); img.src=logo; img.alt=s.name||'Sponsor'; img.loading='lazy';\n        img.onerror=function(){ el.textContent=s.name||''; el.className='ooh-tile'; };\n        el.appendChild(img);\n      } else { el.textContent=s.name||''; }\n      return el;\n    }\n    fetch(API+\"/api/public/events/editions/\"+EDITION+\"/sponsors\",{headers:{Accept:'application/json'}})\n      .then(function(r){ return r.json(); })\n      .then(function(d){\n        var list=Array.isArray(d)?d:((d&&d.sponsors)||(d&&d.items)||[]);\n        if(!list.length) return; // sin sponsors → quedan los placeholders\n        // Agrupar preservando el orden del API dentro de cada categoría.\n        var buckets={}, other=[];\n        list.forEach(function(s){ var i=tierIndex(s.tier); if(i<0){ other.push(s); } else { (buckets[i]=buckets[i]||[]).push(s); } });\n        grid.innerHTML=''; grid.classList.add('grouped');\n        function section(label, cls, arr){\n          if(!arr || !arr.length) return;\n          var sec=document.createElement('div'); sec.className='ooh-sptier '+cls;\n          var h=document.createElement('div'); h.className='ooh-sptier-h';\n          var b=document.createElement('b'); b.textContent=label; var ln=document.createElement('i');\n          h.appendChild(b); h.appendChild(ln); sec.appendChild(h);\n          var g=document.createElement('div'); g.className='ooh-sptier-grid';\n          arr.forEach(function(s){ g.appendChild(tile(s)); });\n          sec.appendChild(g); grid.appendChild(sec);\n        }\n        TIERS.forEach(function(t,i){ section(t.label, t.cls, buckets[i]); });\n        section('Partners', 't-other', other); // sponsors sin categoría → al final\n      })\n      .catch(function(){ /* falla → quedan los placeholders */ });\n  })();\n\n\n  /* ================= PORTAL \"MIS ENTRADAS\" (cuenta del comprador) ================= */\n  (function(){\n    var ACCT = API + \"/api/public/storefronts/oohsummit/account\";\n    var pov = document.getElementById(\"ooh-portal-ov\");\n    var authBox = document.getElementById(\"ooh-p-auth\"), inBox = document.getElementById(\"ooh-p-in\");\n    var pName = document.getElementById(\"ooh-p-name\"), nameWrap = document.getElementById(\"ooh-p-namewrap\");\n    var pEmail = document.getElementById(\"ooh-p-email\"), pPass = document.getElementById(\"ooh-p-pass\");\n    var pGo = document.getElementById(\"ooh-p-go\"), pMsg = document.getElementById(\"ooh-p-msg\");\n    var pToggle = document.getElementById(\"ooh-p-toggle\"), pToggleT = document.getElementById(\"ooh-p-toggle-t\");\n    var pTitle = document.getElementById(\"ooh-p-title\"), pSub = document.getElementById(\"ooh-p-sub\");\n    var pWho = document.getElementById(\"ooh-p-who\"), pTks = document.getElementById(\"ooh-p-tickets\");\n    var pForgot = document.getElementById(\"ooh-p-forgot\"), pGoogle = document.getElementById(\"ooh-p-google\");\n    var pReset = document.getElementById(\"ooh-p-reset\"), pRpass = document.getElementById(\"ooh-p-rpass\"), pRpass2 = document.getElementById(\"ooh-p-rpass2\"), pRgo = document.getElementById(\"ooh-p-rgo\"), pRmsg = document.getElementById(\"ooh-p-rmsg\");\n    var pmode = \"login\", myName = \"\";\n    function tok(){ try{ return localStorage.getItem(\"ooh_sess\")||\"\"; }catch(e){ return \"\"; } }\n    function setTok(t){ try{ t?localStorage.setItem(\"ooh_sess\",t):localStorage.removeItem(\"ooh_sess\"); }catch(e){} }\n    function openP(){ pov.classList.add(\"on\"); if(tok()){ showIn(); } else { showAuth(); setTimeout(function(){pEmail.focus();},50); } }\n    function closeP(){ pov.classList.remove(\"on\"); }\n    function showAuth(){ authBox.style.display=\"block\"; inBox.style.display=\"none\"; if(pReset)pReset.style.display=\"none\"; }\n    function showIn(){ authBox.style.display=\"none\"; inBox.style.display=\"block\"; if(pReset)pReset.style.display=\"none\"; pWho.textContent=myName||\"\"; loadTickets(); }\n    function showReset(){ authBox.style.display=\"none\"; inBox.style.display=\"none\"; if(pReset)pReset.style.display=\"block\"; }\n    function setMode(m){\n      pmode=m; nameWrap.style.display = m===\"register\"?\"block\":\"none\";\n      pTitle.textContent = m===\"register\"?\"Crear cuenta\":\"Mis entradas\";\n      pSub.textContent = m===\"register\"?\"Registrate para acceder a tus entradas cuando quieras.\":\"Ingresá para ver, descargar y reenviar tus entradas.\";\n      pGo.textContent = m===\"register\"?\"Crear cuenta\":\"Ingresar\";\n      pPass.setAttribute(\"autocomplete\", m===\"register\"?\"new-password\":\"current-password\");\n      pToggleT.textContent = m===\"register\"?\"¿Ya tenés cuenta?\":\"¿No tenés cuenta?\";\n      pToggle.textContent = m===\"register\"?\"Ingresá\":\"Registrate\";\n      pMsg.textContent=\"\"; pMsg.style.color=\"\";\n      if(pForgot) pForgot.style.display = m===\"register\" ? \"none\" : \"block\";\n    }\n    document.getElementById(\"ooh-portal-link\").addEventListener(\"click\", function(e){ e.preventDefault(); openP(); });\n    document.getElementById(\"ooh-p-x\").addEventListener(\"click\", closeP);\n    pov.addEventListener(\"click\", function(e){ if(e.target===pov) closeP(); });\n    pToggle.addEventListener(\"click\", function(e){ e.preventDefault(); setMode(pmode===\"login\"?\"register\":\"login\"); });\n    function pfail(m,color){ pMsg.style.color=color||\"#ff9a9a\"; pMsg.textContent=m; pGo.disabled=false; pGo.textContent = pmode===\"register\"?\"Crear cuenta\":\"Ingresar\"; }\n    pGo.addEventListener(\"click\", function(){\n      var email=(pEmail.value||\"\").trim(), pass=pPass.value||\"\", name=(pName.value||\"\").trim();\n      if(!/^\\S+@\\S+\\.\\S+$/.test(email)){ pfail(\"Ingresá un email válido.\"); return; }\n      if(pass.length<8){ pfail(\"La contraseña debe tener al menos 8 caracteres.\"); return; }\n      if(pmode===\"register\" && !name){ pfail(\"Ingresá tu nombre.\"); return; }\n      pMsg.textContent=\"\"; pGo.disabled=true; pGo.textContent=\"Procesando…\";\n      var url = ACCT + (pmode===\"register\"?\"/register\":\"/login\");\n      var body = pmode===\"register\" ? {email:email,password:pass,name:name} : {email:email,password:pass};\n      fetch(url,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify(body)})\n        .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,status:r.status,b:b}; }).catch(function(){ return {ok:r.ok,status:r.status,b:{}}; }); })\n        .then(function(res){\n          if(res.ok && res.b.token){\n            var u=res.b.user||{}; myName=(u.name||u.email||\"\");\n            if(pmode===\"register\" && u.emailVerified===false){\n              setTok(\"\"); setMode(\"login\"); pMsg.style.color=\"#8fe6a4\";\n              pMsg.textContent=\"¡Cuenta creada! Te enviamos un email para verificarla. Verificala y volvé a ingresar.\";\n              pGo.disabled=false; pGo.textContent=\"Ingresar\"; return;\n            }\n            setTok(res.b.token); showIn(); return;\n          }\n          var em=(res.b&&(res.b.error||res.b.message))||\"No pudimos ingresar.\";\n          if(res.status===403 && /habilitad/i.test(em)){ pfail(\"El acceso a Mis entradas estará disponible muy pronto. Por ahora, tu entrada te llega por email al comprar.\",\"#ffcf8f\"); return; }\n          pfail(em);\n        })\n        .catch(function(){ pfail(\"Error de conexión. Probá de nuevo.\"); });\n    });\n    document.getElementById(\"ooh-p-logout\").addEventListener(\"click\", function(){ setTok(\"\"); myName=\"\"; setMode(\"login\"); showAuth(); });\n    function loadTickets(){\n      pTks.innerHTML = '<div style=\"color:var(--muted);font-size:14px;padding:8px 0;\">Cargando tus entradas…</div>';\n      fetch(ACCT+\"/event-tickets\",{headers:{Accept:\"application/json\",\"Authorization\":\"Bearer \"+tok()}})\n        .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,status:r.status,b:b}; }).catch(function(){ return {ok:r.ok,status:r.status,b:{}}; }); })\n        .then(function(res){\n          if(res.status===401){ setTok(\"\"); showAuth(); setMode(\"login\"); pfail(\"Tu sesión venció. Ingresá de nuevo.\",\"#ffcf8f\"); return; }\n          if(res.status===403 && res.b && res.b.emailVerified===false){\n            pTks.innerHTML=\"\";\n            var d=document.createElement(\"div\"); d.style.cssText=\"border:1px solid var(--line);border-radius:10px;padding:14px;font-size:14px;color:var(--muted);\";\n            d.textContent=\"Verificá tu email para ver tus entradas. Revisá tu casilla (incluí spam).\";\n            var rb=document.createElement(\"button\"); rb.type=\"button\"; rb.textContent=\"Reenviar email de verificación\";\n            rb.style.cssText=\"display:block;margin-top:10px;background:none;border:0;color:var(--red-bright);font-weight:700;cursor:pointer;padding:0;font-family:inherit;text-decoration:underline;\";\n            rb.addEventListener(\"click\", function(){ fetch(ACCT+\"/resend-verification\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({email:(pEmail.value||\"\").trim()})}).then(function(){ rb.textContent=\"Email reenviado ✓\"; rb.disabled=true; }).catch(function(){}); });\n            d.appendChild(rb); pTks.appendChild(d); return;\n          }\n          renderPortal((res.b && res.b.items) || []);\n        })\n        .catch(function(){ pTks.innerHTML='<div style=\"color:#ff9a9a;font-size:14px;\">No pudimos cargar tus entradas. Probá de nuevo.</div>'; });\n    }\n    function reassignForm(insId, tkToken, nmSpan){\n      var toggle=document.createElement(\"button\"); toggle.type=\"button\"; toggle.textContent=\"✉ Reenviar a otra persona\";\n      toggle.style.cssText=\"background:none;border:0;color:var(--muted);font-size:12px;font-weight:700;cursor:pointer;padding:4px 0 0;text-decoration:underline;font-family:inherit;\";\n      var form=document.createElement(\"div\"); form.style.cssText=\"display:none;margin-top:8px;\";\n      var iN=document.createElement(\"input\"); iN.type=\"text\"; iN.placeholder=\"Nombre y apellido\";\n      var iM=document.createElement(\"input\"); iM.type=\"email\"; iM.placeholder=\"Email\";\n      [iN,iM].forEach(function(i){ i.style.cssText=\"width:100%;margin-bottom:8px;background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:8px;padding:10px 12px;color:#fff;font-size:14px;font-family:inherit;\"; });\n      var snd=document.createElement(\"button\"); snd.type=\"button\"; snd.textContent=\"Enviar entrada →\";\n      snd.style.cssText=\"width:100%;background:var(--red-bright);color:#fff;border:0;font-weight:800;font-size:13px;padding:11px;border-radius:8px;cursor:pointer;font-family:inherit;\";\n      var m=document.createElement(\"div\"); m.style.cssText=\"font-size:12px;margin-top:6px;min-height:14px;color:var(--muted);\";\n      form.appendChild(iN); form.appendChild(iM); form.appendChild(snd); form.appendChild(m);\n      toggle.addEventListener(\"click\", function(){ form.style.display = form.style.display===\"none\"?\"block\":\"none\"; });\n      snd.addEventListener(\"click\", function(){\n        var nn=iN.value.trim(), ee=iM.value.trim();\n        if(!nn){ m.style.color=\"#ff9a9a\"; m.textContent=\"Ingresá el nombre.\"; return; }\n        if(!/^\\S+@\\S+\\.\\S+$/.test(ee)){ m.style.color=\"#ff9a9a\"; m.textContent=\"Ingresá un email válido.\"; return; }\n        snd.disabled=true; snd.textContent=\"Enviando…\"; m.style.color=\"var(--muted)\"; m.textContent=\"\";\n        fetch(API+\"/api/public/events/inscriptions/\"+encodeURIComponent(insId)+\"/tickets/\"+encodeURIComponent(tkToken)+\"/reassign\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify({attendeeName:nn,attendeeEmail:ee})})\n          .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,b:b}; }).catch(function(){ return {ok:r.ok,b:{}}; }); })\n          .then(function(res){ if(res.ok){ m.style.color=\"#8fe6a4\"; m.textContent=\"Entrada enviada a \"+ee+\" ✓\"; if(nmSpan) nmSpan.textContent=\"N° \"+(nmSpan.dataset.n||\"\")+\" · \"+nn; snd.textContent=\"Enviada ✓\"; } else { m.style.color=\"#ff9a9a\"; m.textContent=(res.b&&(res.b.error||res.b.message))||\"No pudimos enviarla.\"; snd.disabled=false; snd.textContent=\"Enviar entrada →\"; } })\n          .catch(function(){ m.style.color=\"#ff9a9a\"; m.textContent=\"Error de conexión.\"; snd.disabled=false; snd.textContent=\"Enviar entrada →\"; });\n      });\n      var wrap=document.createElement(\"div\"); wrap.appendChild(toggle); wrap.appendChild(form); return wrap;\n    }\n    function renderPortal(items){\n      pTks.innerHTML=\"\";\n      if(!items.length){ pTks.innerHTML='<div style=\"color:var(--muted);font-size:14px;padding:8px 0;\">Todavía no tenés entradas con esta cuenta. Si compraste con otro email, ingresá con ese email.</div>'; return; }\n      items.forEach(function(it){\n        var card=document.createElement(\"div\"); card.style.cssText=\"border:1px solid var(--line);border-radius:12px;padding:14px;margin-bottom:12px;\";\n        var head=document.createElement(\"div\"); head.style.cssText=\"display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;\";\n        var t=document.createElement(\"b\"); t.textContent=it.editionName||\"OOH Summit 2026\"; t.style.fontSize=\"15px\";\n        var paid=(it.paymentStatus===\"PAID\"||it.status===\"CONFIRMED\");\n        var st=document.createElement(\"span\"); st.textContent=paid?\"Confirmada\":\"Pendiente\"; st.style.cssText=\"font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:\"+(paid?\"#8fe6a4\":\"#ffcf8f\")+\";\";\n        head.appendChild(t); head.appendChild(st); card.appendChild(head);\n        (it.tickets||[]).forEach(function(tk){\n          var row=document.createElement(\"div\"); row.style.cssText=\"padding:8px 0;border-top:1px solid rgba(255,255,255,.06);\";\n          var top=document.createElement(\"div\"); top.style.cssText=\"display:flex;justify-content:space-between;align-items:center;gap:8px;\";\n          var nm=document.createElement(\"span\"); nm.textContent=\"N° \"+(tk.visibleNumber||\"—\")+\" · \"+(tk.attendeeName||\"Entrada\"); nm.style.fontSize=\"14px\"; nm.dataset.n=(tk.visibleNumber||\"\");\n          var dl=document.createElement(\"a\"); dl.href=API+\"/api/public/events/tickets/\"+encodeURIComponent(tk.token)+\"/qr.png\"; dl.target=\"_blank\"; dl.rel=\"noopener\"; dl.setAttribute(\"download\",\"entrada-oohsummit-2026.png\"); dl.textContent=\"Descargar QR ↓\"; dl.style.cssText=\"color:var(--red-bright);font-weight:800;font-size:13px;white-space:nowrap;\";\n          top.appendChild(nm); top.appendChild(dl); row.appendChild(top);\n          if(paid) row.appendChild(reassignForm(it.inscriptionId, tk.token, nm));\n          card.appendChild(row);\n        });\n        var acts=document.createElement(\"div\"); acts.style.cssText=\"display:flex;gap:16px;margin-top:10px;flex-wrap:wrap;\";\n        var cal=document.createElement(\"a\"); cal.href=gcalUrl(); cal.target=\"_blank\"; cal.rel=\"noopener\"; cal.textContent=\"\uD83D\uDDD3 Agendar\"; cal.style.cssText=\"color:var(--muted);font-weight:700;font-size:12px;\";\n        acts.appendChild(cal);\n        if(it.invoiceAvailable && it.tickets && it.tickets[0]){\n          var inv=document.createElement(\"a\"); inv.href=API+\"/api/public/events/inscriptions/\"+encodeURIComponent(it.inscriptionId)+\"/invoice/\"+encodeURIComponent(it.tickets[0].token); inv.target=\"_blank\"; inv.rel=\"noopener\"; inv.textContent=\"\uD83E\uDDFE Ver factura\"; inv.style.cssText=\"color:var(--muted);font-weight:700;font-size:12px;\";\n          acts.appendChild(inv);\n        }\n        card.appendChild(acts); pTks.appendChild(card);\n      });\n    }\n    /* Botón \"Continuar con Google\". Reusa el cargador de Firebase del shell (window.loadFirebase), pero crea\n       un app Firebase SECUNDARIO con authDomain=auth.mobu.market (MISMO sitio registrable que la tienda) en vez\n       de financiera-idp.firebaseapp.com: así el handler de auth es same-site y NO lo rompen las cookies de\n       terceros (el motivo real por el que el popup fallaba en incógnito/móvil). Si el popup igual se bloquea,\n       cae a signInWithRedirect (robusto en móvil). Canjea el idToken con el backend (/account/google). */\n    function oohAuthApp(){\n      try{ return firebase.app('oohAuth'); }catch(e){}\n      var base=(firebase.app && firebase.app().options) || {};\n      var cfg={ apiKey:base.apiKey, authDomain:'auth.mobu.market', projectId:base.projectId, appId:base.appId, messagingSenderId:base.messagingSenderId, storageBucket:base.storageBucket };\n      return firebase.initializeApp(cfg, 'oohAuth');\n    }\n    function exchangeGoogle(idToken){\n      return fetch(ACCT+\"/google\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify({idToken:idToken})})\n        .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,b:b}; }).catch(function(){ return {ok:r.ok,b:{}}; }); });\n    }\n    function onGoogleRes(res){\n      if(res.ok && res.b && res.b.token){ var u=res.b.user||{}; myName=(u.name||u.email||\"\"); setTok(res.b.token); showIn(); return true; }\n      pfail((res.b&&res.b.error)||\"No pudimos iniciar sesión con Google. Probá con email y contraseña.\"); return false;\n    }\n    if(pGoogle){\n      pGoogle.addEventListener(\"click\", function(){\n        var prev=pGoogle.innerHTML;\n        pMsg.textContent=\"\"; pMsg.style.color=\"\";\n        pGoogle.disabled=true; pGoogle.textContent=\"Conectando…\";\n        function restore(){ pGoogle.disabled=false; pGoogle.innerHTML=prev; }\n        Promise.resolve()\n          .then(function(){ return (typeof window.loadFirebase===\"function\") ? window.loadFirebase() : Promise.reject({code:\"nofb\"}); })\n          .then(function(){\n            if(typeof firebase===\"undefined\" || !firebase.auth) throw {code:\"nofb\"};\n            return oohAuthApp().auth().signInWithPopup(new firebase.auth.GoogleAuthProvider());\n          })\n          .then(function(cred){ return cred.user.getIdToken(); })\n          .then(exchangeGoogle)\n          .then(function(res){ restore(); onGoogleRes(res); })\n          .catch(function(e){\n            var code=(e&&e.code)||\"\";\n            if(code===\"auth/popup-closed-by-user\"||code===\"auth/cancelled-popup-request\"){ restore(); pMsg.textContent=\"\"; return; }\n            if(code===\"auth/popup-blocked\"||code===\"auth/operation-not-supported-in-this-environment\"||code===\"auth/web-storage-unsupported\"){\n              // Fallback: SOLO en mismo sitio (*.mobu.market) el redirect a auth.mobu.market es same-site y funciona.\n              // En dominios propios el redirect cruzado lo rompe el particionado de storage -> pedimos permitir el popup.\n              if(/\\.mobu\\.market$/i.test(location.hostname)){\n                try{ sessionStorage.setItem('ooh_gred','1'); }catch(x){}\n                pGoogle.textContent=\"Redirigiendo…\";\n                try{ oohAuthApp().auth().signInWithRedirect(new firebase.auth.GoogleAuthProvider()); return; }catch(e2){}\n              }\n              restore();\n              pfail(\"Tu navegador bloqueó la ventana de Google. Permití las ventanas emergentes para este sitio y volvé a intentar.\"); return;\n            }\n            restore();\n            if(code===\"auth/unauthorized-domain\"){ pfail(\"El acceso con Google todavía no está habilitado para este sitio. Usá email y contraseña por ahora.\"); return; }\n            if(code===\"nofb\"){ pfail(\"El acceso con Google no está disponible en este momento. Usá email y contraseña.\"); return; }\n            pfail(\"No pudimos iniciar sesión con Google. Probá con email y contraseña.\");\n          });\n      });\n      // Al VOLVER de un redirect de Google (sólo si lo disparamos: marca en sessionStorage) → completar el canje.\n      (function(){\n        var mark=false; try{ mark=sessionStorage.getItem('ooh_gred')==='1'; }catch(x){}\n        if(!mark || typeof window.loadFirebase!==\"function\") return;\n        try{ sessionStorage.removeItem('ooh_gred'); }catch(x){}\n        window.loadFirebase().then(function(){\n          if(typeof firebase===\"undefined\"||!firebase.auth) return;\n          return oohAuthApp().auth().getRedirectResult().then(function(res){\n            if(res && res.user){ return res.user.getIdToken().then(exchangeGoogle).then(function(r){ openP(); onGoogleRes(r); }); }\n          });\n        }).catch(function(){});\n      })();\n    }\n    /* Link \"¿Olvidaste tu contraseña?\": manda el email de reset. Respuesta SIEMPRE genérica (anti-enumeración). */\n    if(pForgot){\n      pForgot.addEventListener(\"click\", function(e){\n        e.preventDefault();\n        var email=(pEmail.value||\"\").trim();\n        if(!/^\\S+@\\S+\\.\\S+$/.test(email)){ pfail(\"Escribí tu email arriba y volvé a tocar \\\"¿Olvidaste tu contraseña?\\\".\"); try{pEmail.focus();}catch(x){} return; }\n        var done=function(){ pMsg.style.color=\"#8fe6a4\"; pMsg.textContent=\"Si hay una cuenta con ese email, te enviamos un link para restablecer la contraseña. Revisá tu correo (y el spam).\"; };\n        pForgot.style.pointerEvents=\"none\";\n        fetch(ACCT+\"/forgot-password\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify({email:email})})\n          .then(done).catch(done)\n          .then(function(){ setTimeout(function(){ pForgot.style.pointerEvents=\"\"; }, 2000); });\n      });\n    }\n    /* Guardar nueva contraseña desde el link ?reset=token. */\n    function rfail(m,color){ pRmsg.style.color=color||\"#ff9a9a\"; pRmsg.textContent=m; pRgo.disabled=false; pRgo.textContent=\"Guardar contraseña\"; }\n    if(pRgo){\n      pRgo.addEventListener(\"click\", function(){\n        var p1=pRpass.value||\"\", p2=pRpass2.value||\"\", rtok=window.__OOH_RESET||\"\";\n        if(p1.length<8){ rfail(\"La contraseña debe tener al menos 8 caracteres.\"); return; }\n        if(p1!==p2){ rfail(\"Las contraseñas no coinciden.\"); return; }\n        if(!rtok){ rfail(\"El link no es válido. Pedí uno nuevo desde \\\"¿Olvidaste tu contraseña?\\\".\"); return; }\n        pRmsg.textContent=\"\"; pRgo.disabled=true; pRgo.textContent=\"Guardando…\";\n        fetch(ACCT+\"/reset-password\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify({token:rtok,password:p1})})\n          .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,b:b}; }).catch(function(){ return {ok:r.ok,b:{}}; }); })\n          .then(function(res){\n            if(res.ok && res.b && res.b.token){ var u=res.b.user||{}; myName=(u.name||u.email||\"\"); setTok(res.b.token); window.__OOH_RESET=null; showIn(); }\n            else { rfail((res.b&&res.b.error)||\"No pudimos restablecer la contraseña. Pedí un nuevo link.\"); }\n          })\n          .catch(function(){ rfail(\"Error de conexión. Probá de nuevo.\"); });\n      });\n    }\n    /* \"Volver a iniciar sesión\" desde el panel de reset (salida si el token venció / callejón sin salida). */\n    if(document.getElementById(\"ooh-p-rback\")){\n      document.getElementById(\"ooh-p-rback\").addEventListener(\"click\", function(e){ e.preventDefault(); window.__OOH_RESET=null; setMode(\"login\"); showAuth(); });\n    }\n    /* Si llegó por el link del correo (?reset=token, ya stasheado y removido de la URL en el <head>) → abrir\n       el portal en modo \"nueva contraseña\". */\n    if(window.__OOH_RESET){ pov.classList.add(\"on\"); showReset(); }\n    // Link de verificación de email (?verify=token) o sesión persistida.\n    var vtok = qs(\"verify\");\n    if(vtok){\n      fetch(ACCT+\"/verify\",{method:\"POST\",headers:{\"Content-Type\":\"application/json\",Accept:\"application/json\"},body:JSON.stringify({token:vtok})})\n        .then(function(r){ return r.json().then(function(b){ return {ok:r.ok,b:b}; }).catch(function(){ return {ok:r.ok,b:{}}; }); })\n        .then(function(res){ if(res.ok&&res.b.token){ var u=res.b.user||{}; myName=(u.name||u.email||\"\"); setTok(res.b.token); try{history.replaceState({},\"\",location.origin+\"/\");}catch(e){} openP(); } })\n        .catch(function(){});\n    } else if(tok()){\n      fetch(ACCT+\"/me\",{headers:{Accept:\"application/json\",\"Authorization\":\"Bearer \"+tok()}})\n        .then(function(r){ if(!r.ok){ if(r.status===401) setTok(\"\"); return null; } return r.json(); })\n        .then(function(u){ if(u&&u.email){ myName=(u.name||u.email); } })\n        .catch(function(){});\n    }\n  })();\n})();\n</script>\n\n<!-- ================= MOBU · CONTENIDO EDITABLE (data-mobu-*) ================= -->\n<!-- Estos valores se pueden editar desde MOBU (panel de Contenido, próximamente) sin tocar el HTML.\n     Mientras tanto, editá el JSON de abajo. El motor aplica cada valor a su elemento [data-mobu-*].\n     Si MOBU expone contenido por config (window.MOBU_CONTENT), tiene prioridad sobre este JSON. -->\n<script id=\"mobu-content\" type=\"application/json\">\n{\n  \"exp\": {\n    \"video1\": \"https://oohsummit.com/media/oohsummit/video-01.mp4\",\n    \"video1poster\": \"https://oohsummit.com/media/oohsummit/img-3x-1.jpg\",\n    \"video2\": \"https://oohsummit.com/media/oohsummit/video-02.mp4\",\n    \"video2poster\": \"https://oohsummit.com/media/oohsummit/img-3x-2.jpg\"\n  },\n  \"nov\": {\n    \"titulo\": \"Enterate primero\",\n    \"subtitulo\": \"Agenda, speakers confirmados, sponsors y early birds: te avisamos por email antes que a nadie.\",\n    \"boton\": \"Recibir novedades\"\n  },\n  \"slide\": { \"visible\": true }\n}\n</script>\n<script>\n(function(){\n  function content(){\n    try{ if(window.MOBU_CONTENT && typeof window.MOBU_CONTENT===\"object\") return window.MOBU_CONTENT; }catch(e){}\n    try{ var el=document.getElementById(\"mobu-content\"); if(el) return JSON.parse(el.textContent||\"{}\"); }catch(e){}\n    return {};\n  }\n  function val(c,key){ return String(key||\"\").split(\".\").reduce(function(o,k){ return (o&&o[k]!=null)?o[k]:undefined; }, c); }\n  function apply(){\n    var c=content(); if(!c) return;\n    document.querySelectorAll(\"[data-mobu-text]\").forEach(function(el){ var v=val(c,el.getAttribute(\"data-mobu-text\")); if(v!=null) el.textContent=v; });\n    document.querySelectorAll(\"[data-mobu-html]\").forEach(function(el){ var v=val(c,el.getAttribute(\"data-mobu-html\")); if(v!=null) el.innerHTML=v; });\n    document.querySelectorAll(\"[data-mobu-media]\").forEach(function(el){ var v=val(c,el.getAttribute(\"data-mobu-media\")); if(v){ if(el.getAttribute(\"src\")!==v){ el.setAttribute(\"src\",v); if(el.tagName===\"VIDEO\"){ try{el.load();}catch(e){} } } } });\n    document.querySelectorAll(\"[data-mobu-poster]\").forEach(function(el){ var v=val(c,el.getAttribute(\"data-mobu-poster\")); if(v) el.setAttribute(\"poster\",v); });\n    document.querySelectorAll(\"[data-mobu-visible]\").forEach(function(el){ var v=val(c,el.getAttribute(\"data-mobu-visible\")); if(v===false||v===\"false\"||v===0||v===\"0\") el.style.display=\"none\"; });\n    document.querySelectorAll(\"[data-mobu-button]\").forEach(function(el){ var b=val(c,el.getAttribute(\"data-mobu-button\")); if(b&&typeof b===\"object\"){ if(b.label!=null) el.textContent=b.label; if(b.href!=null&&(\"href\" in el)) el.setAttribute(\"href\",b.href); } });\n  }\n  if(document.readyState===\"loading\") document.addEventListener(\"DOMContentLoaded\",apply); else apply();\n  try{ window.MOBU_applyContent = apply; }catch(e){}\n})();\n</script>\n<!-- ================= /MOBU · CONTENIDO EDITABLE ================= -->\n\n<style id=\"ooh-portal-v2\">\n/* Animación \"cajas MOBU\": el diálogo entra escalando + fade; los bloques internos aparecen escalonados. */\n@keyframes ooh-dlg-in{ from{ opacity:0; transform:translateY(16px) scale(.955); } to{ opacity:1; transform:none; } }\n@keyframes ooh-box-in{ from{ opacity:0; transform:translateY(12px) scale(.98); } to{ opacity:1; transform:none; } }\n.oohs .ov.on .dlg{ animation:ooh-dlg-in .42s cubic-bezier(.16,1,.3,1) both; }\n.oohs .ov.on #ooh-p-in>*, .oohs .ov.on #ooh-p-auth>*{ animation:ooh-box-in .5s cubic-bezier(.16,1,.3,1) both; }\n.oohs .ov.on #ooh-p-in>*:nth-child(1),.oohs .ov.on #ooh-p-auth>*:nth-child(1){ animation-delay:.05s }\n.oohs .ov.on #ooh-p-in>*:nth-child(2),.oohs .ov.on #ooh-p-auth>*:nth-child(2){ animation-delay:.10s }\n.oohs .ov.on #ooh-p-in>*:nth-child(3),.oohs .ov.on #ooh-p-auth>*:nth-child(3){ animation-delay:.15s }\n.oohs .ov.on #ooh-p-in>*:nth-child(4),.oohs .ov.on #ooh-p-auth>*:nth-child(4){ animation-delay:.20s }\n.oohs .ov.on #ooh-p-in>*:nth-child(5),.oohs .ov.on #ooh-p-auth>*:nth-child(5){ animation-delay:.25s }\n.oohs .ov.on #ooh-p-in>*:nth-child(6),.oohs .ov.on #ooh-p-auth>*:nth-child(6){ animation-delay:.30s }\n.oohs .ov.on #ooh-p-in>*:nth-child(n+7),.oohs .ov.on #ooh-p-auth>*:nth-child(n+7){ animation-delay:.34s }\n@media (prefers-reduced-motion:reduce){ .oohs .ov.on .dlg, .oohs .ov.on #ooh-p-in>*, .oohs .ov.on #ooh-p-auth>*{ animation:none; } }\n/* Botón \"Cerrar sesión\" con estilo de botón completo (antes se veía chico/sin estilo). */\n.oohs .dlg .a-ghost{ width:100%; display:block; box-sizing:border-box; background:rgba(255,255,255,.06); color:#fff; border:1px solid var(--line); font-weight:800; font-size:15px; padding:14px; border-radius:10px; cursor:pointer; font-family:inherit; transition:background .2s,border-color .2s,transform .12s; }\n.oohs .dlg .a-ghost:hover{ background:rgba(255,255,255,.12); border-color:var(--red-bright); transform:translateY(-1px); }\n.oohs .dlg .a-ghost:active{ transform:translateY(0); }\n/* Tarjeta de perfil del cliente. */\n.oohs .ooh-prof{ display:flex; align-items:center; gap:12px; background:rgba(255,255,255,.05); border:1px solid var(--line); border-radius:12px; padding:12px 14px; margin:4px 0 6px; }\n.oohs .ooh-prof-av{ flex:none; width:42px; height:42px; border-radius:50%; background:var(--red-bright); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:900; font-size:18px; text-transform:uppercase; }\n.oohs .ooh-prof-meta{ display:flex; flex-direction:column; min-width:0; }\n.oohs .ooh-prof-meta strong{ font-size:15px; color:#fff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.oohs .ooh-prof-meta span{ font-size:13px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.oohs .ooh-p-tksh{ font-size:12px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); margin:16px 0 8px; }\n/* Responsive fino del diálogo. */\n@media (max-width:600px){\n  .oohs .ov{ padding:14px; align-items:flex-end; }\n  .oohs .dlg{ padding:22px 18px; border-radius:16px 16px 14px 14px; max-height:94vh; }\n  .oohs .dlg h4{ font-size:19px; }\n  .oohs .ooh-prof-av{ width:38px; height:38px; font-size:16px; }\n}\n</style>\n<script>\n/* Portal v2: perfil de cliente + \"Comprar entradas\" con pre-llenado. Aditivo, corre después del script base. */\n(function(){\n  try{\n    var API=\"https://api.mobu.market\", ACCT=API+\"/api/public/storefronts/oohsummit/account\";\n    function tok(){ try{ return localStorage.getItem(\"ooh_sess\")||\"\"; }catch(e){ return \"\"; } }\n    var inBox=document.getElementById(\"ooh-p-in\"); if(!inBox) return;\n    if(document.getElementById(\"ooh-p-prof\")) return; // ya inyectado\n    var tks=document.getElementById(\"ooh-p-tickets\");\n    var logout=document.getElementById(\"ooh-p-logout\");\n    // Tarjeta de perfil (arriba de las entradas).\n    var prof=document.createElement(\"div\"); prof.className=\"ooh-prof\"; prof.id=\"ooh-p-prof\";\n    prof.innerHTML='<div class=\"ooh-prof-av\" id=\"ooh-p-av\">·</div><div class=\"ooh-prof-meta\"><strong id=\"ooh-p-pname\"></strong><span id=\"ooh-p-pemail\"></span></div>';\n    var head=document.createElement(\"div\"); head.className=\"ooh-p-tksh\"; head.textContent=\"Tus entradas\";\n    if(tks && tks.parentNode){ tks.parentNode.insertBefore(prof, tks); tks.parentNode.insertBefore(head, tks); }\n    // Botón \"Comprar entradas\" (antes del de cerrar sesión).\n    var buy=document.createElement(\"button\"); buy.className=\"go\"; buy.id=\"ooh-p-buy\"; buy.type=\"button\"; buy.textContent=\"Comprar entradas\"; buy.style.marginTop=\"18px\";\n    if(logout && logout.parentNode){ logout.parentNode.insertBefore(buy, logout); logout.style.marginTop=\"10px\"; }\n    var CUR={name:\"\",email:\"\"};\n    function renderProfile(){\n      var t=tok(); if(!t) return;\n      fetch(ACCT+\"/me\",{headers:{Accept:\"application/json\",\"Authorization\":\"Bearer \"+t}})\n        .then(function(r){ return r.ok?r.json():null; })\n        .then(function(u){ if(!u) return;\n          CUR.name=(u.name||\"\").trim(); CUR.email=(u.email||\"\").trim();\n          var pn=document.getElementById(\"ooh-p-pname\"), pe=document.getElementById(\"ooh-p-pemail\"),\n              av=document.getElementById(\"ooh-p-av\"), who=document.getElementById(\"ooh-p-who\");\n          if(pn) pn.textContent=CUR.name||CUR.email||\"Tu cuenta\";\n          if(pe) pe.textContent=CUR.email;\n          if(av) av.textContent=((CUR.name||CUR.email||\"?\")[0]||\"?\");\n          if(who) who.textContent=CUR.name||CUR.email||\"\";\n        }).catch(function(){});\n    }\n    // \"Comprar entradas\": cierra el modal, pre-llena nombre+email y baja al checkout.\n    buy.addEventListener(\"click\", function(){\n      var ov=document.getElementById(\"ooh-portal-ov\"); if(ov) ov.classList.remove(\"on\");\n      try{\n        var nm=document.getElementById(\"ooh-name\"), em=document.getElementById(\"ooh-email\");\n        if(nm && CUR.name && !nm.value){ nm.value=CUR.name; }\n        if(em && CUR.email && !em.value){ em.value=CUR.email; }\n      }catch(e){}\n      var sec=document.getElementById(\"entradas\"); if(sec){ setTimeout(function(){ sec.scrollIntoView({behavior:\"smooth\",block:\"start\"}); }, 60); }\n    });\n    // Al abrirse el panel logueado (display:block) → refrescar perfil desde /me.\n    try{\n      var mo=new MutationObserver(function(){ if(inBox.style.display!==\"none\") renderProfile(); });\n      mo.observe(inBox,{attributes:true,attributeFilter:[\"style\"]});\n    }catch(e){}\n    if(inBox.style.display!==\"none\") renderProfile();\n  }catch(e){}\n})();\n</script>\n\n\n<script>\n(function(){\n  var shots=[].slice.call(document.querySelectorAll('.ooh-shot[data-bg]'));\n  function show(el){ var u=el.getAttribute('data-bg'); if(u){ el.style.backgroundImage=\"url('\"+u+\"')\"; el.removeAttribute('data-bg'); } }\n  if(!('IntersectionObserver' in window)){ shots.forEach(show); return; }\n  var io=new IntersectionObserver(function(es){ es.forEach(function(e){ if(e.isIntersecting){ show(e.target); io.unobserve(e.target); } }); }, { rootMargin:'800px 0px' });\n  shots.forEach(function(el){ io.observe(el); });\n})();\n</script>\n\n<style id=\"ooh-live-css\">\n.oohs .nav .links a{white-space:nowrap}\n@media(max-width:1360px) and (min-width:921px){.oohs .nav .links{gap:18px}.oohs .nav .links a{letter-spacing:.12em}}\n.oohs .nav .links a.ooh-live-pill{display:inline-flex;white-space:nowrap;align-items:center;gap:8px;color:#fff;padding:9px 14px;border:1px solid rgba(255,255,255,.38);border-radius:999px;letter-spacing:.16em;min-height:40px;transition:background-color .2s,border-color .2s}\n.oohs .nav .links a.ooh-live-pill:hover{background:rgba(228,54,46,.16);border-color:var(--red-bright)}\n.oohs .nav .links a.ooh-live-pill:focus-visible,.oohs .ooh-live-sound:focus-visible,.oohs .ooh-live-foot a:focus-visible{outline:2px solid #fff;outline-offset:3px}\n@media(max-width:920px){.oohs .nav .links a{white-space:nowrap}\n@media(max-width:1360px) and (min-width:921px){.oohs .nav .links{gap:18px}.oohs .nav .links a{letter-spacing:.12em}}\n.oohs .nav .links a.ooh-live-pill{display:inline-flex;white-space:nowrap;padding:8px 12px;font-size:12px;letter-spacing:.12em}.oohs .nav .links{gap:10px}}\n.oohs .ooh-live-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--red-bright);flex:0 0 auto}\n.oohs .ooh-live-dot::after{content:\"\";position:absolute;inset:0;border-radius:50%;background:var(--red-bright);animation:oohLivePulse 1.6s cubic-bezier(.22,1,.36,1) infinite}\n@keyframes oohLivePulse{0%{transform:scale(1);opacity:.7}100%{transform:scale(2.8);opacity:0}}\n.oohs .ooh-live{padding:clamp(72px,10vw,120px) 0;overflow:hidden}\n.oohs .ooh-live-eyebrow{display:inline-flex;align-items:center;gap:10px;color:var(--red-bright)}\n.oohs .ooh-live .title{max-width:900px}\n.oohs .ooh-live-frame{position:relative;margin-top:clamp(28px,4vw,44px);aspect-ratio:16/9;width:100%;border-radius:14px;overflow:hidden;background:#000;box-shadow:0 30px 80px -30px rgba(228,54,46,.45),0 0 0 1px rgba(255,255,255,.08);transform:translate3d(0,40px,0) scale(.96);opacity:0;clip-path:inset(6% 4% 6% 4% round 14px);will-change:transform,opacity,clip-path;transition:transform .9s cubic-bezier(.22,1,.36,1),opacity .7s cubic-bezier(.22,1,.36,1),clip-path 1s cubic-bezier(.22,1,.36,1)}\n.oohs .ooh-live-frame.is-in{transform:none;opacity:1;clip-path:inset(0 0 0 0 round 14px)}\n.oohs .ooh-live-frame.is-done{will-change:auto}\n.oohs .ooh-live-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;opacity:0;transition:opacity .6s cubic-bezier(.22,1,.36,1)}\n.oohs .ooh-live-frame iframe.is-ready{opacity:1}\n.oohs .ooh-live-poster{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:radial-gradient(ellipse at 50% 60%,rgba(179,30,35,.35),rgba(14,14,15,1) 70%);color:#fff}\n.oohs .ooh-live-badge{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:800;letter-spacing:.24em;padding:8px 14px;border-radius:999px;background:var(--red-bright)}\n.oohs .ooh-live-badge .ooh-live-dot{background:#fff}.oohs .ooh-live-badge .ooh-live-dot::after{background:#fff}\n.oohs .ooh-live-wait{font-size:14px;color:rgba(255,255,255,.72);letter-spacing:.04em}\n.oohs .ooh-live-sound{position:absolute;right:16px;bottom:16px;z-index:2;min-height:44px;padding:0 18px;border:0;border-radius:999px;background:#fff;color:var(--ink);font:inherit;font-size:14px;font-weight:800;letter-spacing:.06em;cursor:pointer;box-shadow:0 8px 24px rgba(0,0,0,.35);transition:transform .2s cubic-bezier(.22,1,.36,1),opacity .2s}\n.oohs .ooh-live-sound:hover{transform:translateY(-1px)}.oohs .ooh-live-sound:active{transform:scale(.97)}\n.oohs .ooh-live-frame.is-off iframe{opacity:0;pointer-events:none}\n.oohs .ooh-live-frame.is-off .ooh-live-badge{background:rgba(255,255,255,.12)}\n.oohs .ooh-live-frame.is-off .ooh-live-wait{font-size:clamp(15px,1.6vw,18px);color:#fff;max-width:30ch;text-align:center;line-height:1.4}\n.oohs .ooh-live-foot{margin-top:18px;font-size:15px;color:rgba(255,255,255,.66)}\n.oohs .ooh-live-foot a{color:#fff;font-weight:700;border-bottom:1px solid rgba(255,255,255,.4)}\n@media(max-width:600px){.oohs .ooh-live-frame{border-radius:10px;margin-left:-8px;margin-right:-8px;width:calc(100% + 16px)}.oohs .ooh-live-sound{right:10px;bottom:10px}}\n@media (prefers-reduced-motion: reduce){.oohs .ooh-live-frame{transform:none;clip-path:none;transition:opacity .4s linear}.oohs .ooh-live-dot::after{animation:none;opacity:0}}\n</style>\n\n<script id=\"ooh-live-js\">\n(function(){\n  var frame=document.getElementById('ooh-live-frame'); if(!frame) return;\n  var sec=document.getElementById('envivo'), btn=document.getElementById('ooh-live-sound'), navBtn=document.getElementById('ooh-live-nav');\n  var reduce=window.matchMedia&&window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var SRC='https://www.youtube.com/embed/live_stream?channel=UCdoAcWzEL20h9zXveevMxwg&autoplay=1&mute=1&playsinline=1&rel=0&modestbranding=1&enablejsapi=1&origin='+encodeURIComponent(location.origin);\n  var ifr=null;\n  function load(){\n    if(ifr) return; ifr=document.createElement('iframe');\n    ifr.title='Transmisión en vivo del OOH Summit'; ifr.allow='autoplay; encrypted-media; picture-in-picture; fullscreen'; ifr.allowFullscreen=true;\n    ifr.referrerPolicy='strict-origin-when-cross-origin';\n    ifr.addEventListener('load',function(){ requestAnimationFrame(function(){ ifr.classList.add('is-ready'); if(!frame.classList.contains('is-off')) btn.hidden=false; ifr.contentWindow.postMessage(JSON.stringify({event:'listening',id:'ooh-live'}),'*'); }); });\n    ifr.src=SRC; frame.insertBefore(ifr, btn);\n  }\n  function reveal(){ if(frame.classList.contains('is-in')) return; frame.classList.add('is-in'); setTimeout(function(){frame.classList.add('is-done');},1100); }\n  function cmd(f){ if(ifr&&ifr.contentWindow) ifr.contentWindow.postMessage(JSON.stringify({event:'command',func:f,args:[]}),'*'); }\n  btn.addEventListener('click',function(){ cmd('unMute'); cmd('playVideo'); btn.hidden=true; });\n  // Estado del reproductor por la IFrame API: si el canal no está transmitiendo, YouTube responde onError y en\n  // vez de su cartel de «no disponible» se muestra el nuestro; se reintenta cada 60 s hasta que arranque.\n  var wait=document.getElementById('ooh-live-wait'), retry=null;\n  function offline(){\n    frame.classList.add('is-off'); btn.hidden=true;\n    wait.textContent='La transmisión arranca con la primera charla. Dejá esta página abierta: se conecta sola.';\n    if(!retry) retry=setInterval(function(){ if(ifr) ifr.src=SRC; },60000);\n  }\n  function online(){ frame.classList.remove('is-off'); if(retry){ clearInterval(retry); retry=null; } }\n  window.addEventListener('message',function(e){\n    if(!ifr||e.source!==ifr.contentWindow||!/youtube(-nocookie)?\\.com$/.test(new URL(e.origin).hostname)) return;\n    var d; try{ d=typeof e.data==='string'?JSON.parse(e.data):e.data; }catch(_){ return; }\n    if(!d) return;\n    if(d.event==='onError') offline();\n    if(d.event==='onStateChange'&&(d.info===1||d.info===3)) online();\n    if(d.event==='infoDelivery'&&d.info&&(d.info.playerState===1||d.info.playerState===3)) online();\n  });\n  if('IntersectionObserver' in window){\n    new IntersectionObserver(function(es,o){ es.forEach(function(e){ if(e.isIntersecting){ load(); o.disconnect(); } }); },{rootMargin:'600px 0px'}).observe(sec);\n    new IntersectionObserver(function(es,o){ es.forEach(function(e){ if(e.isIntersecting){ reveal(); o.disconnect(); } }); },{threshold:.08}).observe(frame);\n  } else { load(); reveal(); }\n  function target(){\n    var y=window.pageYOffset, st=sec.getBoundingClientRect().top+y, fr=frame.getBoundingClientRect(), ft=fr.top+y, nav=76;\n    // Si la sección entera entra, se ve desde el título; si no, se centra el reproductor bajo la barra.\n    return Math.round((ft+fr.height-st+nav)<=window.innerHeight ? st-nav+4 : ft-Math.max(nav+12,(window.innerHeight-fr.height+nav)/2));\n  }\n  function go(b){ window.scrollTo({top:target(),behavior:b}); }\n  if(navBtn) navBtn.addEventListener('click',function(ev){\n    ev.preventDefault(); load();\n    go(reduce?'auto':'smooth');\n    // Lo que carga más arriba (imágenes, hero) puede correr la página mientras se desplaza: se corrige al llegar.\n    setTimeout(function(){ if(Math.abs(target()-window.pageYOffset)>8) go('auto'); },1100);\n    if(history.replaceState) history.replaceState(null,'','#envivo');\n  });\n  if(location.hash==='#envivo'){ load(); }\n})();\n</script>\n","accentColor":"#796afd","secondaryColor":"#0d9488","logoUrl":"","logoDarkUrl":"","logoScale":40,"faviconUrl":"https://firebasestorage.googleapis.com/v0/b/financiera-idp.firebasestorage.app/o/storefront%2Fc0ef1cd9-edfd-4d4e-8196-3f18590bbb2f%2F1787136128154_favicon.png?alt=media&token=5d1f91dc-590b-4e27-946c-0d625bf5da4d","heroTitle":"OOH Summit México 2026","heroSubtitle":"El summit de OOH & DOOH más grande de LatAm · 14–15 oct · CDMX. Comprá tu entrada.","currencyCode":null,"paymentMethods":[],"shippingMethods":[],"shippingOptions":[],"gtmContainerId":"GTM-NV87DQSQ","gaMeasurementId":"G-B48PKB17X1","metaPixelId":"1078732781572328","pagesJson":"[{\"key\":\"como-comprar\",\"title\":\"Cómo comprar\",\"body\":\"Comprar en nuestra tienda es muy fácil:\\n\\n1. Navegá el catálogo y elegí tus productos.\\n2. Agregalos al carrito y revisá tu pedido.\\n3. Completá tus datos y la dirección de envío.\\n4. Elegí el medio de pago y confirmá la compra.\\n\\nTe llega la confirmación por email con el seguimiento del pedido.\",\"visible\":true,\"placement\":\"footer\",\"format\":\"text\",\"type\":\"help\",\"inHeader\":false,\"inHome\":false},{\"key\":\"seccion\",\"title\":\"Comprar entradas — OOH Summit México 2026\",\"body\":\"<div id=\\\"mobu-tickets\\\" data-edition=\\\"ee4e6f9b-9321-4a10-b49d-918dab78bbc8\\\"></div>\\n<style>\\n#mobu-tickets{--tkcard:#17171a;--tkline:#26262b;--tkred:#E11D2A;--tkred2:#b91520;--tktxt:#f5f5f6;--tkmut:#9aa0a6;font-family:inherit;max-width:1080px;margin:0 auto}\\n#mobu-tickets *{box-sizing:border-box}\\n#mobu-tickets .tkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}\\n#mobu-tickets .tkcard{background:var(--tkcard);border:1px solid var(--tkline);border-radius:14px;padding:18px;display:flex;flex-direction:column;gap:5px}\\n#mobu-tickets .tkname{font-size:15px;font-weight:800;color:var(--tktxt);letter-spacing:.02em;text-transform:uppercase}\\n#mobu-tickets .tkdesc{font-size:13px;color:var(--tkmut)}\\n#mobu-tickets .tkprice{font-size:22px;font-weight:800;color:var(--tktxt);margin-top:4px}\\n#mobu-tickets .tkmeta{font-size:12px;color:var(--tkmut)}\\n#mobu-tickets .tkbtn{margin-top:10px;width:100%;border:0;border-radius:10px;background:var(--tkred);color:#fff;font-weight:800;font-size:14px;padding:11px;cursor:pointer}\\n#mobu-tickets .tkbtn:hover{background:var(--tkred2)}\\n#mobu-tickets .tkbtn[disabled]{background:#2a2a2e;color:#6b7280;cursor:not-allowed}\\n#mobu-tickets .tkmsg{color:var(--tkmut);font-size:14px;padding:14px 0}\\n#mobu-tickets .tkov{position:fixed;inset:0;background:rgba(0,0,0,.72);display:flex;align-items:center;justify-content:center;padding:16px;z-index:99999}\\n#mobu-tickets .tkmodal{background:#121214;border:1px solid var(--tkline);border-radius:16px;width:100%;max-width:440px;padding:22px}\\n#mobu-tickets .tkmt{font-size:18px;font-weight:800;color:var(--tktxt);text-transform:uppercase}\\n#mobu-tickets .tkms{font-size:13px;color:var(--tkmut);margin:2px 0 12px}\\n#mobu-tickets .tklb{display:block;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--tkmut);margin:12px 0 5px}\\n#mobu-tickets .tkin{width:100%;background:#e9edf5;border:0;border-radius:10px;padding:12px;font-size:15px;color:#111}\\n#mobu-tickets .tksub{margin-top:16px;width:100%;border:0;border-radius:10px;background:var(--tkred);color:#fff;font-weight:800;font-size:15px;padding:13px;cursor:pointer}\\n#mobu-tickets .tksub[disabled]{opacity:.6;cursor:default}\\n#mobu-tickets .tkx{float:right;background:0;border:0;color:var(--tkmut);font-size:22px;line-height:1;cursor:pointer}\\n#mobu-tickets .tkerr{color:#fca5a5;font-size:13px;margin-top:10px}\\n#mobu-tickets .tkok{color:#86efac;font-size:14px;margin-top:10px}\\n</style>\\n<script>\\n(function(){\\nvar API=\\\"https://api.mobu.market/api/public/events\\\";\\nvar root=document.getElementById(\\\"mobu-tickets\\\");\\nif(!root||root.__init)return; root.__init=1;\\nvar ED=root.getAttribute(\\\"data-edition\\\");\\nvar wrap=document.createElement(\\\"div\\\"); root.appendChild(wrap);\\nwrap.innerHTML=\\\"<div class='tkmsg'>Cargando entradas…</div>\\\";\\nfunction money(p,c){ if(p==null||Number(p)===0) return \\\"Gratis\\\"; try{return (c?c+\\\" \\\":\\\"\\\")+Number(p).toLocaleString(\\\"es-AR\\\");}catch(e){return (c?c+\\\" \\\":\\\"\\\")+p;} }\\nfunction esc(s){return (s==null?\\\"\\\":String(s)).replace(/[&<>\\\"]/g,function(m){return {'&':'&amp;','<':'&lt;','>':'&gt;','\\\"':'&quot;'}[m];});}\\nfunction saleOpen(t){ var now=Date.now();\\n if(t.saleStartsAt && new Date(t.saleStartsAt).getTime()>now) return {ok:false,label:\\\"Próximamente\\\"};\\n if(t.saleEndsAt && new Date(t.saleEndsAt).getTime()<now) return {ok:false,label:\\\"Cerrada\\\"};\\n if(t.available!=null && Number(t.available)<=0) return {ok:false,label:\\\"Agotado\\\"};\\n return {ok:true}; }\\nfetch(API+\\\"/editions/\\\"+ED).then(function(r){return r.json();}).then(function(ed){\\n var types=(ed&&ed.ticketTypes)||[];\\n if(!types.length){ wrap.innerHTML=\\\"<div class='tkmsg'>Todavía no hay entradas disponibles.</div>\\\"; return; }\\n var g=document.createElement(\\\"div\\\"); g.className=\\\"tkgrid\\\";\\n types.forEach(function(t){\\n  var st=saleOpen(t); var free=(t.price==null||Number(t.price)===0);\\n  var card=document.createElement(\\\"div\\\"); card.className=\\\"tkcard\\\";\\n  card.innerHTML=\\\"<div class='tkname'>\\\"+esc(t.name)+\\\"</div>\\\"+(t.description?\\\"<div class='tkdesc'>\\\"+esc(t.description)+\\\"</div>\\\":\\\"\\\")+\\\"<div class='tkprice'>\\\"+esc(money(t.price,t.currency||ed.currency))+\\\"</div>\\\"+(t.available!=null?\\\"<div class='tkmeta'>\\\"+esc(t.available)+\\\" disponibles</div>\\\":\\\"\\\");\\n  var b=document.createElement(\\\"button\\\"); b.className=\\\"tkbtn\\\";\\n  if(st.ok){ b.textContent=free?\\\"Registrarme\\\":\\\"Comprar\\\"; b.onclick=function(){openModal(t,ed);}; } else { b.textContent=st.label; b.disabled=true; }\\n  card.appendChild(b); g.appendChild(card);\\n });\\n wrap.innerHTML=\\\"\\\"; wrap.appendChild(g);\\n}).catch(function(){ wrap.innerHTML=\\\"<div class='tkmsg'>No pudimos cargar las entradas. Recargá la página.</div>\\\"; });\\nfunction openModal(t,ed){\\n var free=(t.price==null||Number(t.price)===0);\\n var ov=document.createElement(\\\"div\\\"); ov.className=\\\"tkov\\\";\\n ov.innerHTML=\\\"<div class='tkmodal'><button class='tkx' data-x>&times;</button><div class='tkmt'>\\\"+esc(t.name)+\\\"</div><div class='tkms'>\\\"+esc(money(t.price,t.currency||ed.currency))+\\\" · \\\"+esc([ed.city,ed.venue].filter(Boolean).join(\\\" · \\\"))+\\\"</div><label class='tklb'>Nombre y apellido</label><input class='tkin' data-name autocomplete='name'><label class='tklb'>Email</label><input class='tkin' data-email type='email' autocomplete='email'><label class='tklb'>Empresa (opcional)</label><input class='tkin' data-company autocomplete='organization'><label class='tklb'>Código de descuento o invitación (opcional)</label><input class='tkin' data-code placeholder='Ej. OOH-XXXXXXXX'><button class='tksub' data-go>\\\"+(free?\\\"Registrarme\\\":\\\"Continuar al pago\\\")+\\\"</button><div class='tkerr' data-err style='display:none'></div><div class='tkok' data-ok style='display:none'></div></div>\\\";\\n root.appendChild(ov);\\n var q=function(s){return ov.querySelector(s);};\\n ov.addEventListener(\\\"click\\\",function(e){ if(e.target===ov) ov.remove(); });\\n q(\\\"[data-x]\\\").onclick=function(){ov.remove();};\\n q(\\\"[data-go]\\\").onclick=function(){\\n  var name=q(\\\"[data-name]\\\").value.trim(), email=q(\\\"[data-email]\\\").value.trim();\\n  var err=q(\\\"[data-err]\\\"), ok=q(\\\"[data-ok]\\\"); err.style.display=\\\"none\\\"; ok.style.display=\\\"none\\\";\\n  if(!name){ err.textContent=\\\"Ingresá tu nombre y apellido.\\\"; err.style.display=\\\"block\\\"; return; }\\n  if(!/^[^@\\\\s]+@[^@\\\\s]+\\\\.[^@\\\\s]+$/.test(email)){ err.textContent=\\\"Ingresá un email válido.\\\"; err.style.display=\\\"block\\\"; return; }\\n  var btn=q(\\\"[data-go]\\\"); btn.disabled=true; var old=btn.textContent; btn.textContent=\\\"Procesando…\\\";\\n  fetch(API+\\\"/editions/\\\"+ed.id+\\\"/register\\\",{method:\\\"POST\\\",headers:{\\\"Content-Type\\\":\\\"application/json\\\"},body:JSON.stringify({attendeeName:name,attendeeEmail:email,company:q(\\\"[data-company]\\\").value.trim()||null,ticketTypeId:t.id,promoCode:q(\\\"[data-code]\\\").value.trim()||null})})\\n   .then(function(r){ return r.json().then(function(j){return {s:r.status,j:j};}); })\\n   .then(function(res){ var j=res.j||{};\\n    if(res.s>=400){ err.textContent=j.error||\\\"No se pudo procesar la inscripción.\\\"; err.style.display=\\\"block\\\"; btn.disabled=false; btn.textContent=old; return; }\\n    if(j.checkoutUrl){ window.location.href=j.checkoutUrl; return; }\\n    if(j.ticketUrl){ window.location.href=j.ticketUrl; return; }\\n    if(j.requiresKycBeforePayment){ ok.textContent=\\\"Te registramos. Necesitás verificar tu identidad; te escribimos por email.\\\"; ok.style.display=\\\"block\\\"; btn.textContent=\\\"Listo\\\"; return; }\\n    ok.textContent=\\\"¡Listo! Te enviamos los detalles por email.\\\"; ok.style.display=\\\"block\\\"; btn.textContent=\\\"Listo\\\";\\n   }).catch(function(){ err.textContent=\\\"Error de conexión. Reintentá en un momento.\\\"; err.style.display=\\\"block\\\"; btn.disabled=false; btn.textContent=old; });\\n };\\n}\\n})();\\n</script>\",\"visible\":true,\"placement\":\"home\",\"format\":\"html\",\"type\":\"html\",\"inHeader\":false,\"inHome\":true}]","footerJson":"{\"about\":\"\",\"email\":\"\",\"phone\":\"\",\"address\":\"\",\"hours\":\"\"}","secondaryJson":"{\"type\":\"cta\",\"title\":\"\",\"text\":\"\",\"buttonText\":\"\",\"buttonTarget\":\"shop\"}","webMode":"landing","fontFamily":"poppins","webchatEnabled":false,"webchatToken":null,"analyticsEnabled":true,"socialJson":null,"bannerEnabled":false,"bannerImageUrl":null,"bannerAnimation":"mobu","bannerFeaturedHandle":null,"contentJson":null,"shareTitle":"OOH Summit México 2026","shareDescription":"El summit de OOH & DOOH más grande de LatAm · 14–15 oct · CDMX. Conseguí tu entrada.","shareImageUrl":"https://firebasestorage.googleapis.com/v0/b/financiera-idp.firebasestorage.app/o/storefront%2Fc0ef1cd9-edfd-4d4e-8196-3f18590bbb2f%2Fshare%2F1788526295225_Captura_de_pantalla_2026-09-04_a_la_s__9.51.27_a._m..jpg?alt=media&token=02e31804-0b08-4371-9763-8502e83936d4","customDomain":"oohsummit.com","customDomainStatus":"ACTIVE","popupsJson":"{\"version\":1,\"popups\":[{\"id\":\"p_ooh_cupos\",\"enabled\":true,\"type\":\"IMAGE\",\"imageUrl\":\"https://oohsummit.com/media/oohsummit/promo-ultimos-cupos.webp\",\"imageAlt\":\"Últimos cupos. El OOH Summit está por comenzar. Polyforum Siqueiros, 14 y 15 de octubre. Boletos en oohsummit.com\",\"linkUrl\":\"#entradas\",\"linkNewTab\":false,\"html\":null,\"width\":560,\"height\":null,\"trigger\":\"DELAY\",\"delaySeconds\":1,\"scrollPercent\":null,\"frequency\":\"EVERY_PAGEVIEW\",\"pages\":[\"home\"],\"devices\":\"ALL\",\"startsAt\":null,\"endsAt\":null,\"closeOnBackdrop\":true}]}"}