{"product_id":"ebook-recetas-salsas-sopas","title":"EBOOK RECETAS + SALSAS + SOPAS","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!-- Las tiendas de vendedores son landing pages para tráfico pago (Meta\/Google Ads),\n       no deben aparecer en búsqueda orgánica bajo la marca \"impultienda\". --\u003e\n\u003cp\u003e\u003cmeta name=\"robots\" content=\"noindex, nofollow\"\u003e\u003cmeta name=\"description\" content=\"Descargá Mentes Kids: más de 1.700 actividades imprimibles por edad. Aprenden jugando de 2 a 10 y vos ganás tiempo. Garantía 7 días.\"\u003e\u003cmeta name=\"facebook-domain-verification\" content=\"uict165dyoyrbcf9m1qvlwklfprvfc\"\u003e\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\"\u003e\u003clink rel=\"preload\" as=\"style\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800;900\u0026amp;family=Poppins:wght@400;500;600;700;800;900\u0026amp;family=Space+Grotesk:wght@400;500;600;700\u0026amp;family=Space+Mono:wght@400;700\u0026amp;family=Nunito:wght@400;500;600;700;800;900\u0026amp;family=Bungee\u0026amp;family=Chakra+Petch:wght@400;500;600;700\u0026amp;display=swap\"\u003e\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800;900\u0026amp;family=Poppins:wght@400;500;600;700;800;900\u0026amp;family=Space+Grotesk:wght@400;500;600;700\u0026amp;family=Space+Mono:wght@400;700\u0026amp;family=Nunito:wght@400;500;600;700;800;900\u0026amp;family=Bungee\u0026amp;family=Chakra+Petch:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\" media=\"print\" onload=\"this.media='all'\"\u003e\u003cnoscript\u003e\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800;900\u0026amp;family=Poppins:wght@400;500;600;700;800;900\u0026amp;family=Space+Grotesk:wght@400;500;600;700\u0026amp;family=Space+Mono:wght@400;700\u0026amp;family=Nunito:wght@400;500;600;700;800;900\u0026amp;family=Bungee\u0026amp;family=Chakra+Petch:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\u003c\/noscript\u003e\u003cscript type=\"module\"\u003e(function(){function y(){if(window.crypto\u0026\u0026typeof window.crypto.randomUUID==\"function\")try{return window.crypto.randomUUID()}catch{}return Date.now().toString(36)+\"_\"+Math.random().toString(36).slice(2,12)}function m(n){var e=document.cookie.match(new RegExp(\"(?:^|; )\"+n+\"=([^;]*)\"));return e?decodeURIComponent(e[1]):null}function v(){var n=document.getElementById(\"store-id\")||document.getElementById(\"meta-store-id\");return n?n.value:\"\"}function g(){var n=document.getElementById(\"supabase-url\")||document.getElementById(\"meta-supabase-url\"),e=document.getElementById(\"supabase-anon-key\")||document.getElementById(\"meta-supabase-anon-key\");return{url:n?n.value:\"\",key:e?e.value:\"\"}}function l(n,e,t){e=e||{},t=t||{};var f=t.eventId||y();if(typeof window.fbq==\"function\")try{window.fbq(\"track\",n,e,{eventID:f})}catch(o){console.warn(\"[meta] fbq error:\",o)}var w=v(),i=g();if(!(!w||!i.url||!i.key)){var r={storeId:w,event_name:n,event_id:f,event_source_url:window.location.href};e.value!=null\u0026\u0026(r.value=e.value),e.currency\u0026\u0026(r.currency=e.currency),e.contents\u0026\u0026(r.contents=e.contents),e.content_type\u0026\u0026(r.content_type=e.content_type),e.num_items!=null\u0026\u0026(r.num_items=e.num_items),t.email\u0026\u0026(r.email=t.email),t.phone\u0026\u0026(r.phone=t.phone),t.firstName\u0026\u0026(r.firstName=t.firstName),t.lastName\u0026\u0026(r.lastName=t.lastName);var s=m(\"_fbp\"),a=m(\"_fbc\");if(a){var u=a.split(\".\");if(u.length\u003e=4\u0026\u0026u.slice(3).join(\".\").length===100){var c=null;try{c=new URLSearchParams(window.location.search).get(\"fbclid\")}catch{}a=c\u0026\u0026c.length!==100?\"fb.1.\"+(u[2]||Date.now())+\".\"+c:null}}s\u0026\u0026(r.fbp=s),a\u0026\u0026(r.fbc=a);var d=i.url.replace(\/\\\/+$\/,\"\")+\"\/functions\/v1\/meta-track-event\";try{if(navigator.sendBeacon){var _=new Blob([JSON.stringify(r)],{type:\"text\/plain\"}),k=d+\"?apikey=\"+encodeURIComponent(i.key),p=navigator.sendBeacon(k,_);if(p)return}fetch(d,{method:\"POST\",keepalive:!0,headers:{\"Content-Type\":\"application\/json\",apikey:i.key,Authorization:\"Bearer \"+i.key},body:JSON.stringify(r)}).catch(function(o){console.warn(\"[meta] CAPI error:\",o)})}catch(o){console.warn(\"[meta] track error:\",o)}}}window.metaTrack=l;function h(n){try{var e=parseFloat(sessionStorage.getItem(\"__ic_ts\")||\"0\");if(Date.now()-e\u003c15e3)return;sessionStorage.setItem(\"__ic_ts\",String(Date.now()))}catch{if(window.__icRecent)return;window.__icRecent=!0}if(typeof window.metaTrack==\"function\")try{window.metaTrack(\"InitiateCheckout\",n||{})}catch(t){console.warn(\"[meta] InitiateCheckout error:\",t)}}window.metaTrackInitiateCheckout=h,!window.__metaPageViewFired\u0026\u0026!document.documentElement.hasAttribute(\"data-no-pageview\")\u0026\u0026(window.__metaPageViewFired=!0,l(\"PageView\",{}))})();\u003c\/script\u003e\u003cscript\u003e(function(){const pixelIds = [\"1596412985335845\"];\n\n        !function(f,b,e,v,n,t,s)\n        {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n        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        n.queue=[];t=b.createElement(e);t.async=!0;\n        t.src=v;s=b.getElementsByTagName(e)[0];\n        s.parentNode.insertBefore(t,s)}(window, document,'script',\n        'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n        \/\/ Disable Meta's automatic event collection BEFORE init. With autoConfig\n        \/\/ on, Meta's heuristic detection fires inferred events (incl. Purchase)\n        \/\/ that carry NO event_id, so they never dedupe against our CAPI and\n        \/\/ inflate the seller's conversion count. We fire every event explicitly\n        \/\/ (PageView\/ViewContent\/AddToCart\/InitiateCheckout\/Purchase) with a\n        \/\/ shared event_id, so automatic collection only adds un-dedupable noise.\n        \/\/ One init per pixel (a store may have several, comma-separated in the\n        \/\/ dashboard); every fbq('track') afterwards reaches all of them.\n        for (var i = 0; i \u003c pixelIds.length; i++) {\n          fbq('set', 'autoConfig', false, pixelIds[i]);\n          fbq('init', pixelIds[i]);\n        }\n        \/\/ PageView is fired by \/scripts\/meta-events.js so the same event_id is shared\n        \/\/ with the Conversions API call (Meta dedupes Pixel + CAPI by event_id).\n      })();\u003c\/script\u003e\u003cnoscript\u003e\u003cimg height=\"1\" width=\"1\" style=\"display:none; --storePrimary: #1e293b;--storeSecondary: #f8fafc;--storeAccent: #f59e0b;\" src=\"https:\/\/www.facebook.com\/tr?id=1596412985335845\u0026amp;ev=PageView\u0026amp;noscript=1\" data-astro-cid-jfvjk4zr=\"\"\u003e\u003c\/noscript\u003e\u003cinput type=\"hidden\" id=\"meta-store-id\" value=\"e65e5433-4e1a-4955-a8ea-bc953cb056fc\" data-astro-cid-jfvjk4zr=\"\" style=\"--storeprimary: #1e293b; --storesecondary: #f8fafc; --storeaccent: #f59e0b;\"\u003e\u003cinput type=\"hidden\" id=\"meta-supabase-url\" value=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\" data-astro-cid-jfvjk4zr=\"\" style=\"--storeprimary: #1e293b; --storesecondary: #f8fafc; --storeaccent: #f59e0b;\"\u003e\u003cinput type=\"hidden\" id=\"meta-supabase-anon-key\" value=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFla3Bnc2JxanpxbnRsYnVjYnRzIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA3NTg4NjAsImV4cCI6MjA4NjMzNDg2MH0.J4d_RDS976yRB_GOsIGULMtzed9qIJxo51lUnfQy_90\" data-astro-cid-jfvjk4zr=\"\" style=\"--storeprimary: #1e293b; --storesecondary: #f8fafc; --storeaccent: #f59e0b;\"\u003e\u003c\/p\u003e\n\u003cstyle id=\"custom-css\"\u003e\u003c\/style\u003e\n\u003cstyle\u003e:root{--store-primary: var(--storePrimary);--store-secondary: var(--storeSecondary);--store-accent: var(--storeAccent)}html[dir=rtl] body{font-family:Cairo,Noto Sans Hebrew,Inter,sans-serif}html[dir=rtl] .text-left[data-astro-cid-jfvjk4zr]{text-align:right}html[dir=rtl] .text-right[data-astro-cid-jfvjk4zr]{text-align:left}\n.block-text,.block-image,.block-button-wrapper,.block-divider{display:block;margin-left:auto;margin-right:auto;max-width:min(100%,64rem);padding-left:1rem;padding-right:1rem}.block-button-wrapper{text-align:center}.block-divider-space{height:1.5rem}.block-divider-dot{display:flex;justify-content:center;padding-top:.75rem;padding-bottom:.75rem}.block-divider-dot-inner{display:inline-block;width:.5rem;height:.5rem;border-radius:9999px;background-color:currentColor;opacity:.4}.block-divider-line{border-top-width:1px;border-color:currentColor;opacity:.2}.block-carousel{display:block;margin-left:auto;margin-right:auto;max-width:min(100%,64rem);padding-left:1rem;padding-right:1rem}.block-carousel-mask{overflow:hidden;-webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)}.block-carousel-track{display:flex;width:max-content;will-change:transform}.block-carousel-track img{width:auto;flex:0 0 auto;object-fit:cover}.block-carousel-mask:hover .block-carousel-track{animation-play-state:paused}.block-video{display:block;margin-left:auto;margin-right:auto;max-width:min(100%,48rem);padding-left:1rem;padding-right:1rem}.block-video-frame{position:relative;width:100%;aspect-ratio:16 \/ 9;border-radius:16px;overflow:hidden;background:#000}.block-video-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.block-video-file{width:100%;border-radius:16px;background:#000;aspect-ratio:16 \/ 9;display:block}.block-video-vertical{max-width:min(100%,22rem)}.block-video-vertical .block-video-frame,.block-video-vertical .block-video-file{aspect-ratio:9 \/ 16}.block-carousel-empty{padding:12px;background:#f3f4f6;border:1px dashed #d1d5db;border-radius:8px;text-align:center;color:#9ca3af;font-size:12px}@keyframes block-carousel-scroll{0%{transform:translate(0)}to{transform:translate(-50%)}}.block-countdown,.block-stock{display:block;margin-left:auto;margin-right:auto;max-width:min(100%,64rem);padding-left:1rem;padding-right:1rem;text-align:center;font-weight:600}.block-countdown-text{margin-right:.45rem}.block-countdown-timer{display:inline-block;font-variant-numeric:tabular-nums;font-weight:700;background:#111827;color:#fff;padding:.1rem .5rem;border-radius:6px}.block-countdown-text-top{display:block;margin-right:0;margin-bottom:5px}.block-countdown-boxes-row{display:flex;justify-content:center;align-items:center;gap:8px}.block-countdown-box{color:#fff;border-radius:10px;padding:7px 10px 5px;min-width:58px;display:flex;flex-direction:column;align-items:center}.block-countdown-box-num{font-size:22px;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}.block-countdown-box-label{font-size:10px;opacity:.75;text-transform:uppercase;letter-spacing:.06em}.block-countdown-boxes-sep{font-size:20px;font-weight:800;opacity:.5}.block-countdown-banner{color:#fff;padding-top:10px;padding-bottom:10px}.block-countdown-timer-banner{background:#ffffff2e}.block-countdown-bar,.block-stock-bar{height:8px;max-width:340px;margin:8px auto 0;background:#00000014;border-radius:9999px;overflow:hidden}.block-stock-bar-row{display:flex;align-items:center;justify-content:center;gap:8px;max-width:340px;margin:8px auto 0}.block-stock-bar-row .block-stock-bar{flex:1;min-width:0;margin:0;max-width:none}.block-stock-bar-count{flex-shrink:0;font-size:12px;font-weight:800;font-variant-numeric:tabular-nums;transition:color .6s ease}.block-countdown-banner .block-countdown-bar{background:#ffffff40}.block-countdown-bar\u003espan,.block-stock-bar\u003espan{display:block;height:100%;border-radius:inherit;transition:width .8s ease,background-color .6s ease}.block-stock-badge{display:inline-flex;align-items:center;gap:7px;background:#fff;border:1px solid #e5e7eb;border-radius:9999px;padding:6px 14px;box-shadow:0 1px 3px #0000000f}.block-stock-dot{width:8px;height:8px;border-radius:9999px;flex-shrink:0;animation:block-stock-pulse 1.6s ease-in-out infinite}@keyframes block-stock-pulse{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.35);opacity:.55}}\n.impu-legal-overlay{position:fixed;inset:0;background:#000000b3;display:none;z-index:2147483000;padding:26px 14px;overflow-y:auto}.impu-legal-overlay:target{display:block}.impu-legal-box{background:#fff;color:#1f2937;max-width:640px;margin:24px auto;border-radius:16px;padding:34px 28px 30px;box-shadow:0 24px 70px #00000073;position:relative;text-align:left}.impu-legal-box h2{font-size:22px;font-weight:900;text-align:center;margin:0 0 20px;color:#111827}.impu-legal-box p{font-size:13.5px;line-height:1.7;margin:0 0 12px;color:#374151}.impu-legal-box strong{color:#111827}.impu-legal-box a{color:#2563eb;font-weight:700;text-decoration:none}.impu-legal-close{position:absolute;top:10px;right:16px;font-size:30px;line-height:1;color:#9ca3af;text-decoration:none;font-weight:700}\n\u003c\/style\u003e\n\u003cp\u003e\u003cmeta name=\"description\" content=\"Más de 1.700 actividades para imprimir, ordenadas por edad de 2 a 10 años. Elegís, imprimís y en menos de 10 minutos tu peque está jugando, sin peleas por el celular.\"\u003e \u003cmeta property=\"og:title\" content=\"Reemplazá la pantalla por juego de verdad en menos de 10 minutos\"\u003e \u003cmeta property=\"og:description\" content=\"+1.700 actividades para imprimir, ordenadas por edad. Sin peleas ni retos por el celular.\"\u003e \u003cmeta property=\"og:image\" content=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368201693_mk-hero-169.webp\"\u003e \u003cmeta property=\"og:type\" content=\"website\"\u003e \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e \u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e \u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\"\u003e \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Baloo+2:wght@600;700;800\u0026amp;family=Nunito:wght@400;600;700;800\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\u003c\/p\u003e\n\u003cstyle\u003e\n.mk{--crema:#FBF6EC;--kraft:#F3E6CF;--hoja:#FFFFFF;--grafito:#2B2A33;--cuerpo:#4A4650;--naranja:#E8542E;--azul:#2F6FB5;--amarillo:#F5B700;--verde:#1F9D55;--verde-osc:#17824A;--rojo:#C62828;\n  font-family:'Nunito',system-ui,sans-serif;color:var(--cuerpo);background:var(--crema);font-size:17px;line-height:1.55;margin:0;-webkit-font-smoothing:antialiased}\n.mk *{box-sizing:border-box}\n.mk img{max-width:100%;height:auto;display:block}\n.mk h1,.mk h2,.mk h3{font-family:'Baloo 2',system-ui,sans-serif;color:var(--grafito);line-height:1.12;margin:0 0 .5em}\n.mk h1{font-size:clamp(31px,7.6vw,50px);font-weight:800}\n.mk h2{font-size:clamp(26px,6.2vw,38px);font-weight:800;text-align:center}\n.mk h3{font-size:21px;font-weight:700;margin-bottom:.25em}\n.mk p{margin:0 0 .8em}\n.mk .sec{padding:52px 18px}\n.mk .in{max-width:980px;margin:0 auto}\n.mk .angosto{max-width:680px;margin:0 auto}\n.mk .kraft{background:var(--kraft)}\n.mk .etq{display:inline-block;font-weight:800;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--azul);margin-bottom:10px}\n.mk .centro{text-align:center}\n.mk .sub{font-size:18.5px;color:var(--cuerpo);max-width:620px}\n.mk .centro .sub{margin-left:auto;margin-right:auto}\n\/* subrayado de crayón *\/\n.mk .cray{position:relative;white-space:nowrap;z-index:0}\n.mk .cray::after{content:\"\";position:absolute;left:-2%;right:-2%;bottom:.04em;height:.36em;background:var(--naranja);opacity:.38;border-radius:40% 60% 50% 45%\/60% 40% 60% 40%;transform:rotate(-1.2deg);z-index:-1}\n\/* cinta de papel *\/\n.mk .cinta{position:relative}\n.mk .cinta::before{content:\"\";position:absolute;top:-11px;left:50%;width:84px;height:22px;margin-left:-42px;background:var(--naranja);opacity:.85;transform:rotate(-3deg);z-index:2;\n  background-image:radial-gradient(rgba(255,255,255,.55) 1.5px,transparent 1.6px);background-size:9px 9px;border-radius:2px}\n.mk .cinta.az::before{background-color:var(--azul)}\n.mk .cinta.am::before{background-color:var(--amarillo)}\n.mk .hoja{background:var(--hoja);border-radius:14px;border:2px solid rgba(43,42,51,.1);box-shadow:0 3px 0 rgba(43,42,51,.12);padding:22px}\n\/* botones *\/\n.mk .btn{display:block;width:100%;max-width:460px;margin:22px auto 0;padding:17px 20px;border-radius:14px;background:var(--verde);color:#fff !important;text-decoration:none;text-align:center;\n  font-family:'Baloo 2',sans-serif;font-weight:800;font-size:21px;line-height:1.2;box-shadow:0 5px 0 var(--verde-osc);transition:transform .1s}\n.mk .btn:active{transform:translateY(3px);box-shadow:0 2px 0 var(--verde-osc)}\n.mk .btn small{display:block;font-family:'Nunito',sans-serif;font-weight:700;font-size:13px;opacity:.92;margin-top:3px}\n.mk .confianza{display:flex;flex-wrap:wrap;justify-content:center;gap:6px 16px;margin-top:14px;font-size:14px;font-weight:700;color:var(--grafito)}\n.mk .confianza span::before{content:\"✓ \";color:var(--verde)}\n\/* hero *\/\n.mk .hero{padding-top:30px}\n.mk .hero .foto{margin:22px auto 0;max-width:760px;border-radius:16px;overflow:hidden;box-shadow:0 4px 0 rgba(43,42,51,.14)}\n\/* dolores *\/\n.mk .dolores{display:grid;gap:14px;margin-top:22px}\n.mk .dolor{display:flex;gap:14px;align-items:flex-start;background:var(--hoja);border-radius:14px;padding:16px 18px;border:2px solid rgba(43,42,51,.08)}\n.mk .dolor b{color:var(--grafito)}\n.mk .x{flex:0 0 30px;height:30px;border-radius:50%;background:#FBE3DC;color:var(--naranja);font-weight:800;display:flex;align-items:center;justify-content:center;font-size:17px}\n\/* beneficios *\/\n.mk .benef{display:grid;gap:12px;margin-top:22px}\n.mk .ben{display:flex;gap:12px;align-items:flex-start;font-size:17.5px}\n.mk .ben .ok{flex:0 0 28px;height:28px;border-radius:8px;background:var(--verde);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;transform:rotate(-4deg)}\n.mk .ben b{color:var(--grafito)}\n\/* mecanismo *\/\n.mk .meca{display:grid;gap:26px;align-items:center;margin-top:10px}\n.mk .meca .foto{border-radius:16px;overflow:hidden;box-shadow:0 4px 0 rgba(43,42,51,.14)}\n.mk .clave{font-weight:800;color:var(--grafito);font-size:19px;border-left:5px solid var(--naranja);padding-left:14px}\n\/* sección firma *\/\n.mk .firma{display:grid;gap:16px;margin-top:30px}\n.mk .col{border-radius:16px;padding:20px 18px;background:var(--hoja);border:2px solid rgba(43,42,51,.1)}\n.mk .col.sin{background:#F4F1EC}\n.mk .col.con{border-color:var(--verde);box-shadow:0 4px 0 rgba(31,157,85,.25)}\n.mk .col h3{font-size:19px;text-align:center}\n.mk .col.sin h3{color:#8a8590}\n.mk .col.con h3{color:var(--verde)}\n.mk .flujo{list-style:none;padding:0;margin:10px 0 0;display:grid;gap:8px}\n.mk .flujo li{background:#fff;border-radius:10px;padding:10px 12px;font-weight:700;color:var(--grafito);text-align:center;position:relative}\n.mk .col.sin .flujo li{color:#77727d;background:#fff}\n.mk .flujo li+li::before{content:\"↓\";position:absolute;top:-17px;left:50%;margin-left:-5px;font-size:14px;color:#b5b0ba}\n.mk .col.con .flujo li:last-child{background:#E5F5EC;color:var(--verde-osc)}\n.mk .col.sin .flujo li:last-child{background:#FBE3DC;color:var(--rojo)}\n\/* pasos *\/\n.mk .pasos{display:grid;gap:16px;margin-top:24px}\n.mk .paso{display:flex;gap:16px;align-items:flex-start}\n.mk .num{flex:0 0 46px;height:46px;border-radius:50%;background:var(--naranja);color:#fff;font-family:'Baloo 2',sans-serif;font-weight:800;font-size:24px;display:flex;align-items:center;justify-content:center;transform:rotate(-6deg)}\n.mk .paso h3{margin:4px 0 2px}\n.mk .paso p{margin:0}\n\/* entregables y bonos *\/\n.mk .items{display:grid;gap:30px;margin-top:30px}\n.mk .item{display:grid;gap:16px;align-items:center}\n.mk .item .mock{border-radius:14px;overflow:hidden;box-shadow:0 3px 0 rgba(43,42,51,.12)}\n.mk .chip{display:inline-block;font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:#E3EDF8;color:var(--azul);margin-bottom:8px}\n.mk .chip.regalo{background:#FFF1C2;color:#8A6400}\n.mk .etapas{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}\n.mk .etapas span{background:var(--crema);border:1.5px solid rgba(43,42,51,.12);border-radius:999px;padding:4px 10px;font-size:13.5px;font-weight:700;color:var(--grafito)}\n.mk .etapas b{color:var(--naranja)}\n.mk .objecion{font-style:italic;color:var(--grafito);margin-bottom:6px}\n.mk .items.compacto{gap:18px}\n.mk .items.compacto .item{grid-template-columns:38% 1fr;gap:14px;align-items:start;background:var(--hoja);border-radius:14px;padding:12px;border:2px solid rgba(43,42,51,.08)}\n.mk .items.compacto h3{font-size:18.5px}\n.mk .items.compacto p{font-size:15.5px;margin-bottom:.4em}\n\/* vistazo *\/\n.mk .vista{display:grid;grid-template-columns:repeat(2,1fr);gap:18px 14px;margin-top:30px}\n.mk .vista figure{margin:0;background:#fff;padding:8px;border-radius:6px;box-shadow:0 3px 0 rgba(43,42,51,.12)}\n.mk .vista figure:nth-child(odd){transform:rotate(-1.2deg)}\n.mk .vista figure:nth-child(even){transform:rotate(1deg)}\n.mk .aviso{margin:22px auto 0;max-width:560px;text-align:center;font-size:14.5px;background:#fff;border-radius:12px;padding:12px 14px;border:2px dashed rgba(43,42,51,.18)}\n.mk video{width:100%;max-width:340px;margin:26px auto 0;display:block;border-radius:16px;box-shadow:0 4px 0 rgba(43,42,51,.14)}\n\/* timer *\/\n.mk .timer{margin:18px auto 0;max-width:520px;background:var(--grafito);color:#fff;border-radius:14px;padding:14px 16px;text-align:center}\n.mk .timer .reloj{font-family:'Baloo 2',sans-serif;font-weight:800;font-size:34px;color:var(--amarillo);letter-spacing:.04em}\n.mk .timer p{margin:0;font-size:14.5px}\n\/* testimonios *\/\n.mk .chats{display:grid;gap:18px;margin-top:26px;justify-items:center}\n.mk .chats figure{margin:0;max-width:340px;width:100%}\n.mk .chats img{border-radius:18px;box-shadow:0 4px 0 rgba(43,42,51,.14)}\n.mk .chats figcaption{text-align:center;font-weight:700;font-size:14px;margin-top:10px;color:var(--grafito)}\n.mk .chats .tema{display:block;font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--naranja);margin-bottom:4px}\n.mk .chats .cita{display:block;font-family:'Baloo 2',sans-serif;font-weight:800;font-size:19px;line-height:1.2}\n.mk .real{text-align:center;font-size:13px;color:#8a8590;margin:6px 0 0}\n\/* es para vos *\/\n.mk .paravos{display:grid;gap:16px;margin-top:22px}\n.mk .paravos .col{background:var(--hoja);border-radius:16px;padding:18px 20px;border:2px solid rgba(43,42,51,.08)}\n.mk .paravos h3{margin:0 0 10px}\n.mk .paravos ul{list-style:none;padding:0;margin:0}\n.mk .paravos li{display:flex;gap:10px;margin:9px 0;line-height:1.35}\n.mk .paravos li::before{content:\"✓\";flex:0 0 22px;height:22px;border-radius:50%;background:var(--verde);color:#fff;font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center;margin-top:1px}\n.mk .paravos .no li::before{content:\"✕\";background:#bdb8c3}\n\/* oferta *\/\n.mk .oferta{background:var(--grafito);color:#EDEAE4}\n.mk .oferta h2{color:#fff}\n.mk .caja{background:#34333D;border-radius:18px;padding:24px 18px;max-width:560px;margin:24px auto 0;border:2px solid rgba(255,255,255,.08)}\n.mk .caja .mock{border-radius:12px;overflow:hidden;margin-bottom:18px}\n.mk .lista{list-style:none;padding:0;margin:0}\n.mk .lista li{display:flex;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px dashed rgba(255,255,255,.14);font-size:16px}\n.mk .lista li span:last-child{font-weight:800;font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:#9FE0B9;white-space:nowrap}\n.mk .lista li.reg span:last-child{color:var(--amarillo)}\n.mk .precio{text-align:center;margin-top:20px}\n.mk .antes{color:#bdb8c3;font-size:18px}\n.mk .antes s{color:#ff8a80}\n.mk .ahora{font-family:'Baloo 2',sans-serif;font-weight:800;font-size:56px;color:#fff;line-height:1.05}\n.mk .pildora{display:inline-block;background:var(--amarillo);color:var(--grafito);font-weight:800;border-radius:999px;padding:8px 16px;font-size:17px;margin-top:8px}\n.mk .oferta .confianza{color:#EDEAE4}\n.mk .oferta .timer{background:#1F1E26}\n\/* garantía *\/\n.mk .garantia{display:flex;gap:18px;align-items:flex-start}\n.mk .sello{flex:0 0 86px;height:86px;border-radius:50%;background:var(--amarillo);color:var(--grafito);font-family:'Baloo 2',sans-serif;font-weight:800;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;transform:rotate(-8deg);box-shadow:0 3px 0 rgba(43,42,51,.2)}\n.mk .sello b{font-size:34px}\n.mk .sello span{font-size:13px}\n\/* faq *\/\n.mk details{background:var(--hoja);border-radius:12px;border:2px solid rgba(43,42,51,.08);margin-top:10px;padding:0 16px}\n.mk summary{cursor:pointer;list-style:none;font-weight:800;color:var(--grafito);padding:15px 26px 15px 0;position:relative}\n.mk summary::-webkit-details-marker{display:none}\n.mk summary::after{content:\"+\";position:absolute;right:0;top:11px;font-size:24px;color:var(--naranja)}\n.mk details[open] summary::after{content:\"–\"}\n.mk details p{padding-bottom:12px;margin:0}\n\/* barra fija *\/\n.mk .barra{position:fixed;left:0;right:0;bottom:0;z-index:50;background:rgba(251,246,236,.97);border-top:2px solid rgba(43,42,51,.1);padding:9px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;transform:translateY(110%);transition:transform .25s}\n.mk .barra.ver{transform:none}\n.mk .barra .p{font-family:'Baloo 2',sans-serif;font-weight:800;color:var(--grafito);font-size:22px;line-height:1}\n.mk .barra .p s{display:block;font-family:'Nunito',sans-serif;font-size:12.5px;color:var(--rojo);font-weight:700}\n.mk .barra a{background:var(--verde);color:#fff;text-decoration:none;font-family:'Baloo 2',sans-serif;font-weight:800;font-size:17px;padding:11px 18px;border-radius:12px;box-shadow:0 4px 0 var(--verde-osc);white-space:nowrap}\n.mk .pie{padding:26px 18px 90px;text-align:center;font-size:13px;color:#8a8590}\n@media(min-width:760px){\n  .mk .sec{padding:72px 24px}\n  .mk .dolores{grid-template-columns:1fr 1fr}\n  .mk .benef{grid-template-columns:1fr 1fr;gap:16px 30px}\n  .mk .meca{grid-template-columns:1.05fr 1fr}\n  .mk .firma{grid-template-columns:1fr 1fr}\n  .mk .pasos{grid-template-columns:repeat(3,1fr)}\n  .mk .paso{flex-direction:column;align-items:center;text-align:center}\n  .mk .item{grid-template-columns:300px 1fr;gap:28px}\n  .mk .vista{grid-template-columns:repeat(3,1fr)}\n  .mk .chats{grid-template-columns:1fr 1fr;align-items:start}\n  .mk .paravos{grid-template-columns:1.3fr 1fr}\n  .mk .barra{justify-content:center;gap:28px}\n}\n\u003c\/style\u003e\n\u003cdiv class=\"mk\"\u003e\n\u003c!-- HERO --\u003e\n\u003csection class=\"sec hero centro\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003cspan class=\"etq\"\u003ePack para imprimir · de 2 a 10 años\u003c\/span\u003e\n\u003ch1\u003eReemplazá la pantalla por juego de verdad en menos de 10 minutos, \u003cspan class=\"cray\"\u003esin peleas ni retos\u003c\/span\u003e\n\u003c\/h1\u003e\n\u003cp class=\"sub\"\u003e+1.700 actividades ordenadas por edad. Sin inventar nada, sin gastar en juguetes y sin pelearte por el celular.\u003c\/p\u003e\n\u003cdiv class=\"foto\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368201693_mk-hero-169.webp\" alt=\"Manos de un chico recortando una llama de papel sobre la mesa de la cocina\" width=\"1536\" height=\"1024\"\u003e\u003c\/div\u003e\n\u003ca class=\"btn\" href=\"#oferta\"\u003eSí, quiero tardes sin pantalla\u003c\/a\u003e\n\u003cdiv class=\"confianza\"\u003e\n\u003cspan\u003e+800 familias en Argentina\u003c\/span\u003e\u003cspan\u003eAcceso inmediato por mail\u003c\/span\u003e\u003cspan\u003ePago único\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- DOLORES --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in angosto\"\u003e\n\u003ch2\u003e¿Te pasa esto?\u003c\/h2\u003e\n\u003cdiv class=\"dolores\"\u003e\n\u003cdiv class=\"dolor\"\u003e\n\u003cdiv class=\"x\"\u003e✕\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eLe sacás el celular y se encapricha.\u003c\/b\u003e Terminás enojada, retándolo… y con culpa.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dolor\"\u003e\n\u003cdiv class=\"x\"\u003e✕\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eSe aburre a los cinco minutos\u003c\/b\u003e de cualquier cosa que le ofrecés.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dolor\"\u003e\n\u003cdiv class=\"x\"\u003e✕\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eNo tenés tiempo de inventar\u003c\/b\u003e actividades nuevas todos los días.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"dolor\"\u003e\n\u003cdiv class=\"x\"\u003e✕\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eLe das la pantalla para poder cocinar o trabajar,\u003c\/b\u003e y después te sentís mal.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- BENEFICIOS --\u003e\n\u003csection class=\"sec\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003ch2\u003eLo que cambia en casa\u003c\/h2\u003e\n\u003cdiv class=\"benef angosto\" style=\"max-width: 860px;\"\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eLograrás sacarle la pantalla sin caprichos,\u003c\/b\u003e sin enojos y sin retos.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eSabrás siempre qué darle\u003c\/b\u003e cuando diga «me aburro».\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eSe quedará concentrado mucho más tiempo,\u003c\/b\u003e con las manos ocupadas.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eTe mostrará orgulloso lo que hizo:\u003c\/b\u003e «¡Mirá, mamá!».\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eTendrás un ratito para vos\u003c\/b\u003e mientras juega solo.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ben\"\u003e\n\u003cdiv class=\"ok\"\u003e✓\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cb\u003eTendrás resueltos los días de lluvia\u003c\/b\u003e y las vacaciones, sin pantalla.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- MECANISMO + SECCIÓN FIRMA --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003cdiv class=\"meca\"\u003e\n\u003cdiv class=\"foto cinta az\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368203319_mk-mecanismo-169.webp\" alt=\"Manos de un chico mostrando un diorama de papel terminado\" width=\"1536\" height=\"1024\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch2 style=\"text-align: left;\"\u003eRetarlo no funciona. \u003cspan class=\"cray\"\u003eY no es tu culpa.\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp\u003eSi le sacás el celular sin tener nada listo, le quitás algo y no le das nada a cambio. La pantalla gana porque siempre está a mano cuando aparece el «me aburro».\u003c\/p\u003e\n\u003cp class=\"clave\"\u003eSi ese momento ya tiene algo listo para hacer con sus manos, suelta el celular solo.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"firma\"\u003e\n\u003cdiv class=\"col sin\"\u003e\n\u003ch3\u003eSin un plan\u003c\/h3\u003e\n\u003cul class=\"flujo\"\u003e\n\u003cli\u003e«Me aburro»\u003c\/li\u003e\n\u003cli\u003eLe das el celular (o se lo sacás y llora)\u003c\/li\u003e\n\u003cli\u003eBerrinche y culpa\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"col con\"\u003e\n\u003ch3\u003eCon el Plan «Me aburro»\u003c\/h3\u003e\n\u003cul class=\"flujo\"\u003e\n\u003cli\u003e«Me aburro»\u003c\/li\u003e\n\u003cli\u003eLe das una actividad lista para su edad\u003c\/li\u003e\n\u003cli\u003e«¡Mirá lo que hice!»\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- 3 PASOS --\u003e\n\u003csection class=\"sec\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003ch2\u003eAsí de fácil\u003c\/h2\u003e\n\u003cdiv class=\"pasos\"\u003e\n\u003cdiv class=\"paso\"\u003e\n\u003cdiv class=\"num\"\u003e1\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eElegís su edad\u003c\/h3\u003e\n\u003cp\u003eTodo está ordenado de 2 a 10 años.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"paso\"\u003e\n\u003cdiv class=\"num\"\u003e2\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eImprimís\u003c\/h3\u003e\n\u003cp\u003eEn cualquier impresora, a color o en blanco y negro.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"paso\"\u003e\n\u003cdiv class=\"num\"\u003e3\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eSe la das cuando dice «me aburro»\u003c\/h3\u003e\n\u003cp\u003eEn menos de 10 minutos está jugando.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ca class=\"btn\" href=\"#oferta\"\u003eSí, quiero tardes sin pantalla\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- ENTREGABLES --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003cspan class=\"etq\" style=\"display: block; text-align: center;\"\u003eLo que recibís\u003c\/span\u003e\n\u003ch2\u003eTodo listo para imprimir hoy\u003c\/h2\u003e\n\u003cdiv class=\"items\"\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368204875_mk-e1-biblioteca.webp\" alt=\"Libro Mentes Kids con +1.700 actividades de 2 a 10 años\" width=\"1254\" height=\"1254\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip\"\u003eEl pack\u003c\/span\u003e\n\u003ch3\u003eLa Biblioteca Mentes Kids\u003c\/h3\u003e\n\u003cp\u003e+1.700 actividades de 2 a 10 años: trazos, números y letras, recortar y armar, laberintos, colorear y juegos de lógica.\u003c\/p\u003e\n\u003cdiv class=\"etapas\"\u003e\n\u003cspan\u003e\u003cb\u003e2-3\u003c\/b\u003e Estimulación temprana\u003c\/span\u003e\u003cspan\u003e\u003cb\u003e3-4\u003c\/b\u003e Motricidad y colores\u003c\/span\u003e\u003cspan\u003e\u003cb\u003e4-5\u003c\/b\u003e Pre-escritura\u003c\/span\u003e\u003cspan\u003e\u003cb\u003e5-6\u003c\/b\u003e Lectoescritura inicial\u003c\/span\u003e\u003cspan\u003e\u003cb\u003e6-10\u003c\/b\u003e Lógica y razonamiento\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368205932_mk-e2-rompe.webp\" alt=\"Guía Rompe el círculo de la niñera digital\" width=\"1254\" height=\"1254\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip\"\u003eGuía para vos\u003c\/span\u003e\n\u003ch3\u003eRompe el círculo de la niñera digital\u003c\/h3\u003e\n\u003cp\u003eCómo sacarle la pantalla sin berrinches: pequeños rituales para reemplazarla, qué hacer cuando dice «no quiero» y tu plan anti-berrinche.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368206984_mk-e3-plan.webp\" alt=\"Guías La Semana Mágica y De la teoría a la acción\" width=\"1254\" height=\"1254\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip\"\u003eGuías para vos\u003c\/span\u003e\n\u003ch3\u003eEl Plan «Me aburro»\u003c\/h3\u003e\n\u003cp\u003e\u003cb\u003eLa Semana Mágica:\u003c\/b\u003e organizás 7 días de actividades en 5 minutos, con un plan B siempre listo. \u003cb\u003eDe la teoría a la acción:\u003c\/b\u003e el checklist de tu primera semana y un kit exprés para los momentos difíciles.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- VISTAZO --\u003e\n\u003csection class=\"sec\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003ch2\u003eMirá por dentro\u003c\/h2\u003e\n\u003cp class=\"sub centro\" style=\"margin: 0 auto;\"\u003eEstas son páginas del pack, tal cual las vas a imprimir.\u003c\/p\u003e\n\u003cdiv class=\"vista\"\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368213743_mk-vz-1.webp\" alt=\"Actividad: robot para pegar bolitas de papel\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368214813_mk-vz-2.webp\" alt=\"Actividad: pintar y recortar la melena del león\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368215855_mk-vz-3.webp\" alt=\"Actividad: conejo de papel para recortar y armar\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368216920_mk-vz-4.webp\" alt=\"Actividad: colorear según los números\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368217953_mk-vz-5.webp\" alt=\"Actividad: unir los puntos\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368219017_mk-vz-6.webp\" alt=\"Actividad: completar las vocales\" loading=\"lazy\"\u003e\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cvideo src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1789055783212_mentes-kids-video-por-dentro-comprimido.mp4#t=0.5\" poster=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368204875_mk-e1-biblioteca.webp\" controls=\"controls\" muted=\"\" playsinline=\"\" preload=\"metadata\"\u003e\u003c\/video\u003e\n\u003cp class=\"aviso\"\u003e📩 Recibís archivos PDF para descargar e imprimir en casa. No se envía nada físico.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- BONOS --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003cspan class=\"etq\" style=\"display: block; text-align: center;\"\u003eSolo si entrás hoy\u003c\/span\u003e\n\u003ch2\u003e🎁 5 regalos para que no se aburra nunca\u003c\/h2\u003e\n\u003cdiv class=\"timer\"\u003e\n\u003cp\u003eLos regalos quedan reservados por\u003c\/p\u003e\n\u003cdiv class=\"reloj\" translate=\"no\" data-reloj=\"\"\u003e15:00\u003c\/div\u003e\n\u003cp\u003ePasado ese tiempo el pack sigue a la venta, pero sin los regalos.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"items compacto\"\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368208037_mk-b1-foami.webp\" alt=\"Bono Jugamos con foami moldeable\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip regalo\"\u003eRegalo 1\u003c\/span\u003e\n\u003ch3\u003eJugamos con foami moldeable\u003c\/h3\u003e\n\u003cp class=\"objecion\"\u003e«Las fichas lo aburren, quiere hacer cosas con las manos.»\u003c\/p\u003e\n\u003cp\u003eFiguritas de foami paso a paso, sin horno.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368209196_mk-b2-diorama.webp\" alt=\"Bono Armá tu diorama en 3D\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip regalo\"\u003eRegalo 2\u003c\/span\u003e\n\u003ch3\u003eArmá tu diorama en 3D\u003c\/h3\u003e\n\u003cp class=\"objecion\"\u003e«Nada lo entretiene más de cinco minutos.»\u003c\/p\u003e\n\u003cp\u003eImprimí, recortá y armá su propio mundo: un proyecto para toda la tarde.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368210239_mk-b3-magos.webp\" alt=\"Bono Pequeños magos\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip regalo\"\u003eRegalo 3\u003c\/span\u003e\n\u003ch3\u003ePequeños magos\u003c\/h3\u003e\n\u003cp class=\"objecion\"\u003e«El mío ya es grande para esto.»\u003c\/p\u003e\n\u003cp\u003e15 trucos de magia para sorprender a toda la familia.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368211300_mk-b4-detectives.webp\" alt=\"Bono Pequeños detectives\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip regalo\"\u003eRegalo 4\u003c\/span\u003e\n\u003ch3\u003ePequeños detectives\u003c\/h3\u003e\n\u003cp class=\"objecion\"\u003e«Quiero que use la cabeza, no que solo pinte.»\u003c\/p\u003e\n\u003cp\u003e5 misterios para resolver con ingenio.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"item\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368212320_mk-b5-observacion.webp\" alt=\"Bono Desafíos de observación\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cspan class=\"chip regalo\"\u003eRegalo 5\u003c\/span\u003e\n\u003ch3\u003eDesafíos de observación\u003c\/h3\u003e\n\u003cp class=\"objecion\"\u003e«No puedo estar encima todo el tiempo.»\u003c\/p\u003e\n\u003cp\u003eEncontrar las diferencias: lo hace solo mientras vos hacés tus cosas.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- TESTIMONIOS --\u003e\n\u003csection class=\"sec\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003ch2\u003eLo que nos escriben las mamás\u003c\/h2\u003e\n\u003cdiv class=\"chats\"\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368220153_mk-chat-mellizos.webp\" alt=\"Mensaje de una mamá de mellizos que dejaron de pelearse por el teléfono\" loading=\"lazy\"\u003e\n\u003cfigcaption\u003e\u003cspan class=\"tema\"\u003eSe peleaban por el celular\u003c\/span\u003e\u003cspan class=\"cita\"\u003e«Me re sirvió este pack, armé dos cuadernos iguales así cada uno juega con lo suyo»\u003c\/span\u003e\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003cfigure\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368221284_mk-chat-feli.webp\" alt=\"Mensaje de una mamá que tiene el pack listo para cuando su hijo se aburra\" loading=\"lazy\"\u003e\n\u003cfigcaption\u003e\u003cspan class=\"tema\"\u003eLo compró con dudas\u003c\/span\u003e\u003cspan class=\"cita\"\u003e«Este es bastante completo, tiene un montón de actividades muy lindas»\u003c\/span\u003e\u003c\/figcaption\u003e\n\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cp class=\"real\"\u003eMensajes reales de WhatsApp. Tapamos los datos para cuidar su privacidad.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- ES PARA VOS --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in angosto\" style=\"max-width: 860px;\"\u003e\n\u003ch2\u003e¿Es para vos?\u003c\/h2\u003e\n\u003cdiv class=\"paravos\"\u003e\n\u003cdiv class=\"col\"\u003e\n\u003ch3\u003eSí, si…\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eTu peque tiene entre \u003cb\u003e2 y 10 años\u003c\/b\u003e y pide el celular apenas se aburre.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eQuerés sacarle la pantalla \u003cb\u003esin pelear ni retarlo\u003c\/b\u003e.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eNo tenés tiempo de inventar actividades: \u003cb\u003equerés elegir, imprimir y listo\u003c\/b\u003e.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eBuscás algo que lo tenga \u003cb\u003econcentrado y con las manos ocupadas\u003c\/b\u003e, no solo hojas para pintar.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eTenés más de un hijo: \u003cb\u003elo imprimís las veces que quieras\u003c\/b\u003e, para todos.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"col no\"\u003e\n\u003ch3\u003eNo, si…\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003eEsperás un producto físico: son \u003cb\u003earchivos PDF\u003c\/b\u003e para imprimir en casa.\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eNo tenés forma de imprimir, ni en casa ni en una fotocopiadora.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ca class=\"btn\" href=\"#oferta\"\u003eSí, es para mí\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- OFERTA --\u003e\n\u003csection class=\"sec oferta\" id=\"oferta\"\u003e\n\u003cdiv class=\"in\"\u003e\n\u003ch2\u003eTodo esto, hoy\u003c\/h2\u003e\n\u003cdiv class=\"caja\"\u003e\n\u003cdiv class=\"mock\"\u003e\u003cimg src=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\/storage\/v1\/object\/public\/store-resources\/e65e5433-4e1a-4955-a8ea-bc953cb056fc\/1790368204875_mk-e1-biblioteca.webp\" alt=\"Pack Mentes Kids\" loading=\"lazy\"\u003e\u003c\/div\u003e\n\u003cul class=\"lista\"\u003e\n\u003cli\u003e\n\u003cspan\u003eLa Biblioteca Mentes Kids (+1.700 actividades)\u003c\/span\u003e\u003cspan\u003eIncluido\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eRompe el círculo de la niñera digital\u003c\/span\u003e\u003cspan\u003eIncluido\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eEl Plan «Me aburro» (2 guías)\u003c\/span\u003e\u003cspan\u003eIncluido\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli class=\"reg\"\u003e\n\u003cspan\u003e🎁 Jugamos con foami moldeable\u003c\/span\u003e\u003cspan\u003eRegalo\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli class=\"reg\"\u003e\n\u003cspan\u003e🎁 Armá tu diorama en 3D\u003c\/span\u003e\u003cspan\u003eRegalo\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli class=\"reg\"\u003e\n\u003cspan\u003e🎁 Pequeños magos\u003c\/span\u003e\u003cspan\u003eRegalo\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli class=\"reg\"\u003e\n\u003cspan\u003e🎁 Pequeños detectives\u003c\/span\u003e\u003cspan\u003eRegalo\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli class=\"reg\"\u003e\n\u003cspan\u003e🎁 Desafíos de observación\u003c\/span\u003e\u003cspan\u003eRegalo\u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"precio\"\u003e\n\u003cdiv class=\"antes\"\u003eAntes \u003cs translate=\"no\"\u003eAR$ 39.990\u003c\/s\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ahora\" translate=\"no\"\u003eAR$ 19.990\u003c\/div\u003e\n\u003cdiv class=\"pildora\"\u003eHoy ahorrás \u003cspan translate=\"no\"\u003eAR$ 20.000\u003c\/span\u003e · el \u003cspan translate=\"no\" data-pct=\"\"\u003e50\u003c\/span\u003e % menos\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ca class=\"btn\" href=\"\/checkout\"\u003eSí, quiero mi pack y los 5 regalos\u003csmall\u003ePago único · Acceso inmediato por mail\u003c\/small\u003e\u003c\/a\u003e\n\u003cdiv class=\"confianza\"\u003e\n\u003cspan\u003ePagás con Mercado Pago\u003c\/span\u003e\u003cspan\u003eHasta 3 cuotas sin interés\u003c\/span\u003e\u003cspan\u003eGarantía de 7 días\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"timer\"\u003e\n\u003cp\u003eLos 5 regalos quedan reservados por\u003c\/p\u003e\n\u003cdiv class=\"reloj\" translate=\"no\" data-reloj=\"\"\u003e15:00\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- GARANTÍA --\u003e\n\u003csection class=\"sec\"\u003e\n\u003cdiv class=\"in angosto\"\u003e\n\u003cdiv class=\"garantia hoja cinta am\"\u003e\n\u003cdiv class=\"sello\"\u003e\n\u003cb\u003e7\u003c\/b\u003e\u003cspan\u003edías\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\n\u003ch3\u003eGarantía «De mamá a mamá»\u003c\/h3\u003e\n\u003cp style=\"margin: 0;\"\u003eImprimí la primera actividad esta semana y probala con tu peque. Si no se queda jugando ni una sola tarde sin pedir el celular, escribime dentro de los 7 días y te devuelvo cada peso, sin preguntas ni vueltas.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- FAQ --\u003e\n\u003csection class=\"sec kraft\"\u003e\n\u003cdiv class=\"in angosto\"\u003e\n\u003ch2\u003ePreguntas frecuentes\u003c\/h2\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Y si mi hijo no quiere saber nada y solo quiere el celular?\u003c\/summary\u003e\n\u003cp\u003eEs lo más común al principio. Por eso no hay un solo tipo de actividad: si las fichas no lo enganchan, pasás a las manualidades (foami, diorama) o a los desafíos (detectives, observación). Con más de 1.700 para rotar, siempre hay algo nuevo.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿En qué se diferencia de las fichas gratis de internet?\u003c\/summary\u003e\n\u003cp\u003eAcá no tenés que buscar ni adivinar: todo está ordenado por edad y el Plan «Me aburro» te ayuda a dejar la semana armada en 5 minutos. Y trae manualidades y desafíos, no solo hojas para pintar.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Tengo que estar al lado todo el tiempo?\u003c\/summary\u003e\n\u003cp\u003eNo. Muchas actividades las hace solo (laberintos, colorear, observación), así vos podés cocinar o trabajar un rato.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Es un producto físico?\u003c\/summary\u003e\n\u003cp\u003eNo. Recibís archivos PDF para descargar e imprimir en casa. No se envía nada por correo.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Cuándo lo recibo?\u003c\/summary\u003e\n\u003cp\u003eApenas se acredita el pago te llega un mail con el acceso. En minutos podés estar imprimiendo.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Necesito una impresora especial?\u003c\/summary\u003e\n\u003cp\u003eNo. Sirve cualquier impresora común, a color o en blanco y negro.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Sirve para más de un hijo?\u003c\/summary\u003e\n\u003cp\u003eSí. Es tuyo para siempre: lo imprimís las veces que quieras, para todos tus hijos.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e¿Puedo pagar en cuotas?\u003c\/summary\u003e\n\u003cp\u003eSí, hasta 3 cuotas sin interés con tarjeta de crédito a través de Mercado Pago.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- CTA FINAL --\u003e\n\u003csection class=\"sec centro\"\u003e\n\u003cdiv class=\"in angosto\"\u003e\n\u003ch2\u003eLa próxima vez que diga «me aburro», \u003cspan class=\"cray\"\u003etené algo listo\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp class=\"sub\"\u003eMenos pantalla, menos peleas y un chico orgulloso de lo que hizo con sus manos.\u003c\/p\u003e\n\u003ca class=\"btn\" href=\"\/checkout\"\u003eSí, quiero mi pack y los 5 regalos\u003csmall\u003ePago único · Acceso inmediato por mail\u003c\/small\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cdiv class=\"pie\"\u003eMentes Kids · Pack digital de actividades para imprimir · Pago único · Acceso inmediato\u003c\/div\u003e\n\u003cdiv class=\"barra\" data-barra=\"\"\u003e\n\u003cdiv class=\"p\" translate=\"no\"\u003e\n\u003cs\u003eAR$ 39.990\u003c\/s\u003eAR$ 19.990\u003c\/div\u003e\n\u003ca href=\"\/checkout\"\u003eQuiero mi pack\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cscript\u003e\n(function(){\n  var K='mk_reloj_fin', fin;\n  try{fin=parseInt(sessionStorage.getItem(K),10)}catch(e){}\n  if(!fin||isNaN(fin)){fin=Date.now()+15*60*1000;try{sessionStorage.setItem(K,fin)}catch(e){}}\n  var relojes=document.querySelectorAll('[data-reloj]');\n  function pinta(){\n    var s=Math.max(0,Math.round((fin-Date.now())\/1000));\n    var t=String(Math.floor(s\/60)).padStart(2,'0')+':'+String(s%60).padStart(2,'0');\n    for(var i=0;i\u003crelojes.length;i++)relojes[i].textContent=t;\n    if(s\u003e0)setTimeout(pinta,1000);\n  }\n  pinta();\n  \/\/ % de descuento calculado con los precios que pinta la tienda (cambia según la moneda del visitante)\n  try{\n    var num=function(t){t=(t||'').replace(\/[^\\d.,]\/g,'');if(\/,\\d{1,2}$\/.test(t))t=t.replace(\/\\.\/g,'').replace(',','.');else t=t.replace(\/[.,]\/g,'');return parseFloat(t)};\n    var a=num((document.querySelector('.mk .antes s')||{}).textContent), b=num((document.querySelector('.mk .ahora')||{}).textContent);\n    if(a\u003e0\u0026\u0026b\u003e0\u0026\u0026b\u003ca){var p=Math.round((1-b\/a)*100);var el=document.querySelectorAll('[data-pct]');for(var j=0;j\u003cel.length;j++)el[j].textContent=p;}\n  }catch(e){}\n  var barra=document.querySelector('[data-barra]');\n  function scroll(){ if(barra) barra.classList.toggle('ver', window.scrollY\u003e650); }\n  window.addEventListener('scroll',scroll,{passive:true}); scroll();\n})();\n\u003c\/script\u003e \u003cinput type=\"hidden\" id=\"store-id\" value=\"e65e5433-4e1a-4955-a8ea-bc953cb056fc\"\u003e \u003cinput type=\"hidden\" id=\"store-custom-domain\" value=\"\"\u003e \u003cinput type=\"hidden\" id=\"store-currency\" value=\"ARS\"\u003e \u003cinput type=\"hidden\" id=\"upsells-flow\" value=\"inline\"\u003e \u003cinput type=\"hidden\" id=\"store-name-data\" value=\"Mentes kids sin límites\"\u003e \u003cinput type=\"hidden\" id=\"bonuses-data\" value=\"[]\"\u003e \u003cinput type=\"hidden\" id=\"supabase-url\" value=\"https:\/\/aekpgsbqjzqntlbucbts.supabase.co\"\u003e \u003cinput type=\"hidden\" id=\"supabase-anon-key\" value=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFla3Bnc2JxanpxbnRsYnVjYnRzIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA3NTg4NjAsImV4cCI6MjA4NjMzNDg2MH0.J4d_RDS976yRB_GOsIGULMtzed9qIJxo51lUnfQy_90\"\u003e \u003cinput type=\"hidden\" id=\"live-country\" value=\"AR\"\u003e \u003cinput type=\"hidden\" id=\"upsells-data\" value='[{\"i\":1,\"id\":\"5452e313-aefe-4dbc-af30-a5566a92a1da\",\"name\":\"❤️ Creá momentos en familia y menos tiempo de pantalla\",\"price\":4990,\"savings\":7000},{\"i\":2,\"id\":\"2200ea7b-00d3-45b4-b89c-47be14b3d5df\",\"name\":\"❤️ Ayudá a tu peque a entender sus emociones y cómo manejarlas\",\"price\":9990,\"savings\":10000},{\"i\":3,\"id\":\"7d899430-d333-4aff-a0de-a60586867add\",\"name\":\"🚗 más diversión, menos “¿cuánto falta?”\",\"price\":7990,\"savings\":10000}]'\u003e \u003cinput type=\"hidden\" id=\"store-main-price-num\" value=\"19990\"\u003e \u003cinput type=\"hidden\" id=\"store-main-savings-num\" value=\"20000\"\u003e \u003cinput type=\"hidden\" id=\"price-format\" value='{\"currency\":\"ARS\",\"prefix\":\"AR$\",\"locale\":\"es-AR\",\"zeroDecimal\":true}'\u003e \u003cscript\u003e\/\/ Visit tracking — records page views to Supabase visits table\n\/\/ Skips: localhost, 127.0.0.1, preview mode (store_id param), edit mode, bots\n;(function () {\n  try {\n    var hostname = window.location.hostname\n    var isLocal =\n      hostname === 'localhost' ||\n      hostname === '127.0.0.1' ||\n      hostname === '0.0.0.0' ||\n      hostname.startsWith('192.168.') ||\n      hostname.startsWith('10.')\n\n    var params = new URLSearchParams(window.location.search)\n\n    \/\/ Dev escape hatch: `?forceTrack=1` enables tracking on a LOCAL host so the\n    \/\/ heartbeat can be tested end-to-end with `?store_id=\u003cid\u003e\u0026forceTrack=1`.\n    \/\/ Gated to local hosts only — a no-op on any real domain, so it can't be\n    \/\/ abused to inflate a live store's stats.\n    var devForce = isLocal \u0026\u0026 params.get('forceTrack') === '1'\n\n    \/\/ Skip localhost and local IPs (unless the dev escape hatch is on)\n    if (isLocal \u0026\u0026 !devForce) return\n\n    \/\/ Skip dashboard preview (has store_id param) — but the dev escape hatch\n    \/\/ needs store_id to load a real store locally, so let it through.\n    if (params.get('store_id') \u0026\u0026 !devForce) return\n\n    \/\/ Skip edit mode\n    if (params.get('edit') === 'true') return\n\n    var storeId = (document.getElementById('store-id') || {}).value\n    if (!storeId) return\n\n    var supabaseUrl = (document.getElementById('supabase-url') || {}).value\n    var supabaseKey = (document.getElementById('supabase-anon-key') || {}).value\n    if (!supabaseUrl || !supabaseKey) return\n\n    \/\/ Determine page type from pathname\n    var path = window.location.pathname\n    var page = 'landing'\n    if (path.startsWith('\/checkout')) page = 'checkout'\n    else if (path.startsWith('\/descargar')) page = 'download'\n    else if (path.startsWith('\/post-purchase')) page = 'upsell'\n\n    \/\/ Página adicional (store_pages, migración 160): solo [slug].astro emite\n    \/\/ este hidden input. En la landing no existe → pageSlug null y todo lo de\n    \/\/ abajo queda byte a byte igual. `page` sigue siendo 'landing' (pasa el\n    \/\/ CHECK de visits); page_slug distingue QUÉ landing fue.\n    var pageSlug = ((document.getElementById('page-slug') || {}).value) || null\n\n    \/\/ Acceso a storage a prueba de fallos. En modo privado y en algunos\n    \/\/ navegadores in-app, LEER o ESCRIBIR lanza — y antes eso mataba el script\n    \/\/ entero acá mismo (línea del session id), incluida la decoración de links\n    \/\/ más abajo. `storageOk` queda en false para no cambiar las métricas: el\n    \/\/ heartbeat y la fila de `visits` se saltean igual que hoy, pero la\n    \/\/ atribución sigue viajando por la URL.\n    var storageOk = true\n    function ssGet(k) { try { return sessionStorage.getItem(k) } catch (e) { storageOk = false; return null } }\n    function ssSet(k, v) { try { sessionStorage.setItem(k, v) } catch (e) { storageOk = false } }\n    function lsGet(k) { try { return localStorage.getItem(k) } catch (e) { return null } }\n    function lsSet(k, v) { try { localStorage.setItem(k, v) } catch (e) { \/* sin memoria persistente *\/ } }\n\n    \/\/ Generate or retrieve session ID (shared by visit tracking + heartbeat).\n    var sessionId = ssGet('impultienda_session_id')\n    if (!sessionId) {\n      sessionId = typeof crypto !== 'undefined' \u0026\u0026 typeof crypto.randomUUID === 'function'\n        ? crypto.randomUUID()\n        : 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\/[xy]\/g, function (c) {\n            var r = Math.random() * 16 | 0\n            var v = c === 'x' ? r : (r \u0026 0x3 | 0x8)\n            return v.toString(16)\n          })\n      ssSet('impultienda_session_id', sessionId)\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ Live sessions heartbeat (\"sesiones activas\" \/ X viewing now)\n    \/\/ ------------------------------------------------------------------\n    \/\/ Independent from the once-per-session visit POST below: it must keep\n    \/\/ pinging on every page load + on an interval so the dashboard can count\n    \/\/ who is browsing RIGHT NOW. UPSERTs one row per session (PK session_id)\n    \/\/ refreshing `last_seen`; the dashboard treats \u003c2min-old rows as active.\n    var liveCountry = (document.getElementById('live-country') || {}).value || null\n\n    function sendHeartbeat() {\n      \/\/ Don't ping while the tab is hidden — a backgrounded tab isn't an\n      \/\/ active viewer. After \u003e2min hidden the session naturally drops off the\n      \/\/ live count; coming back fires the next tick within 30s.\n      if (document.hidden) return\n      \/\/ Routed through the live_session_ping RPC (SECURITY DEFINER): a direct\n      \/\/ PostgREST upsert is rejected by RLS for anon (ON CONFLICT DO UPDATE\n      \/\/ needs SELECT visibility on the row, which the owner-only SELECT policy\n      \/\/ denies). The RPC validates the store is active server-side.\n      fetch(supabaseUrl + '\/rest\/v1\/rpc\/live_session_ping', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application\/json',\n          apikey: supabaseKey,\n          Authorization: 'Bearer ' + supabaseKey,\n        },\n        body: JSON.stringify({\n          p_session_id: sessionId,\n          p_store_id: storeId,\n          p_page: page,\n          p_country: liveCountry,\n        }),\n      }).catch(function () {\n        \/\/ Silently fail — presence must never break the store\n      })\n    }\n\n    \/\/ Sin storage no hay id de sesión estable y el heartbeat crearía una fila\n    \/\/ nueva por pageview: se saltea, igual que hoy (hoy el script moría antes\n    \/\/ de llegar acá). La atribución de más abajo sí sigue corriendo.\n    if (storageOk) {\n      sendHeartbeat()\n      setInterval(sendHeartbeat, 30000)\n      \/\/ Refresh immediately when the visitor returns to the tab.\n      document.addEventListener('visibilitychange', function () {\n        if (!document.hidden) sendHeartbeat()\n      })\n    }\n\n    \/\/ Páginas que solo quieren presencia en vivo (post-compra emite #live-only):\n    \/\/ cortan acá para NO insertar una fila en `visits` ni tocar la atribución\n    \/\/ UTM — visit_counts_by_day cuenta todas las páginas y las inflaría.\n    if (document.getElementById('live-only')) return\n\n    \/\/ Meta sometimes appends its own click-tracking token (fbclid, format\n    \/\/ \"...morestuff..._aem_xxxx\") straight onto a UTM value with no proper\n    \/\/ \"\u0026\" separator, when a per-ad \"Parámetros de URL\" field doesn't end in\n    \/\/ one — the raw value we then read is e.g. \"Ads 4::PAcGRv..._aem_...::\".\n    \/\/ Cut anything from the first \"::\" on and cap the length so a malformed\n    \/\/ ad-level URL can't leak a huge token into the dashboard.\n    function sanitizeUtm(v) {\n      if (!v) return null\n      var clean = v.split('::')[0].trim()\n      if (clean.length \u003e 100) clean = clean.slice(0, 100)\n      return clean || null\n    }\n\n    \/\/ Gather UTM params\n    var utmSource = sanitizeUtm(params.get('utm_source'))\n    var utmMedium = sanitizeUtm(params.get('utm_medium'))\n    var utmCampaign = sanitizeUtm(params.get('utm_campaign'))\n    var utmContent = sanitizeUtm(params.get('utm_content'))\n    var utmTerm = sanitizeUtm(params.get('utm_term'))\n    var utmAdset = sanitizeUtm(params.get('utm_adset'))\n    \/\/ Meta ad id (utm_id={{ad.id}} in the ad-level URL params). Used to match\n    \/\/ ad SPEND ↔ our SALES for the ROAS dashboard. Falls back to ad NAME match\n    \/\/ (utm_content) when absent.\n    var utmId = sanitizeUtm(params.get('utm_id'))\n\n    \/\/ Click ids de las plataformas de ads. `create-order` no los usa (el _fbc\n    \/\/ lo arma el pixel desde su propia cookie), pero viajan igual al checkout:\n    \/\/ si el comprador pierde el sessionStorage, el fbclid en la URL es lo que\n    \/\/ le vuelve a armar la cookie del otro lado. Misma lista que strippea el\n    \/\/ Worker de edge-cache (workers\/landing-cache).\n    var CLICK_KEYS = ['fbclid', 'gclid', 'ttclid', 'msclkid', 'twclid', 'xcod', 'sck']\n    var UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_adset', 'utm_id']\n\n    \/\/ Un click id es un TOKEN OPACO, no un valor de UTM: va tal cual, sin el\n    \/\/ corte por \"::\" ni el tope de 100 chars de sanitizeUtm. Los fbclid nuevos\n    \/\/ de Meta miden ~200 caracteres y truncarlos rompe la atribución: el pixel\n    \/\/ del checkout rearma la cookie _fbc con el valor cortado y el Administrador\n    \/\/ de eventos tira \"El servidor está enviando un valor de fbclid modificado\n    \/\/ en el parámetro fbc\". Pasó en serio el 23-ago-2026 por reusar sanitizeUtm\n    \/\/ acá — 33% de las órdenes salieron con el fbclid cortado a 100.\n    function sanitizeClickId(v) {\n      if (!v) return null\n      var clean = String(v).trim()\n      if (clean.length \u003e 512) clean = clean.slice(0, 512)\n      return clean || null\n    }\n\n    function readStoredUtm() {\n      try {\n        return JSON.parse(ssGet('impultienda_utm') || '{}') || {}\n      } catch (e) {\n        return {}\n      }\n    }\n\n    var clickIds = {}\n    var hasClickId = false\n    for (var ck = 0; ck \u003c CLICK_KEYS.length; ck++) {\n      var cv = sanitizeClickId(params.get(CLICK_KEYS[ck]))\n      if (cv) { clickIds[CLICK_KEYS[ck]] = cv; hasClickId = true }\n    }\n\n    \/\/ RESCATE POR REFERRER — el comprador llega al checkout con la URL pelada y\n    \/\/ un sessionStorage NUEVO: los navegadores in-app de Facebook\/Instagram\n    \/\/ abren el link en otro contexto y se lleva puesta la atribución (medido:\n    \/\/ le pasa al 10-40% de los compradores según la tienda). El referrer sí\n    \/\/ conserva la URL de la landing CON las UTMs, así que se recuperan de ahí.\n    \/\/ Última prioridad: solo corre si no hay UTMs ni en la URL ni guardadas, o\n    \/\/ sea que nunca pisa un touch real.\n    if (!utmSource \u0026\u0026 !utmMedium \u0026\u0026 !utmCampaign \u0026\u0026 !utmContent \u0026\u0026 !utmTerm \u0026\u0026 !utmAdset \u0026\u0026 !utmId \u0026\u0026 document.referrer) {\n      var prevUtm = readStoredUtm()\n      var prevHasUtm = false\n      for (var pk = 0; pk \u003c UTM_KEYS.length; pk++) if (prevUtm[UTM_KEYS[pk]]) prevHasUtm = true\n      if (!prevHasUtm) {\n        try {\n          var refParams = new URL(document.referrer).searchParams\n          utmSource = sanitizeUtm(refParams.get('utm_source'))\n          utmMedium = sanitizeUtm(refParams.get('utm_medium'))\n          utmCampaign = sanitizeUtm(refParams.get('utm_campaign'))\n          utmContent = sanitizeUtm(refParams.get('utm_content'))\n          utmTerm = sanitizeUtm(refParams.get('utm_term'))\n          utmAdset = sanitizeUtm(refParams.get('utm_adset'))\n          utmId = sanitizeUtm(refParams.get('utm_id'))\n          for (var rk = 0; rk \u003c CLICK_KEYS.length; rk++) {\n            if (clickIds[CLICK_KEYS[rk]]) continue\n            var rv = sanitizeClickId(refParams.get(CLICK_KEYS[rk]))\n            if (rv) { clickIds[CLICK_KEYS[rk]] = rv; hasClickId = true }\n          }\n        } catch (e) {\n          \/\/ Referrer inválido, o recortado al origen por la referrer-policy\n          \/\/ cuando viene de otro dominio: no hay nada que rescatar.\n        }\n      }\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ MEMORIA ENTRE SESIONES (localStorage, 7 días)\n    \/\/ ------------------------------------------------------------------\n    \/\/ El sessionStorage se pierde cuando el navegador in-app abre otra webview\n    \/\/ o cuando el comprador se va y vuelve más tarde. En esos casos ni la URL\n    \/\/ ni el referrer traen las UTMs y la venta queda sin campaña. El script de\n    \/\/ Utmify tapaba justo eso guardándolas en localStorage; al gatearlo (F3),\n    \/\/ las tiendas sin ese script pasaron de 2,6% a 5,9% de ventas sin atribuir,\n    \/\/ mientras que las que lo conservan siguen en ~1%. Medido 23-ago-2026:\n    \/\/ DENTRO de la sesión nuestra cobertura ya es 99,9% (la de Utmify era\n    \/\/ 97,1%), así que todo el faltante es este caso.\n    \/\/\n    \/\/ 7 días = lo que usaba Utmify (leído de su `utm_source_exp` en una tienda\n    \/\/ legacy) y la misma ventana de clic con la que atribuye Meta.\n    \/\/\n    \/\/ Solo se guardan los utm_*: NUNCA los click ids. Un fbclid viejo\n    \/\/ reinyectado en la URL haría que el pixel pise la cookie _fbc con un clic\n    \/\/ que ya no corresponde.\n    var LS_KEY = 'impultienda_utm_memoria'\n    var LS_TTL_MS = 7 * 24 * 60 * 60 * 1000\n\n    function recordarUtm(data) {\n      lsSet(LS_KEY, JSON.stringify({ v: data, exp: Date.now() + LS_TTL_MS }))\n    }\n    function utmRecordada() {\n      var raw = lsGet(LS_KEY)\n      if (!raw) return null\n      try {\n        var p = JSON.parse(raw)\n        if (!p || !p.v || !(p.exp \u003e Date.now())) return null\n        return p.v\n      } catch (e) {\n        return null\n      }\n    }\n\n    \/\/ ¿Este pageview trae un toque REAL (URL o referrer)? Se calcula antes de\n    \/\/ restaurar, para no renovar el vencimiento con lo que ya estaba guardado.\n    var toqueFresco = !!(utmSource || utmMedium || utmCampaign || utmContent || utmTerm || utmAdset || utmId)\n\n    \/\/ Prioridad: URL \u003e blob de sesión \u003e referrer \u003e memoria. Lo guardado es el\n    \/\/ último recurso y jamás pisa un toque más nuevo.\n    if (!toqueFresco) {\n      var enSesion = readStoredUtm()\n      var sesionTieneUtm = false\n      for (var sk = 0; sk \u003c UTM_KEYS.length; sk++) if (enSesion[UTM_KEYS[sk]]) sesionTieneUtm = true\n      if (!sesionTieneUtm) {\n        var mem = utmRecordada()\n        if (mem) {\n          utmSource = sanitizeUtm(mem.utm_source)\n          utmMedium = sanitizeUtm(mem.utm_medium)\n          utmCampaign = sanitizeUtm(mem.utm_campaign)\n          utmContent = sanitizeUtm(mem.utm_content)\n          utmTerm = sanitizeUtm(mem.utm_term)\n          utmAdset = sanitizeUtm(mem.utm_adset)\n          utmId = sanitizeUtm(mem.utm_id)\n        }\n      }\n    }\n\n    \/\/ Persist UTMs in sessionStorage — LAST-touch model: every pageview that\n    \/\/ carries a UTM overwrites the stored attribution (matching how Meta's\n    \/\/ own ad reporting credits whichever ad was touched most recently before\n    \/\/ the purchase, not the very first one of the session). A pageview with\n    \/\/ no UTM at all (e.g. browsing on to another page) leaves the last-known\n    \/\/ attribution untouched instead of clearing it.\n    if (utmSource || utmMedium || utmCampaign || utmContent || utmTerm || utmAdset || utmId) {\n      var utmData = {\n        utm_source: utmSource,\n        utm_medium: utmMedium,\n        utm_campaign: utmCampaign,\n        utm_content: utmContent,\n        utm_term: utmTerm,\n        utm_adset: utmAdset,\n        utm_id: utmId,\n        referrer: document.referrer || null,\n      }\n      for (var cid in clickIds) utmData[cid] = clickIds[cid]\n      ssSet('impultienda_utm', JSON.stringify(utmData))\n      \/\/ La memoria de 7 días se renueva SOLO con un toque real, no al restaurar\n      \/\/ (si no, cada pageview correría el vencimiento hacia adelante para\n      \/\/ siempre y la atribución no caducaría nunca).\n      if (toqueFresco) {\n        recordarUtm({\n          utm_source: utmSource,\n          utm_medium: utmMedium,\n          utm_campaign: utmCampaign,\n          utm_content: utmContent,\n          utm_term: utmTerm,\n          utm_adset: utmAdset,\n          utm_id: utmId,\n        })\n      }\n    } else if (hasClickId) {\n      \/\/ Solo un click id suelto (p.ej. un fbclid sin UTMs): NO pisa la\n      \/\/ atribución ya guardada — se suma al blob para poder propagarlo.\n      var merged = readStoredUtm()\n      for (var cid2 in clickIds) merged[cid2] = clickIds[cid2]\n      ssSet('impultienda_utm', JSON.stringify(merged))\n    }\n\n    \/\/ ------------------------------------------------------------------\n    \/\/ PROPAGACIÓN AL CHECKOUT — el comprador entra a la landing con las UTMs\n    \/\/ en la URL, pero el botón de compra apunta a `\/checkout` pelado: sin esto\n    \/\/ la atribución viaja SOLO en sessionStorage, que los navegadores in-app\n    \/\/ pierden. Hasta el 21-ago-2026 esto lo hacía de rebote el script de UTMs\n    \/\/ de Utmify (efecto secundario no documentado suyo); al dejar de cargarlo\n    \/\/ en las tiendas sin pixel, las ventas classic sin UTM saltaron de 2% a\n    \/\/ 15%. Ahora es nuestro y no depende de un tercero.\n    \/\/\n    \/\/ Solo toca links AL CHECKOUT de la propia cuenta: mismo host, cualquier\n    \/\/ subdominio de impultienda.ar (landing y checkout pueden ser dos tiendas\n    \/\/ distintas) o el dominio custom de esta tienda. Nunca un `#ancla` — eso\n    \/\/ dispara el modal de downsell por popstate.\n    \/\/ ------------------------------------------------------------------\n    var CHECKOUT_PATH = \/^\\\/(checkout|o|c-checkout)(\\\/|$)\/\n\n    function trackingPairs() {\n      var st = readStoredUtm()\n      var out = []\n      for (var i = 0; i \u003c UTM_KEYS.length; i++) {\n        var v = sanitizeUtm(st[UTM_KEYS[i]] || params.get(UTM_KEYS[i]))\n        if (v) out.push([UTM_KEYS[i], v])\n      }\n      \/\/ Los click ids van CRUDOS (ver sanitizeClickId) y con la URL primero: el\n      \/\/ de esta pagina es el click mas reciente, y ademas es el que no puede\n      \/\/ venir recortado por un blob viejo de una sesion anterior al fix.\n      for (var c = 0; c \u003c CLICK_KEYS.length; c++) {\n        var cvv = sanitizeClickId(params.get(CLICK_KEYS[c]) || st[CLICK_KEYS[c]])\n        if (cvv) out.push([CLICK_KEYS[c], cvv])\n      }\n      return out\n    }\n\n    function isOwnCheckout(u) {\n      if (!CHECKOUT_PATH.test(u.pathname)) return false\n      var h = u.hostname\n      if (h === location.hostname) return true\n      if (\/(^|\\.)impultienda\\.ar$\/.test(h)) return true\n      var cd = ((document.getElementById('store-custom-domain') || {}).value || '').trim().toLowerCase()\n      return !!cd \u0026\u0026 (h === cd || h === 'www.' + cd || 'www.' + h === cd)\n    }\n\n    function decorateLink(a) {\n      try {\n        var raw = a.getAttribute('href')\n        if (!raw || raw.charAt(0) === '#' || \/^(mailto|tel|javascript|sms|whatsapp):\/i.test(raw)) return\n        var u = new URL(a.href, location.href)\n        if (!isOwnCheckout(u)) return\n        var pairs = trackingPairs()\n        \/\/ Upsells tildados en la landing de HTML propio (upsellPicker.js): van\n        \/\/ aparte de trackingPairs y SOLO si el link no lo trae ya — un\n        \/\/ \u003ca href=\"\/checkout?upsells=2\"\u003e explícito del vendedor gana.\n        var us = []\n        try { us = JSON.parse(ssGet('impultienda_upsells') || '[]') || [] } catch (e) { us = [] }\n        if (!Array.isArray(us)) us = []\n        if (!pairs.length \u0026\u0026 !us.length) return\n        \/\/ `set` y no `append`: idempotente aunque el link ya venga decorado\n        \/\/ (las tiendas legacy que todavía cargan el script de Utmify) y aunque\n        \/\/ el mismo link se toque dos veces.\n        for (var i = 0; i \u003c pairs.length; i++) u.searchParams.set(pairs[i][0], pairs[i][1])\n        if (us.length \u0026\u0026 !u.searchParams.has('upsells')) u.searchParams.set('upsells', us.join(','))\n        a.setAttribute('href', u.toString())\n      } catch (e) { \/* href inválido: se deja como está *\/ }\n    }\n\n    function decorateAll() {\n      var links = document.querySelectorAll('a[href]')\n      for (var i = 0; i \u003c links.length; i++) decorateLink(links[i])\n    }\n\n    decorateAll()\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', decorateAll)\n    \/\/ Red de seguridad para CTAs que aparecen después (carrito, widgets, HTML\n    \/\/ custom armado por JS): se decora en el click, en fase de CAPTURA, antes\n    \/\/ de cualquier handler propio que pudiera navegar.\n    document.addEventListener(\n      'click',\n      function (e) {\n        var a = e.target \u0026\u0026 e.target.closest ? e.target.closest('a[href]') : null\n        if (a) decorateLink(a)\n      },\n      true,\n    )\n\n    \/\/ Deduplicate: only track the historical VISIT once per page per session.\n    \/\/ (The heartbeat above already ran and is unaffected by this early return;\n    \/\/ the UTM capture above also already ran, so a repeat visit with a fresh\n    \/\/ UTM still updates the last-touch attribution even though no new `visits`\n    \/\/ row gets inserted for it.)\n    var sessionKey = 'impultienda_visit_' + storeId + '_' + page + (pageSlug ? '_' + pageSlug : '')\n    \/\/ Sin storage no se puede deduplicar: no insertamos, para no inflar las\n    \/\/ visitas con una fila por pageview (mismo resultado que hoy).\n    if (!storageOk) return\n    if (ssGet(sessionKey)) return\n    ssSet(sessionKey, '1')\n\n    \/\/ La visita se guarda con la atribución EFECTIVA de la sesión: si ESTA\n    \/\/ página no trae UTMs en la URL (el caso normal del checkout, al que se\n    \/\/ llega desde la landing), hereda la del blob. Sin esto la visita queda\n    \/\/ sin campaña y los reportes por UTM del panel pierden medio embudo.\n    var eff = readStoredUtm()\n    var body = {\n      store_id: storeId,\n      page: page,\n      user_agent: navigator.userAgent || null,\n      referrer: document.referrer || null,\n      utm_source: utmSource || sanitizeUtm(eff.utm_source),\n      utm_medium: utmMedium || sanitizeUtm(eff.utm_medium),\n      utm_campaign: utmCampaign || sanitizeUtm(eff.utm_campaign),\n      utm_content: utmContent || sanitizeUtm(eff.utm_content),\n      utm_term: utmTerm || sanitizeUtm(eff.utm_term),\n      utm_adset: utmAdset || sanitizeUtm(eff.utm_adset),\n      session_id: sessionId,\n    }\n\n    \/\/ Checkout funnel (\"Embudo\") attribution (migration 071): present only on\n    \/\/ standalone-checkout funnel pages (c-checkout exposes the hidden input).\n    \/\/ Lets the dashboard compute conversion (sales\/visits) per funnel. Omitted\n    \/\/ everywhere else so regular-store visits are byte-for-byte unchanged.\n    var cfEl = document.getElementById('checkout-funnel-id')\n    if (cfEl \u0026\u0026 cfEl.value) body.checkout_funnel_id = cfEl.value\n\n    \/\/ Atribución por página adicional (migración 160): presente solo cuando\n    \/\/ [slug].astro emitió #page-slug. Omitido en todo lo demás para que las\n    \/\/ visitas existentes queden byte a byte iguales.\n    if (pageSlug) body.page_slug = pageSlug\n\n    \/\/ Fire-and-forget POST to Supabase REST API\n    fetch(supabaseUrl + '\/rest\/v1\/visits', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application\/json',\n        apikey: supabaseKey,\n        Authorization: 'Bearer ' + supabaseKey,\n        Prefer: 'return=minimal',\n      },\n      body: JSON.stringify(body),\n    }).catch(function () {\n      \/\/ Silently fail — tracking should never break the store\n    })\n  } catch (e) {\n    \/\/ Silently fail\n  }\n})()\n\u003c\/script\u003e\u003cscript\u003e(function() {\n  var STORAGE_KEY = 'impultienda_countdown_end'\n\n  \/\/ Get or set countdown end time (sessionStorage = resets on new session)\n  var endTime = sessionStorage.getItem(STORAGE_KEY)\n\n  if (!endTime || parseInt(endTime) \u003c= Date.now()) {\n    \/\/ Random between 9 and 13 minutes + random seconds\n    var randomMinutes = 9 + Math.floor(Math.random() * 5) \/\/ 9, 10, 11, 12, 13\n    var randomSeconds = Math.floor(Math.random() * 60)\n    var totalMs = (randomMinutes * 60 + randomSeconds) * 1000\n    endTime = String(Date.now() + totalMs)\n    sessionStorage.setItem(STORAGE_KEY, endTime)\n  }\n\n  var minutesEl = document.getElementById('countdown-minutes')\n  var secondsEl = document.getElementById('countdown-seconds')\n\n  if (!minutesEl || !secondsEl) return\n\n  function updateCountdown() {\n    var now = Date.now()\n    var end = parseInt(endTime)\n    var remaining = Math.max(0, end - now)\n\n    if (remaining \u003c= 0) {\n      \/\/ Reset with new random time\n      var newMinutes = 9 + Math.floor(Math.random() * 5)\n      var newSeconds = Math.floor(Math.random() * 60)\n      endTime = String(Date.now() + (newMinutes * 60 + newSeconds) * 1000)\n      sessionStorage.setItem(STORAGE_KEY, endTime)\n      remaining = (newMinutes * 60 + newSeconds) * 1000\n    }\n\n    var totalSeconds = Math.floor(remaining \/ 1000)\n    var minutes = Math.floor(totalSeconds \/ 60)\n    var seconds = totalSeconds % 60\n\n    minutesEl.textContent = String(minutes).padStart(2, '0')\n    secondsEl.textContent = String(seconds).padStart(2, '0')\n  }\n\n  updateCountdown()\n  setInterval(updateCountdown, 1000)\n})()\n\u003c\/script\u003e \u003cscript\u003e\/\/ Picker de upsells para landings de HTML propio (custom_html). Sin JS del\n\/\/ vendedor: cualquier elemento con `data-upsell-toggle=\"N\"` (N = índice 1..N\n\/\/ del upsell o su uuid, ver {{upsell_N_id}}) tildea\/destildea ese upsell; un\n\/\/ `\u003cinput type=\"checkbox\" data-upsell=\"N\"\u003e` hace lo mismo con su change.\n\/\/ Estado en sessionStorage 'impultienda_upsells' (array de tokens tal cual\n\/\/ vienen en el atributo). Llega al checkout por tres vías, cualquiera alcanza:\n\/\/   (1) tracking.js decora los \u003ca href=\"\/checkout\"\u003e con ?upsells=…\n\/\/   (2) el handler inline de [data-checkout] (index.astro \/ [...slug].astro)\n\/\/   (3) checkout.js lee sessionStorage como fallback (y lo CONSUME).\n\/\/ Reflejo visual: `data-upsell-selected=\"1|0\"` + clase `is-selected` en todo\n\/\/ `[data-upsell-toggle]`, `[data-upsell-state]` e `input[data-upsell]`;\n\/\/ `[data-upsell-count]` = cantidad; `[data-cart-total]` = main + tildados y\n\/\/ `[data-cart-savings]` = ahorro, formateados igual que el token de precio (SSR emite\n\/\/ #upsells-data, #store-main-price-num y #price-format). Emitido inline\n\/\/ (`?raw`) solo en custom HTML. KEEP IN SYNC con checkout.js (preselección)\n\/\/ y DisenoPage.tsx (docs). Inerte si no hay markup.\n;(function () {\n  try {\n    var KEY = 'impultienda_upsells'\n    function el(id) { return document.getElementById(id) }\n    function ssGet(k) { try { return sessionStorage.getItem(k) } catch (e) { return null } }\n    function ssSet(k, v) { try { sessionStorage.setItem(k, v) } catch (e) { \/* storage bloqueado *\/ } }\n    function ssDel(k) { try { sessionStorage.removeItem(k) } catch (e) {} }\n\n    var catalog = []\n    try { catalog = JSON.parse((el('upsells-data') || {}).value || '[]') || [] } catch (e) {}\n    \/\/ Sin #store-main-price-num (render que no lo emite) NO se tocan los\n    \/\/ totales: el {{price}} ya viene resuelto por el SSR y pintar 0 encima\n    \/\/ lo rompe (caso modo-nosotros: tienda sin upsells, sticky en \"$0\").\n    var hasMainPrice = !!el('store-main-price-num')\n    var mainPrice = parseFloat((el('store-main-price-num') || {}).value) || 0\n    var currency = ((el('store-currency') || {}).value || '').trim()\n    var fmt = null\n    try { fmt = JSON.parse((el('price-format') || {}).value || 'null') } catch (e) {}\n\n    \/\/ Espejo de formatPrice() (storefront\/src\/lib\/formatPrice.ts) — mismas 3\n    \/\/ ramas: prefijo explícito + número \/ Intl style currency \/ fallback ISO.\n    \/\/ KEEP IN SYNC.\n    function fmtPrice(n) {\n      var spec = fmt || { currency: currency || 'USD', prefix: '', locale: 'en-US', zeroDecimal: false }\n      var dec = spec.zeroDecimal ? 0 : (n === Math.floor(n) ? 0 : 2)\n      var opts = { minimumFractionDigits: dec, maximumFractionDigits: dec }\n      if (spec.prefix) return spec.prefix + ' ' + new Intl.NumberFormat(spec.locale, opts).format(n)\n      try {\n        opts.style = 'currency'; opts.currency = spec.currency\n        return new Intl.NumberFormat(spec.locale, opts).format(n)\n      } catch (e) {\n        return spec.currency + ' ' + new Intl.NumberFormat('en-US', { minimumFractionDigits: dec, maximumFractionDigits: dec }).format(n)\n      }\n    }\n\n    function norm(t) { return String(t == null ? '' : t).trim() }\n    function findItem(t) {\n      t = norm(t)\n      if (!t) return null\n      for (var i = 0; i \u003c catalog.length; i++) {\n        var c = catalog[i]\n        if (String(c.i) === t || (c.id \u0026\u0026 c.id === t)) return c\n      }\n      return null\n    }\n    \/\/ Dos tokens son el mismo upsell si resuelven al mismo ítem del catálogo\n    \/\/ (índice y uuid intercambiables); sin catálogo, comparación literal.\n    function same(a, b) {\n      if (norm(a) === norm(b)) return true\n      var ia = findItem(a), ib = findItem(b)\n      return !!(ia \u0026\u0026 ib \u0026\u0026 ia === ib)\n    }\n\n    function read() {\n      try {\n        var v = JSON.parse(ssGet(KEY) || '[]')\n        return Array.isArray(v) ? v.map(norm).filter(Boolean) : []\n      } catch (e) { return [] }\n    }\n    function write(list) {\n      if (list.length) ssSet(KEY, JSON.stringify(list)); else ssDel(KEY)\n    }\n    function has(list, t) {\n      for (var i = 0; i \u003c list.length; i++) if (same(list[i], t)) return true\n      return false\n    }\n\n    var atcFired = {}\n    function fireAddToCart(t) {\n      var item = findItem(t)\n      var k = item ? String(item.i) : norm(t)\n      if (atcFired[k]) return\n      atcFired[k] = true\n      if (typeof window.metaTrack !== 'function' || !item) return\n      try {\n        window.metaTrack('AddToCart', {\n          value: item.price,\n          currency: currency,\n          contents: [{ id: item.name, quantity: 1, item_price: item.price }],\n          content_type: 'product',\n          num_items: 1,\n        })\n      } catch (e) { \/* pixel ausente *\/ }\n    }\n\n    function set(t, on) {\n      t = norm(t)\n      if (!t) return\n      var list = read().filter(function (x) { return !same(x, t) })\n      if (on) { list.push(t); fireAddToCart(t) }\n      write(list)\n      paint()\n    }\n    function toggle(t) { set(t, !has(read(), t)) }\n    function clear() { write([]); paint() }\n\n    function paint() {\n      var list = read()\n      var nodes = document.querySelectorAll('[data-upsell-toggle],[data-upsell-state],[data-upsell]')\n      for (var i = 0; i \u003c nodes.length; i++) {\n        var n = nodes[i]\n        var t = n.getAttribute('data-upsell-toggle') || n.getAttribute('data-upsell-state') || n.getAttribute('data-upsell')\n        var on = has(list, t)\n        n.setAttribute('data-upsell-selected', on ? '1' : '0')\n        if (n.classList) n.classList.toggle('is-selected', on)\n        if (n.tagName === 'INPUT' \u0026\u0026 n.type === 'checkbox') n.checked = on\n      }\n      var counts = document.querySelectorAll('[data-upsell-count]')\n      for (var c = 0; c \u003c counts.length; c++) counts[c].textContent = String(list.length)\n      var total = mainPrice, savings = 0\n      for (var j = 0; j \u003c list.length; j++) {\n        var it = findItem(list[j])\n        if (it) total += Number(it.price) || 0\n      }\n      var totals = hasMainPrice ? document.querySelectorAll('[data-cart-total]') : []\n      for (var k = 0; k \u003c totals.length; k++) totals[k].textContent = fmtPrice(total)\n      \/\/ Ahorro: (precio original − precio) del main + de los tildados. El SSR\n      \/\/ sólo emite precios; el ahorro por upsell viene en data-upsell-savings\n      \/\/ opcional del catálogo — si no está, queda solo el del main.\n      var sv = hasMainPrice ? document.querySelectorAll('[data-cart-savings]') : []\n      if (sv.length) {\n        savings = parseFloat((el('store-main-savings-num') || {}).value) || 0\n        for (var s = 0; s \u003c list.length; s++) {\n          var it2 = findItem(list[s])\n          if (it2 \u0026\u0026 it2.savings) savings += Number(it2.savings) || 0\n        }\n        for (var m = 0; m \u003c sv.length; m++) sv[m].textContent = fmtPrice(savings)\n      }\n    }\n\n    document.addEventListener('click', function (e) {\n      var btn = e.target \u0026\u0026 e.target.closest \u0026\u0026 e.target.closest('[data-upsell-toggle]')\n      if (!btn) return\n      \/\/ Un checkbox con data-upsell adentro de un toggle: lo maneja `change`.\n      if (e.target.tagName === 'INPUT' \u0026\u0026 e.target.hasAttribute('data-upsell')) return\n      e.preventDefault()\n      toggle(btn.getAttribute('data-upsell-toggle'))\n    })\n    document.addEventListener('change', function (e) {\n      var inp = e.target\n      if (!inp || inp.tagName !== 'INPUT' || inp.type !== 'checkbox' || !inp.hasAttribute('data-upsell')) return\n      set(inp.getAttribute('data-upsell'), !!inp.checked)\n    })\n\n    window.ImpultiendaUpsells = {\n      get: read,\n      set: set,\n      toggle: toggle,\n      clear: clear,\n      csv: function () { return read().join(',') },\n      total: function () { var l = read(), t = mainPrice; for (var i = 0; i \u003c l.length; i++) { var it = findItem(l[i]); if (it) t += Number(it.price) || 0 } return t },\n      format: fmtPrice,\n    }\n\n    paint()\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', paint)\n    window.addEventListener('pageshow', paint)\n  } catch (e) { \/* nunca romper la landing *\/ }\n})()\n\u003c\/script\u003e \u003cscript\u003e\n    \/\/ Wire any element marked with data-checkout to navigate to the platform checkout.\n    \/\/ Works alongside \u003ca href=\"\/checkout\"\u003e which already navigates natively.\n    \/\/ Preserves store_id + country query params so dev override (?country=BR)\n    \/\/ and non-subdomain testing keep working across navigation.\n    document.addEventListener('click', function (e) {\n      var el = e.target \u0026\u0026 e.target.closest \u0026\u0026 e.target.closest('[data-checkout]')\n      if (!el) return\n      e.preventDefault()\n      \/\/ This click leads straight to \/checkout — fire InitiateCheckout now\n      \/\/ (deduped against the \/checkout page-load fire). Pull price\/currency\n      \/\/ from the hidden inputs the cart uses, when available.\n      if (typeof window.metaTrackInitiateCheckout === 'function') {\n        var mpEl = document.getElementById('main-price')\n        var curEl = document.getElementById('store-currency')\n        var snEl = document.getElementById('store-name-data')\n        var price = mpEl ? parseFloat(mpEl.value) || 0 : 0\n        var data = { content_type: 'product', num_items: 1 }\n        if (curEl \u0026\u0026 curEl.value) data.currency = curEl.value\n        if (price \u003e 0) {\n          data.value = price\n          data.contents = [{ id: snEl \u0026\u0026 snEl.value ? snEl.value : 'Producto principal', quantity: 1, item_price: price }]\n        }\n        window.metaTrackInitiateCheckout(data)\n      }\n      var url = new URL(window.location.href)\n      var qs = []\n      var sid = url.searchParams.get('store_id')\n      var country = url.searchParams.get('country')\n      if (sid) qs.push('store_id=' + encodeURIComponent(sid))\n      if (country) qs.push('country=' + encodeURIComponent(country))\n      \/\/ UTMs + click ids: tracking.js ya los pega en los \u003ca href\u003e, pero acá la\n      \/\/ URL se arma a mano, así que hay que arrastrarlos igual — si no, navegar\n      \/\/ por JS pierde la atribución de la campaña. Copia del mismo helper que\n      \/\/ usan cart.js y pre-downsell.js (tracking.js va inline y no exporta).\n      try {\n        var st = JSON.parse(sessionStorage.getItem('impultienda_utm') || '{}') || {}\n        var tk = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'utm_adset', 'utm_id']\n        for (var ti = 0; ti \u003c tk.length; ti++) {\n          var tv = st[tk[ti]] || url.searchParams.get(tk[ti])\n          if (!tv) continue\n          tv = String(tv).split('::')[0].trim().slice(0, 100)\n          if (tv) qs.push(tk[ti] + '=' + encodeURIComponent(tv))\n        }\n        \/\/ Los click ids van CRUDOS y con la URL primero: son tokens opacos de\n        \/\/ ~200 chars y truncarlos rompe la cookie _fbc que rearma el pixel en\n        \/\/ el checkout (Meta: 'valor de fbclid modificado', 23-ago-2026).\n        var ckk = ['fbclid', 'gclid', 'ttclid', 'msclkid', 'twclid', 'xcod', 'sck']\n        for (var ci = 0; ci \u003c ckk.length; ci++) {\n          var cvv = url.searchParams.get(ckk[ci]) || st[ckk[ci]]\n          if (!cvv) continue\n          cvv = String(cvv).trim().slice(0, 512)\n          if (cvv) qs.push(ckk[ci] + '=' + encodeURIComponent(cvv))\n        }\n        \/\/ Upsells tildados en la landing de HTML propio (upsellPicker.js) →\n        \/\/ el checkout los preselecciona (checkout.js lee ?upsells=).\n        var us = JSON.parse(sessionStorage.getItem('impultienda_upsells') || '[]')\n        if (Array.isArray(us) \u0026\u0026 us.length) qs.push('upsells=' + encodeURIComponent(us.join(',')))\n      } catch (e) { \/* storage bloqueado: seguimos sin UTMs *\/ }\n      window.location.href = '\/checkout' + (qs.length ? '?' + qs.join('\u0026') : '')\n    })\n  \u003c\/script\u003e \u003cscript type=\"module\" src=\"\/_astro\/index.astro_astro_type_script_index_0_lang.B4wS0Iuu.js\"\u003e\u003c\/script\u003e\u003c\/p\u003e\n\u003cdiv id=\"downsell-exit-modal\" class=\"fixed inset-0 z-[100] hidden items-center justify-center bg-black\/60 backdrop-blur-sm px-4\" role=\"dialog\"\u003e\n\u003cdiv class=\"bg-white rounded-2xl shadow-2xl max-w-md w-full p-6 sm:p-8 text-center\"\u003e\n\u003ch2 id=\"downsell-modal-title\" class=\"text-2xl font-extrabold text-gray-900 leading-tight mb-2\"\u003e¡Esperá! Tenemos un regalo para vos 🎁\u003c\/h2\u003e\n\u003cp class=\"text-sm text-gray-600 leading-relaxed mb-6\"\u003eAntes de irte, mirá esta oferta exclusiva con un descuento que solo está disponible ahora.\u003c\/p\u003e\n\u003cbutton id=\"downsell-modal-accept\" type=\"button\" class=\"w-full text-white py-3.5 rounded-xl font-bold text-base transition-all hover:opacity-90 shadow-sm mb-2\" style=\"background-color: #1e293b;\"\u003e Ver oferta \u003c\/button\u003e \u003cbutton id=\"downsell-modal-dismiss\" type=\"button\" class=\"w-full bg-transparent text-gray-500 py-2 text-sm hover:text-gray-700 transition-colors\"\u003e No, gracias \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cinput type=\"hidden\" id=\"downsell-id\" value=\"73416c10-2214-47e7-b0a6-532389037aef\"\u003e \u003cinput type=\"hidden\" id=\"downsell-trigger\" value=\"exit_intent\"\u003e \u003cinput type=\"hidden\" id=\"downsell-store-id\" value=\"e65e5433-4e1a-4955-a8ea-bc953cb056fc\"\u003e \u003cinput type=\"hidden\" id=\"downsell-offer-href\" value=\"\/oferta-especial?store_id=e65e5433-4e1a-4955-a8ea-bc953cb056fc\"\u003e \u003cscript\u003e\n    \/\/ Resizes \u003cCustomSection \/\u003e iframes to match their content height.\n    \/\/ Each iframe posts {type:'__cs_h__', id, h} from its own srcdoc script.\n    window.addEventListener('message', function (e) {\n      var d = e \u0026\u0026 e.data\n      if (!d || d.type !== '__cs_h__' || typeof d.h !== 'number') return\n      var sel = '[data-custom-section-id=\"' + String(d.id).replace(\/\"\/g, '\\\\\"') + '\"]'\n      var f = document.querySelector(sel)\n      if (f) f.style.height = Math.max(0, d.h) + 'px'\n    })\n  \u003c\/script\u003e \u003cscript type=\"module\" src=\"https:\/\/static.cloudflareinsights.com\/beacon.min.js\/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495\" integrity=\"sha512-iIg7k2xntmwu6\/uSb5tpc\/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==\" data-cf-beacon='{\"version\":\"2024.11.0\",\"token\":\"0e290c1e99c046bd936e4a650ae457f6\",\"r\":1,\"spa\":2}' crossorigin=\"anonymous\"\u003e\u003c\/script\u003e\u003c\/p\u003e","brand":"Mi tienda 4","offers":[{"title":"Default Title","offer_id":67596671156373,"sku":null,"price":19900.0,"currency_code":"ARS","in_stock":true}],"url":"https:\/\/marianarios.lat\/products\/ebook-recetas-salsas-sopas","provider":"Mariana Rios","version":"1.0","type":"link"}