{"id":552,"date":"2026-09-21T12:16:07","date_gmt":"2026-09-21T15:16:07","guid":{"rendered":"https:\/\/order-science.com\/?page_id=552"},"modified":"2026-10-02T09:45:49","modified_gmt":"2026-10-02T12:45:49","slug":"tienda-en","status":"publish","type":"page","link":"https:\/\/order-science.com\/en\/tienda-en\/","title":{"rendered":"Store"},"content":{"rendered":"\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Store \u00b7 Order Science<\/title>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&amp;display=swap\">\n<style>\n  \/* ============ RESET \/ TOKENS (alineado a order-science.com) ============ *\/\n  #order-tienda, #order-tienda *{box-sizing:border-box;}\n  #order-tienda{\n    --navy:#0d1f3c; --navy-soft:#5b6a82; --blue:#1ea4e4; --blue-deep:#0d7ab8;\n    --paper:#ffffff; --alt:#f4f8fc; --line:rgba(143,168,200,.22);\n    --shadow-sm:0 4px 24px rgba(13,31,60,.07); --shadow-lg:0 24px 60px rgba(13,31,60,.14);\n    margin:0;background:var(--paper);font-family:'Inter',system-ui,sans-serif;color:var(--navy);\n    -webkit-font-smoothing:antialiased;position:relative;\n  }\n  \/* bot\u00f3n de idioma ES\/EN \u2014 mismo patr\u00f3n visual que \/omega3\/ (pill absoluta, NO flotante\/fixed,\n     posicionada relativa al wrapper #order-tienda, as\u00ed queda sobre el hero pero se desplaza con\n     la p\u00e1gina al hacer scroll). *\/\n  #order-tienda .ot-lang-switch{position:absolute;inset:14px 5% auto auto;z-index:30;display:flex;flex-wrap:nowrap;align-items:center;gap:6px;max-width:120px;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-lang-switch span,#order-tienda .ot-lang-switch a{display:inline-block;background:rgba(10,42,67,.55);color:#fff;font-size:.85rem;font-weight:700;letter-spacing:.5px;padding:7px 13px;border-radius:100px;text-decoration:none;white-space:nowrap;line-height:1;}\n  #order-tienda .ot-lang-switch span.active{background:var(--navy);}\n  @media (max-width:900px){#order-tienda .ot-lang-switch{top:76px;right:4%;}}\n  #order-tienda h1,#order-tienda h2,#order-tienda h3,#order-tienda .ot-logo,#order-tienda .cta-price,#order-tienda .ot-pname,#order-tienda .ot-buy-link,#order-tienda .ot-viewbtn,#order-tienda .ot-banner-title{\n    font-family:'Inter',system-ui,sans-serif;\n  }\n  #order-tienda a{color:var(--navy);text-decoration:none !important;}\n  #order-tienda a:hover{color:var(--blue-deep);}\n  #order-tienda button{font-family:inherit;cursor:pointer;}\n  #order-tienda .ot-wrap{max-width:1240px;margin:0 auto;padding:0 24px;}\n  #order-tienda .ot-grid{--cols:4;--gap:26px;display:flex;flex-wrap:wrap;justify-content:center;gap:var(--gap);}\n  #order-tienda .ot-grid > .ot-card{flex:0 0 calc((100% - (var(--cols) - 1) * var(--gap)) \/ var(--cols));min-width:0;}\n  \/* Disponibles: 9 productos = 3 columnas (3 filas parejas). Las secciones por categoria usan 4 y\n     centran la ultima fila si queda incompleta (flex + justify-content:center). *\/\n  #order-tienda #ot-grid-disponibles{--cols:3;}\n  @media (min-width:1101px){#order-tienda .ot-grid.ot-grid--3{--cols:3;}}\n  @media (max-width:1100px){#order-tienda .ot-grid,#order-tienda #ot-grid-disponibles{--cols:3;--gap:20px;}}\n  @media (max-width:700px){#order-tienda .ot-grid,#order-tienda #ot-grid-disponibles{--cols:2;--gap:12px;}#order-tienda .ot-wrap{padding:0 14px;}\n    #order-tienda .ot-cardimg{height:262px;padding:46px 12px 14px;}#order-tienda .ot-pname{font-size:16px;min-height:42px;}#order-tienda .ot-cardbody{padding:14px 12px 16px;}\n    #order-tienda .ot-buy-link{font-size:15px;}#order-tienda .ot-viewbtn{font-size:14.5px;}#order-tienda .ot-title-block h2{font-size:32px;}\n    #order-tienda .ot-banner-title{font-size:20px;}#order-tienda .ot-banner{padding:18px 18px 18px 22px;}}\n  @media (max-width:420px){#order-tienda .ot-grid,#order-tienda #ot-grid-disponibles{--cols:1;}#order-tienda .ot-cardimg{height:350px;}}\n\n  \/* ---- foto: variante cover (fotos de producto con fondo\/escena propia) ---- *\/\n  #order-tienda .ot-cardimg img.is-cover{width:100%;height:100%;max-width:none;max-height:none;object-fit:cover;}\n  \/* barra de color de la categoria arriba de cada card *\/\n  #order-tienda .ot-card::before{content:\"\";position:absolute;z-index:3;left:0;right:0;top:0;height:5px;background:linear-gradient(90deg,var(--accent,var(--blue)),var(--accent-deep,var(--blue-deep)));}\n  #order-tienda .ot-card--soon .ot-cardimg img{filter:saturate(.92);}\n  \/* navegacion rapida a las secciones *\/\n  #order-tienda .ot-quicknav{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 0;}\n  #order-tienda .ot-quicknav a{display:inline-flex;align-items:center;gap:8px;font-family:'Inter',sans-serif;font-size:15.5px;font-weight:700;color:var(--navy);background:#fff;border:1px solid var(--line);border-radius:999px;padding:10px 18px;box-shadow:var(--shadow-sm);transition:transform .15s ease,background .15s ease,color .15s ease;}\n  #order-tienda .ot-quicknav a i{width:10px;height:10px;border-radius:50%;background:var(--c,var(--blue));display:inline-block;}\n  #order-tienda .ot-quicknav a:hover{transform:translateY(-2px);background:var(--navy);color:#fff;}\n\n  \/* ============ HERO ============ *\/\n  #order-tienda .ot-hero{position:relative;overflow:hidden;padding:84px 0 72px;background:linear-gradient(160deg,#0a1830 0%,#0d1f3c 55%,#0f2a52 100%);}\n  #order-tienda .ot-hero::before{content:\"\";position:absolute;z-index:0;top:-120px;right:-80px;width:480px;height:480px;border-radius:50%;background:radial-gradient(circle,rgba(30,164,228,.28) 0%,rgba(30,164,228,0) 70%);pointer-events:none;}\n  \/* patr\u00f3n de hex\u00e1gonos \u2014 mismo recurso que usan en \/energy y la home, adaptado a la paleta de la tienda *\/\n  #order-tienda .ot-hero::after{content:\"\";position:absolute;z-index:0;inset:0;pointer-events:none;\n    background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 100 100'%3E%3Cpolygon points='50,4 85,24 85,64 50,84 15,64 15,24' fill='none' stroke='%23ffffff' stroke-width='1' opacity='0.16'\/%3E%3Cpolygon points='50,16 74,30 74,58 50,72 26,58 26,30' fill='none' stroke='%2300d2ff' stroke-width='0.8' opacity='0.14'\/%3E%3C\/svg%3E\");\n    background-size:104px 104px;background-repeat:repeat;\n    -webkit-mask-image:linear-gradient(100deg,transparent 0%,transparent 30%,black 65%,black 100%);\n    mask-image:linear-gradient(100deg,transparent 0%,transparent 30%,black 65%,black 100%);\n  }\n  #order-tienda .ot-hero .ot-wrap{position:relative;z-index:1;}\n  \/* figura humana generada para el hero \u2014 capa detr\u00e1s del texto, se desvanece contra el fondo navy *\/\n  #order-tienda .ot-hero-figure{position:absolute;z-index:0;top:0;right:0;bottom:0;width:46%;object-fit:cover;object-position:right center;pointer-events:none;\n    -webkit-mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.55) 20%,#000 42%);\n    mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.55) 20%,#000 42%);\n  }\n  @media (max-width:900px){#order-tienda .ot-hero-figure{display:none;}}\n  #order-tienda .ot-eyebrow{font-size:14.5px;font-weight:700;letter-spacing:2.5px;color:var(--blue);margin-bottom:18px;text-transform:uppercase;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-hero h1{font-size:60px;font-weight:800;line-height:1.08;margin:0 0 20px;max-width:760px;letter-spacing:-.5px;color:#fff;}\n  #order-tienda .ot-hero h1 .grad{background-image:linear-gradient(135deg,rgb(255,255,255) 0%,rgb(0,210,255) 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;}\n  #order-tienda .ot-hero p{font-size:20px;color:rgba(255,255,255,.8);max-width:580px;margin:0 0 32px;line-height:1.55;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-features{display:flex;gap:12px;flex-wrap:wrap;}\n  #order-tienda .ot-feature{display:flex;align-items:center;gap:9px;font-size:15.5px;font-weight:600;color:#fff;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);padding:11px 19px;border-radius:999px;font-family:'Inter',sans-serif;}\n\n  \/* ---- stat row (datos reales del cat\u00e1logo, con count-up al cargar) ---- *\/\n  #order-tienda .ot-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin-top:44px;border-radius:18px;overflow:hidden;background:rgba(255,255,255,.14);box-shadow:0 20px 50px rgba(0,0,0,.22);}\n  #order-tienda .ot-stat{background:rgba(10,24,48,.55);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);padding:22px 18px;text-align:left;}\n  #order-tienda .ot-stat-num{font-family:'Inter',sans-serif;font-size:38px;font-weight:800;line-height:1;color:#fff;display:flex;align-items:baseline;gap:2px;}\n  #order-tienda .ot-stat-num .plus{font-size:22px;color:var(--blue);font-weight:700;}\n  #order-tienda .ot-stat-label{margin-top:8px;font-size:14px;font-weight:600;letter-spacing:0.2px;color:rgba(255,255,255,.72);font-family:'Inter',sans-serif;}\n  @media (max-width:768px){#order-tienda .ot-stats{grid-template-columns:repeat(2,minmax(0,1fr));}}\n  @media (max-width:640px){#order-tienda .ot-stats{margin-top:22px;}#order-tienda .ot-stat{padding:16px 14px;}#order-tienda .ot-stat-num{font-size:30px;}#order-tienda .ot-hero h1{font-size:31px;margin-bottom:12px;}#order-tienda .ot-hero p{font-size:16px;margin-bottom:18px;}#order-tienda .ot-hero{padding:112px 0 30px;}#order-tienda .ot-eyebrow{font-size:11.5px;letter-spacing:1.4px;margin-bottom:12px;}#order-tienda .ot-feature{font-size:13px;padding:8px 13px;}#order-tienda .ot-features{gap:8px;}#order-tienda .ot-stat-label{font-size:12.5px;}}\n\n  \/* ---- trust strip (ciencia \/ tecnolog\u00eda \/ bienestar) ---- *\/\n  #order-tienda .ot-trust{padding:48px 0;background:var(--paper);border-bottom:1px solid var(--line);}\n  #order-tienda .ot-trust-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;}\n  #order-tienda .ot-trust-card{display:flex;align-items:flex-start;gap:16px;padding:6px 4px;}\n  #order-tienda .ot-trust-icon{width:54px;height:54px;border-radius:15px;background:linear-gradient(135deg,var(--alt) 0%,#e7f1fb 100%);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;flex-shrink:0;}\n  #order-tienda .ot-trust-title{font-size:18.5px;font-weight:700;color:var(--navy);margin-bottom:5px;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-trust-tag{font-size:15.5px;color:var(--navy-soft);line-height:1.5;font-family:'Inter',sans-serif;}\n  @media (max-width:768px){#order-tienda .ot-trust-grid{grid-template-columns:1fr;gap:20px;}}\n\n  \/* ---- scroll reveal ---- *\/\n  #order-tienda .ot-reveal{opacity:0;transform:translateY(22px);transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1);}\n  #order-tienda .ot-reveal.is-visible{opacity:1;transform:translateY(0);}\n  @media (prefers-reduced-motion:reduce){#order-tienda .ot-reveal{opacity:1;transform:none;transition:none;}}\n\n  \/* ============ SECTION TITLE ============ *\/\n  #order-tienda .ot-title-block{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:12px;}\n  #order-tienda .ot-title-block h2{font-size:42px;font-weight:700;margin:0 0 8px;letter-spacing:-.3px;color:var(--navy);}\n  #order-tienda .ot-title-block p{font-size:18px;color:var(--navy-soft);margin:0;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-title-eyebrow{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:700;letter-spacing:1.8px;color:var(--blue-deep);text-transform:uppercase;margin-bottom:10px;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-title-eyebrow .dot{width:6px;height:6px;border-radius:50%;background:var(--blue);box-shadow:0 0 0 4px rgba(30,164,228,.18);}\n\n  \/* ============ FILTROS ============ *\/\n  #order-tienda .ot-filterbar{position:relative;display:flex;flex-direction:column;gap:16px;margin:24px 0 6px;padding:26px 28px 28px;background:linear-gradient(165deg,#ffffff 0%,var(--alt) 100%);border:1px solid var(--line);border-radius:20px;box-shadow:var(--shadow-sm);overflow:hidden;}\n  #order-tienda .ot-filterbar::before{content:\"\";position:absolute;top:-40px;right:-40px;width:180px;height:180px;border-radius:50%;background:radial-gradient(circle,rgba(30,164,228,.10) 0%,rgba(30,164,228,0) 70%);pointer-events:none;}\n  #order-tienda .ot-filter-head{position:relative;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;}\n  #order-tienda .ot-filter-head-left{display:flex;align-items:center;gap:11px;cursor:pointer;flex-wrap:wrap;min-width:0;}\n  #order-tienda .ot-filter-icon{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,var(--blue) 0%,var(--blue-deep) 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 4px 12px rgba(30,164,228,.35);}\n  #order-tienda .ot-filter-title{font-family:'Inter',sans-serif;font-size:21px;font-weight:700;color:var(--navy);}\n  #order-tienda .ot-filter-head-right{display:flex;align-items:center;gap:10px;}\n  #order-tienda .ot-result-count{font-size:15.5px;color:var(--navy-soft);font-family:'Inter',sans-serif;white-space:nowrap;}\n  #order-tienda .ot-chip-reset{font-family:'Inter',sans-serif;font-size:14.5px;font-weight:700;color:#fff;background:var(--navy);border:1px solid var(--navy);border-radius:999px;padding:9px 18px;cursor:pointer;transition:all .15s ease;white-space:nowrap;}\n  #order-tienda .ot-chip-reset:hover{background:var(--blue-deep);border-color:var(--blue-deep);}\n  #order-tienda .ot-filter-toggle{display:flex;align-items:center;gap:8px;font-family:'Inter',sans-serif;font-size:15.5px;font-weight:700;color:var(--navy);background:var(--alt);border:1px solid var(--line);border-radius:999px;padding:10px 18px;cursor:pointer;transition:all .15s ease;white-space:nowrap;}\n  #order-tienda .ot-filter-toggle:hover{border-color:rgba(30,164,228,.5);color:var(--blue-deep);}\n  #order-tienda .ot-filter-toggle svg{transition:transform .2s ease;flex-shrink:0;}\n  #order-tienda .ot-filterbar.is-open .ot-filter-toggle{background:var(--navy);border-color:var(--navy);color:#fff;}\n  #order-tienda .ot-filterbar.is-open .ot-filter-toggle svg{transform:rotate(180deg);}\n  #order-tienda .ot-filter-summary{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}\n  #order-tienda .ot-filterbar.is-open .ot-filter-summary{display:none;}\n  #order-tienda .ot-chip-mini{font-family:'Inter',sans-serif;font-size:14px;font-weight:600;color:var(--blue-deep);background:rgba(30,164,228,.10);border:1px solid rgba(30,164,228,.22);border-radius:999px;padding:5px 13px;white-space:nowrap;}\n  #order-tienda .ot-filter-body{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .28s ease,opacity .2s ease,margin-top .28s ease;margin-top:0;}\n  #order-tienda .ot-filter-body > div{overflow:hidden;display:flex;flex-direction:column;gap:16px;min-height:0;}\n  #order-tienda .ot-filterbar.is-open .ot-filter-body{grid-template-rows:1fr;opacity:1;margin-top:18px;}\n  #order-tienda .ot-filterbar.is-open .ot-filter-body > div{padding-top:18px;border-top:1px solid var(--line);}\n  #order-tienda .ot-filter-row{position:relative;display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;}\n  #order-tienda .ot-filter-label{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;letter-spacing:0.8px;color:var(--navy-soft);text-transform:uppercase;width:170px;flex-shrink:0;padding-top:9px;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-filter-label svg{flex-shrink:0;opacity:0.7;}\n  #order-tienda .ot-chip-group{display:flex;gap:8px;flex-wrap:wrap;}\n  #order-tienda .ot-chip{font-family:'Inter',sans-serif;font-size:15px;font-weight:600;color:var(--navy-soft);background:#fff;border:1px solid var(--line);border-radius:999px;padding:9px 11px 9px 17px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,background .15s ease,box-shadow .15s ease,color .15s ease;display:inline-flex;align-items:center;gap:7px;}\n  #order-tienda .ot-chip:hover{transform:translateY(-1.5px);border-color:rgba(30,164,228,.5);color:var(--navy);box-shadow:0 3px 10px rgba(13,31,60,.08);}\n  #order-tienda .ot-chip-count{font-size:12.5px;font-weight:700;color:var(--navy-soft);background:var(--alt);border-radius:999px;padding:2px 7px;line-height:1.4;transition:all .15s ease;}\n  #order-tienda .ot-chip.active{background:linear-gradient(135deg,var(--blue) 0%,var(--blue-deep) 100%);border-color:transparent;color:#fff;box-shadow:0 5px 16px rgba(30,164,228,.35);transform:translateY(-1.5px);}\n  #order-tienda .ot-chip.active .ot-chip-count{background:rgba(255,255,255,.28);color:#fff;}\n  #order-tienda .ot-empty{display:none;align-items:center;justify-content:center;flex-direction:column;gap:14px;padding:60px 20px;color:var(--navy-soft);font-family:'Inter',sans-serif;font-size:18px;text-align:center;}\n  #order-tienda .ot-empty button{background:var(--alt);border:1px solid var(--line);border-radius:999px;padding:12px 24px;color:var(--navy);font-weight:600;cursor:pointer;font-family:'Inter',sans-serif;font-size:16px;}\n  @media (max-width:640px){#order-tienda .ot-filter-label{width:auto;}}\n\n  \/* ============ SECTION BANNER ============ *\/\n  #order-tienda .ot-section{padding:52px 0;}\n  #order-tienda .ot-banner{position:relative;display:flex;align-items:center;gap:18px;padding:24px 28px 24px 30px;border-radius:20px;margin-bottom:28px;background:linear-gradient(160deg,#ffffff 0%,var(--alt) 100%);border:1px solid var(--line);box-shadow:var(--shadow-sm);overflow:hidden;}\n  #order-tienda .ot-banner::before{content:\"\";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent, var(--blue));}\n  #order-tienda .ot-banner-icon{width:50px;height:50px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:linear-gradient(135deg,var(--accent,var(--blue)) 0%,var(--accent-deep,var(--blue-deep)) 100%);box-shadow:0 6px 16px -4px var(--accent, rgba(30,164,228,.5));}\n  #order-tienda .ot-banner-title-row{display:flex;align-items:center;gap:9px;flex-wrap:wrap;}\n  #order-tienda .ot-banner-title{font-size:25px;font-weight:800;letter-spacing:1px;color:var(--navy);}\n  #order-tienda .ot-banner-count{font-size:14px;font-weight:700;color:var(--accent-deep,var(--blue-deep));background:var(--accent-soft, rgba(30,164,228,.12));border-radius:999px;padding:4px 13px;}\n  #order-tienda .ot-banner-tag{font-size:17px;color:var(--navy-soft);font-family:'Inter',sans-serif;margin-top:3px;}\n\n  \/* ============ CARD ============ *\/\n  #order-tienda .ot-card{background:linear-gradient(180deg,#ffffff 0%,#f7fbff 100%);border:1px solid var(--line);border-radius:22px;overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-sm);transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;position:relative;}\n  #order-tienda .ot-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:var(--accent,var(--blue));}\n  #order-tienda .ot-card--featured{border-color:rgba(30,164,228,.35);}\n  #order-tienda .ot-cardimg{position:relative;height:336px;padding:50px 18px 20px;display:flex;align-items:center;justify-content:center;background:#ffffff;overflow:hidden;}\n  #order-tienda .ot-cardimg img{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center;transition:transform .35s ease;}\n  #order-tienda .ot-card:hover .ot-cardimg img{transform:scale(1.055);}\n  \/* la foto linkea a la landing del producto (pedido del cliente); display:contents\n     para que el <a> no altere el centrado flex de .ot-cardimg (se comporta como\n     si el <img> fuera hijo directo). *\/\n  #order-tienda .ot-cardimg a.ot-imglink{display:contents;cursor:pointer;}\n  #order-tienda .ot-noimg{display:flex;flex-direction:column;align-items:center;gap:6px;opacity:0.55;}\n  #order-tienda .ot-noimg span{font-size:10px;font-weight:600;letter-spacing:0.4px;color:var(--navy-soft);font-family:'Inter',sans-serif;}\n  #order-tienda .ot-badge{position:absolute;top:14px;left:14px;z-index:2;background:rgba(13,31,60,.88);color:#fff;font-size:12.5px;font-weight:700;letter-spacing:0.8px;padding:7px 13px;border-radius:999px;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-cardbody{padding:20px 20px 22px;display:flex;flex-direction:column;gap:12px;flex-grow:1;}\n  #order-tienda .ot-pname{font-size:19px;font-weight:700;line-height:1.25;min-height:48px;color:var(--navy);}\n  #order-tienda .ot-buyblock{display:flex;flex-direction:column;gap:10px;margin-top:auto;}\n\n  \/* qty selector + buy button \u2014 rectangular con borde leve (mismo radio en\n     los 3 controles para que se lean como un solo bloque, no 3 p\u00edldoras\n     sueltas) *\/\n  #order-tienda .qty-selector{display:flex;align-items:stretch;border:1px solid var(--line);border-radius:11px;overflow:hidden;height:46px;}\n  #order-tienda .qty-btn{background:var(--alt);border:none;width:46px;font-size:20px;font-weight:600;color:var(--navy);height:100% !important;align-self:stretch !important;box-sizing:border-box !important;}\n  #order-tienda .qty-input{border:none;width:100%;text-align:center;font-size:17px;height:100% !important;align-self:stretch !important;box-sizing:border-box !important;-moz-appearance:textfield;font-family:'Inter',sans-serif;color:var(--navy);}\n  #order-tienda .qty-input::-webkit-outer-spin-button,#order-tienda .qty-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}\n  #order-tienda .ot-buy-link{background:var(--blue);color:#fff;border:1px solid var(--blue-deep);border-radius:11px;padding:13px 12px;font-size:17px;font-weight:700;letter-spacing:0.2px;text-transform:uppercase;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-decoration:none !important;box-shadow:0 1px 2px rgba(13,31,60,.06);transition:background-color .15s ease,border-color .15s ease,transform .15s ease;}\n  #order-tienda .ot-buy-link:hover{background:var(--blue-deep);border-color:var(--blue-deep);transform:translateY(-1px);color:#fff;}\n  #order-tienda .ot-buy-link .cta-price{font-size:15px;font-weight:500;opacity:0.9;text-transform:none;letter-spacing:0;font-family:'Inter',sans-serif;}\n  #order-tienda .ot-buy-link.is-loading{opacity:0.72;pointer-events:none;}\n  #order-tienda .ot-buy-link.is-soon{background:var(--alt);color:var(--navy-soft);border:1px solid var(--line);box-shadow:none;cursor:default;pointer-events:none;}\n  #order-tienda .ot-buy-link.is-soon .cta-label{font-size:16px;font-weight:700;letter-spacing:0;}\n  #order-tienda .ot-buy-link.is-soon .cta-price{font-size:13.5px;}\n  #order-tienda .ot-viewbtn{font-size:15.5px;font-weight:700;text-align:center;border:1.5px solid rgba(13,31,60,.18);border-radius:11px;padding:12px 0;color:var(--navy);display:block;letter-spacing:0.2px;transition:background-color .15s ease,border-color .15s ease;}\n  #order-tienda .ot-viewbtn:hover{background:var(--navy);color:#fff;border-color:var(--navy);}\n\n<\/style>\n\n\n<div id=\"order-tienda\">\n\n  <!-- BOT\u00d3N DE IDIOMA ES\/EN (no flotante \u2014 mismo patr\u00f3n que \/omega3\/) -->\n  <div class=\"ot-lang-switch\"><a href=\"https:\/\/order-science.com\/tienda\/\">ES<\/a><span class=\"active\">EN<\/span><\/div>\n\n  <!-- HERO -->\n  <section class=\"ot-hero\">\n    <img decoding=\"async\" class=\"ot-hero-figure\" src=\"https:\/\/order-science.com\/wp-content\/uploads\/2026\/09\/order-science-hero-tienda.webp\" alt=\"\" aria-hidden=\"true\" loading=\"eager\">\n    <div class=\"ot-wrap\">\n      <div class=\"ot-eyebrow\">HIGH-BIOAVAILABILITY SUPPLEMENTS<\/div>\n      <h1>Your wellbeing, <span class=\"grad\">in one store<\/span><\/h1>\n      <p>Science, technology, innovation and science-backed quality.<\/p>\n      <div class=\"ot-features\">\n        <div class=\"ot-feature\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 20A7 7 0 0 1 4 13c0-4 3-6 3-10 3 1 6 4 6 9a5 5 0 0 0 5 5 7 7 0 0 1-7 7z\"><\/path><\/svg>\n          Advanced formulas\n        <\/div>\n        <div class=\"ot-feature\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 3h6l1 5-4 9-4-9 1-5z\"><\/path><path d=\"M8 8h8\"><\/path><\/svg>\n          Quality ingredients\n        <\/div>\n        <div class=\"ot-feature\">\n          <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 1 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z\"><\/path><\/svg>\n          Wellbeing at every stage\n        <\/div>\n      <\/div>\n\n      <!-- Stats \u2014 n\u00fameros reales del cat\u00e1logo (se completan por JS a partir de DATA), con count-up -->\n      <div class=\"ot-stats\" id=\"ot-stats\"><\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"ot-wrap ot-title-block\" style=\"padding:40px 24px 0;\">\n    <div>\n      <div class=\"ot-title-eyebrow\"><span class=\"dot\"><\/span>Full catalog<\/div>\n      <h2>All products<\/h2>\n      <p>Explore our full line of supplements, organized by category.<\/p>\n      <nav class=\"ot-quicknav\" aria-label=\"Sections\">\n        <a href=\"#ot-disponibles\"><i style=\"--c:#7c5cff\"><\/i>Available<\/a>\n        <a href=\"#ot-salud\"><i style=\"--c:#1ea4e4\"><\/i>Health<\/a>\n        <a href=\"#ot-beauty\"><i style=\"--c:#e0507a\"><\/i>Beauty<\/a>\n        <a href=\"#ot-performance\"><i style=\"--c:#e8991f\"><\/i>Performance<\/a>\n        <a href=\"#ot-electrolitos\"><i style=\"--c:#17b8a6\"><\/i>Electrolytes<\/a>\n      <\/nav>\n    <\/div>\n  <\/div>\n\n  <!-- FILTROS (por complemento \/ beneficio, no por categor\u00eda \u2014 se arma por JS).\n       Va arriba de \"Disponibles\" a prop\u00f3sito: filtra todas las secciones de\n       abajo (incluida Disponibles), as\u00ed que conviene que se vea primero. -->\n  <div class=\"ot-wrap ot-reveal\">\n    <div class=\"ot-filterbar\" id=\"ot-filterbar\"><\/div>\n  <\/div>\n\n  <div class=\"ot-wrap\">\n    <div class=\"ot-empty\" id=\"ot-empty-state\">\n      <div>We could not find products with those filters.<\/div>\n      <button type=\"button\" id=\"ot-empty-reset\">View all products<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- DISPONIBLES: vitrina con lo que hoy se puede comprar (se arma por JS,\n       reusando los mismos productos que aparecen m\u00e1s abajo en su categor\u00eda). -->\n  <section id=\"ot-disponibles\" class=\"ot-section\" style=\"padding-top:8px;\">\n    <div class=\"ot-wrap ot-reveal\" id=\"ot-banner-disponibles\"><\/div>\n    <div class=\"ot-wrap\"><div class=\"ot-grid\" id=\"ot-grid-disponibles\"><\/div><\/div>\n  <\/section>\n\n  <!-- Las 4 secciones se completan por JS a partir de PRODUCT_DATA, m\u00e1s abajo -->\n  <section id=\"ot-salud\" class=\"ot-section\"><div class=\"ot-wrap ot-reveal\" id=\"ot-banner-salud\"><\/div><div class=\"ot-wrap\"><div class=\"ot-grid\" id=\"ot-grid-salud\"><\/div><\/div><\/section>\n  <section id=\"ot-beauty\" class=\"ot-section\" style=\"background:var(--alt);\"><div class=\"ot-wrap ot-reveal\" id=\"ot-banner-beauty\"><\/div><div class=\"ot-wrap\"><div class=\"ot-grid\" id=\"ot-grid-beauty\"><\/div><\/div><\/section>\n  <section id=\"ot-performance\" class=\"ot-section\"><div class=\"ot-wrap ot-reveal\" id=\"ot-banner-performance\"><\/div><div class=\"ot-wrap\"><div class=\"ot-grid\" id=\"ot-grid-performance\"><\/div><\/div><\/section>\n  <section id=\"ot-electrolitos\" class=\"ot-section\" style=\"background:var(--alt);padding-bottom:44px;\"><div class=\"ot-wrap ot-reveal\" id=\"ot-banner-electrolitos\"><\/div><div class=\"ot-wrap\"><div class=\"ot-grid\" id=\"ot-grid-electrolitos\"><\/div><\/div><\/section>\n\n  <!-- TRUST STRIP \u2014 ciencia \/ tecnolog\u00eda \/ bienestar (reubicada al final de\n       la p\u00e1gina, pedido expl\u00edcito de Nessie; antes iba justo debajo del hero). -->\n  <section class=\"ot-trust\" style=\"border-bottom:none;\">\n    <div class=\"ot-wrap ot-trust-grid\">\n      <div class=\"ot-trust-card ot-reveal\">\n        <div class=\"ot-trust-icon\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1ea4e4\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"3\"><\/circle><path d=\"M12 2v3M12 19v3M4.2 4.2l2.1 2.1M17.7 17.7l2.1 2.1M2 12h3M19 12h3M4.2 19.8l2.1-2.1M17.7 6.3l2.1-2.1\"><\/path><\/svg>\n        <\/div>\n        <div>\n          <div class=\"ot-trust-title\">Liposomal technology<\/div>\n          <div class=\"ot-trust-tag\">Encapsulation designed to support better absorption than traditional forms.<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"ot-trust-card ot-reveal\">\n        <div class=\"ot-trust-icon\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1ea4e4\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 2h6v3.5l3 5.5v7a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3v-7l3-5.5V2z\"><\/path><path d=\"M9 14h6\"><\/path><\/svg>\n        <\/div>\n        <div>\n          <div class=\"ot-trust-title\">Pharmaceutical-grade formulas<\/div>\n          <div class=\"ot-trust-tag\">Selected ingredients and manufacturing processes controlled from end to end.<\/div>\n        <\/div>\n      <\/div>\n      <div class=\"ot-trust-card ot-reveal\">\n        <div class=\"ot-trust-icon\">\n          <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#1ea4e4\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M11 20A7 7 0 0 1 4 13c0-4 3-6 3-10 3 1 6 4 6 9a5 5 0 0 0 5 5 7 7 0 0 1-7 7z\"><\/path><\/svg>\n        <\/div>\n        <div>\n          <div class=\"ot-trust-title\">Designed for your daily wellbeing<\/div>\n          <div class=\"ot-trust-tag\">One line per goal \u2014 health, performance, beauty and hydration \u2014 to build your routine.<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n<\/div>\n\n<script>\n(function(){\n\n  \/\/ ======================================================================\n  \/\/ CONFIG \u2014 ajustar antes de publicar\n  \/\/ ======================================================================\n  \/\/ Base de las im\u00e1genes. Sub\u00ed la carpeta \"img\/\" tal cual al servidor\n  \/\/ (o a la Media Library de WP) y actualiz\u00e1 esta ruta si hace falta.\n  var IMG_BASE = 'https:\/\/order-science.com\/img\/';\n\n  \/\/ ======================================================================\n  \/\/ DATOS DE PRODUCTO\n  \/\/ notInStock=false (o sea, en stock) => se muestra precio + bot\u00f3n Agregar.\n  \/\/ ======================================================================\n  \/\/ ingr = complementos\/ingredientes activos \u00b7 accion = beneficio\/para qu\u00e9 sirve\n  \/\/ (etiquetas estimadas por nombre de producto \u2014 revisar contra la ficha\n  \/\/ real de cada uno antes de publicar, sobre todo Doltendix\/Metacontrol\/BodyBalance)\n  function mk(name, inStock, img, opts){\n    opts = opts || {};\n    return {\n      name: name, inStock: inStock, img: img,\n      price: opts.price || '$ ---',\n      productId: opts.productId || null,\n      landingUrl: opts.landingUrl || '#',\n      ingr: opts.ingr || [],\n      accion: opts.accion || [],\n      \/\/ external: true => el CTA es un link simple (target=_blank) a landingUrl\n      \/\/ en vez del flujo de agregar-al-carrito de WooCommerce con qty-selector.\n      \/\/ Se usa para productos que todav\u00eda no tienen ficha propia en la tienda\n      \/\/ y se venden desde una p\u00e1gina\/categor\u00eda com\u00fan (ej. electrolitos).\n      external: opts.external || false,\n      \/\/ imgScale: % opcional para agrandar la foto dentro del cuadrado de la\n      \/\/ card (\u00fatil cuando la foto en s\u00ed trae mucho margen\/transparencia\n      \/\/ alrededor del producto, como la de Energy). Sin esto, la foto usa el\n      \/\/ tama\u00f1o default (94%\/96% del cuadrado, ver CSS .ot-cardimg img).\n      imgScale: opts.imgScale || null,\n      \/\/ fit: 'cover' para fotos con fondo\/escena propia (llenan el cuadrado); default 'contain'.\n      fit: opts.fit || null,\n      accent: null, accentDeep: null\n    };\n  }\n\n  var SITE = 'https:\/\/order-science.com\/';\n  var UP = 'https:\/\/order-science.com\/wp-content\/uploads\/';\n\n  var DATA = {\n    salud: {\n      title: 'HEALTH', tag: 'Daily balance for body and mind', hue: 150,\n      accent: '#1ea4e4', accentDeep: '#0d7ab8',\n      icon: '<path d=\"M11 20A7 7 0 0 1 4 13c0-4 3-6 3-10 3 1 6 4 6 9a5 5 0 0 0 5 5 7 7 0 0 1-7 7z\"\/>',\n      items: [\n        mk('Omega 3 Extra Pure', true, 'omega3extra.jpg', {\n          price: '$ 60.000', productId: '205', landingUrl: SITE + 'omega3-en\/',\n          ingr: ['Omega 3'], accion: ['Cardiovascular']\n        }),\n        mk('Doltendix', true, 'doltendix.jpg', {\n          price: '$ 75.000', productId: '400', landingUrl: SITE + 'doltendix\/',\n          ingr: [], accion: ['Joints']\n        }),\n        mk('Zinc Bisglycinate', false, UP + '2026\/10\/zinc-xr-bisglicinato.png', { landingUrl: SITE + 'zinc-bisglicinato-en\/', ingr: ['Zinc'], accion: ['Immunity'] }),\n        mk('Turmeric C3 Complex', false, UP + '2026\/10\/curcuma-complex.png', { landingUrl: SITE + 'curcuma-c3-en', ingr: ['Turmeric'], accion: ['Anti-inflammatory'] }),\n        mk('Magnesium Liposomal', false, UP + '2026\/10\/magnesio-liposomal.png', { landingUrl: SITE + 'magnesio-liposomal-en\/', ingr: ['Magnesium'], accion: ['Sleep and Relax'] }),\n        mk('Magnesium + Collagen Liposomal', false, UP + '2026\/10\/magnesio-colageno-liposomal.png', { landingUrl: SITE + 'magnesio-colageno-liposomal-en\/', ingr: ['Magnesium', 'Collagen'], accion: ['Joints', 'Sleep and Relax'] }),\n        mk('Omega 3 Liposomal', false, UP + '2026\/10\/omega-3-liposomal.png', { landingUrl: SITE + 'omega-3-liposomal-en', ingr: ['Omega 3'], accion: ['Cardiovascular'] }),\n        mk('NAD+ + Resveratrol Liposomal', false, UP + '2026\/10\/nad-resveratrol-liposomal.png', { landingUrl: SITE + 'nad-resveratrol-en\/', ingr: ['Resveratrol'], accion: ['Antioxidant', 'Energy'] }),\n        mk('Resveratrol Liposomal', false, UP + '2026\/10\/resveratrol-liposomal.png', { landingUrl: SITE + 'resveratrol-liposomal-en\/', ingr: ['Resveratrol'], accion: ['Antioxidant'] }),\n        mk('Vitamin B12 Liposomal', false, UP + '2026\/10\/vitamina-b12.png', { landingUrl: SITE + 'vitamina-b12-liposomal-en\/', ingr: ['Vitamin B12'], accion: ['Energy'] }),\n        mk('B-Complex Liposomal', false, UP + '2026\/10\/Frasco-azul-de-Complejo-B-Liposomal.png', { landingUrl: SITE + 'b-complex-liposomal-en', ingr: ['Vitamin B12'], accion: ['Energy'] }),\n        mk('Vitamin D3 Liposomal', false, UP + '2026\/10\/vitamina-d3.png', { landingUrl: SITE + 'vitamina-d3-liposomal-en\/', ingr: ['Vitamin D3'], accion: ['Immunity'] }),\n        mk('Vitamin D3 + K2 Liposomal', false, UP + '2026\/10\/vitamina-d3k2.png', { landingUrl: SITE + 'vitamina-k2-d3-liposomal-en\/', ingr: ['Vitamin D3'], accion: ['Immunity'] }),\n        mk('Relax \u00b7 Ashwagandha Spray', false, UP + '2026\/10\/relax-splash-tienda.webp', { landingUrl: SITE + 'relax-en', ingr: ['Ashwagandha'], accion: ['Sleep and Relax'] }),\n        mk('Fortiferrum', false, UP + '2026\/06\/fortiferrum-removebg-preview.png', { landingUrl: SITE + 'fortiferrum-en', ingr: ['Iron'], accion: ['Energy'] }),\n        mk('Metacontrol Bustine', true, 'metacontrol.jpg', {\n          price: '$ 120.000', productId: '757', landingUrl: SITE + 'meta-control-en\/',\n          ingr: [], accion: ['Weight control'],\n          imgScale: 76\n        }),\n      ]\n    },\n    beauty: {\n      title: 'BEAUTY', tag: 'Beauty that starts from within', hue: 345,\n      accent: '#e0507a', accentDeep: '#b8305a',\n      icon: '<path d=\"M12 3v4M12 17v4M3 12h4M17 12h4M6 6l2.5 2.5M15.5 15.5 18 18M18 6l-2.5 2.5M8.5 15.5 6 18\"\/>',\n      items: [\n        mk('Astaxanthin XR', false, UP + '2026\/10\/astaxantina.png', { landingUrl: SITE + 'astaxantina-en\/', ingr: ['Astaxanthin'], accion: ['Skin and Beauty', 'Antioxidant'] }),\n        mk('Creatosomal CoQ10 Liposomal \u2014 Nanomicelles', false, UP + '2026\/10\/q10.png', { landingUrl: SITE + 'creatosomal-coq10-liposomal-en\/', ingr: ['CoQ10', 'Creatine'], accion: ['Skin and Beauty', 'Energy'] }),\n        mk('Beauty Lipolush Liposomal', false, UP + '2026\/10\/lipolush.png', { landingUrl: SITE + 'lipolush-en', ingr: [], accion: ['Skin and Beauty'] }),\n        mk('Verisol + Creatosomal Q10 \u2014 Nanomicelles', false, UP + '2026\/10\/verisol.png', { landingUrl: SITE + 'verisol-creatosomal-q10-en\/', ingr: ['Collagen', 'CoQ10'], accion: ['Skin and Beauty'] }),\n      ]\n    },\n    performance: {\n      title: 'PERFORMANCE', tag: 'Performance, strength and recovery', hue: 55,\n      accent: '#e8991f', accentDeep: '#b9760f',\n      icon: '<path d=\"M13 2 4 14h6l-1 8 9-12h-6l1-8z\"\/>',\n      items: [\n        mk('Creatine Liposomal Microencapsulated', false, UP + '2026\/10\/creatina-liposomal.png', { landingUrl: SITE + 'creatina-liposomal-en\/', ingr: ['Creatine'], accion: ['Performance'] }),\n        mk('Micronized Creatine Monohydrate', false, UP + '2026\/10\/creatina-clonapure.png', { landingUrl: SITE + 'clonapure-en', ingr: ['Creatine'], accion: ['Performance'] }),\n        mk('BodyBalance', false, UP + '2026\/10\/bodybalance.png', { landingUrl: SITE + 'bodybalance-en\/', ingr: [], accion: ['Recovery'] }),\n        mk('Energy \u00b7 Caffeine Capsules \u2014 Higher Absorption', true, UP + '2026\/10\/energy.png', {\n          price: '$ 15.000', productId: '778', landingUrl: SITE + 'energy-en\/',\n          ingr: ['Caffeine'], accion: ['Energy']\n        }),\n        mk('Force \u00b7 Pre-Workout', true, UP + '2026\/10\/force.png', {\n          price: '$ 21.000', productId: '783', landingUrl: SITE + 'force-pre-workout-en\/',\n          ingr: ['Caffeine'], accion: ['Performance', 'Energy']\n        }),\n      ]\n    },\n    electrolitos: {\n      title: 'ELECTROLYTES', tag: 'Hydration and energy at every moment', hue: 230,\n      accent: '#17b8a6', accentDeep: '#0f8f80',\n      icon: '<path d=\"M12 2s7 8 7 13a7 7 0 0 1-14 0c0-5 7-13 7-13z\"\/>',\n      items: [\n        mk('Electrolytes Recovery', true, 'recovery.jpg', {\n          price: '$ 13.000', productId: '516', landingUrl: SITE + 'electrolitos-en\/',\n          ingr: ['Electrolytes'], accion: ['Recovery', 'Hydration']\n        }),\n        mk('Electrolytes Active', true, 'active.jpg', {\n          price: '$ 19.000', productId: '517', landingUrl: SITE + 'electrolitos-en\/',\n          ingr: ['Electrolytes'], accion: ['Hydration']\n        }),\n        mk('Electrolytes Plus', true, 'plus.jpg', {\n          price: '$ 25.000', productId: '515', landingUrl: SITE + 'electrolitos-en\/',\n          ingr: ['Electrolytes'], accion: ['Hydration']\n        }),\n        mk('Electrolytes Boost + Caffeine', true, 'boost.jpg', {\n          price: '$ 21.000', productId: '518', landingUrl: SITE + 'electrolitos-en\/',\n          ingr: ['Electrolytes', 'Caffeine'], accion: ['Hydration', 'Energy']\n        }),\n      ]\n    }\n  };\n\n  \/\/ Cada producto hereda el color de su categoria (barra superior de la card).\n  Object.keys(DATA).forEach(function(key){\n    DATA[key].items.forEach(function(p){ p.accent = DATA[key].accent; p.accentDeep = DATA[key].accentDeep; });\n  });\n\n  \/\/ \"Disponibles\": se arma solo con TODO lo que tenga inStock:true (mismos objetos\n  \/\/ que ya estan en cada categoria). Cuando un producto pase a stock, alcanza con\n  \/\/ cambiar su inStock\/price\/productId y aparece aca automaticamente.\n  var DISPONIBLES = {\n    title: 'AVAILABLE', tag: 'What you can buy right now', hue: 265,\n    accent: '#7c5cff', accentDeep: '#5a3fd6',\n    icon: '<path d=\"M20 7 9 18l-5-5\"\/>',\n    items: []\n  };\n  ['salud', 'beauty', 'performance', 'electrolitos'].forEach(function(key){\n    DATA[key].items.forEach(function(p){ if (p.inStock) DISPONIBLES.items.push(p); });\n  });\n\n  var INGR_TAGS = ['Omega 3', 'Magnesium', 'Collagen', 'Vitamin D3', 'Vitamin B12', 'Zinc', 'Iron', 'Turmeric', 'Resveratrol', 'Ashwagandha', 'Astaxanthin', 'CoQ10', 'Creatine', 'Caffeine', 'Electrolytes'];\n  var ACCION_TAGS = ['Energy', 'Recovery', 'Performance', 'Hydration', 'Sleep and Relax', 'Antioxidant', 'Immunity', 'Cardiovascular', 'Joints', 'Anti-inflammatory', 'Skin and Beauty', 'Weight control'];\n  var activeTags = [];\n\n  var TAG_COUNTS = {};\n  var TOTAL_PRODUCTS = 0;\n  Object.keys(DATA).forEach(function(key){\n    DATA[key].items.forEach(function(p){\n      TOTAL_PRODUCTS++;\n      (p.ingr || []).concat(p.accion || []).forEach(function(t){ TAG_COUNTS[t] = (TAG_COUNTS[t] || 0) + 1; });\n    });\n  });\n\n  \/\/ ======================================================================\n  \/\/ RENDER\n  \/\/ ======================================================================\n  function esc(s){ var d=document.createElement('div'); d.textContent=s; return d.innerHTML; }\n\n  function hexToRgb(hex){\n    var m = \/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$\/i.exec(hex);\n    return m ? (parseInt(m[1],16) + ',' + parseInt(m[2],16) + ',' + parseInt(m[3],16)) : '30,164,228';\n  }\n\n  function renderBanner(el, section){\n    el.style.setProperty('--accent', section.accent);\n    el.style.setProperty('--accent-deep', section.accentDeep);\n    el.style.setProperty('--accent-soft', 'rgba(' + hexToRgb(section.accent) + ',.12)');\n    el.innerHTML =\n      '<div class=\"ot-banner\">' +\n        '<div class=\"ot-banner-icon\">' +\n          '<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' + section.icon + '<\/svg>' +\n        '<\/div>' +\n        '<div>' +\n          '<div class=\"ot-banner-title-row\">' +\n            '<span class=\"ot-banner-title\">' + section.title + '<\/span>' +\n            '<span class=\"ot-banner-count\">' + section.items.length + ' product' + (section.items.length === 1 ? '' : 's') + '<\/span>' +\n          '<\/div>' +\n          '<div class=\"ot-banner-tag\">' + section.tag + '<\/div>' +\n        '<\/div>' +\n      '<\/div>';\n  }\n\n  \/\/ Contador global de tarjetas renderizadas \u2014 usado para generar IDs de DOM\n  \/\/ \u00fanicos por tarjeta. Algunos productos (los que est\u00e1n en \"Disponibles\")\n  \/\/ se renderizan DOS VECES en la p\u00e1gina: una en Disponibles y otra en su\n  \/\/ secci\u00f3n de categor\u00eda. Antes el id se armaba solo con el productId\n  \/\/ ('ot-p-' + productId), as\u00ed que las dos copias del mismo producto\n  \/\/ terminaban con el MISMO id, y document.getElementById() siempre\n  \/\/ devolv\u00eda la primera (la de Disponibles) \u2014 el selector de cantidad de\n  \/\/ la segunda copia terminaba actualizando el link de la OTRA tarjeta,\n  \/\/ y su propio bot\u00f3n \"Comprar\" quedaba pegado en quantity=1 siempre.\n  var CARD_SEQ = 0;\n\n  function renderCard(p, hue, idx){\n    \/\/ p.img puede ser un nombre de archivo (se resuelve contra IMG_BASE, caso\n    \/\/ general) o una URL absoluta completa (ej. una foto subida aparte a la\n    \/\/ Media Library de WP, como Energy\/Force) \u2014 en ese caso se usa tal cual.\n    var imgSrc = p.img ? (\/^https?:\\\/\\\/\/i.test(p.img) ? p.img : IMG_BASE + p.img) : '';\n    var imgCls = p.fit === 'cover' ? ' class=\"is-cover\"' : '';\n    var imgStyle = p.imgScale ? ' style=\"max-width:' + p.imgScale + '%;max-height:' + p.imgScale + '%\"' : '';\n    var imgTag = imgSrc\n      ? '<img' + imgCls + imgStyle + ' src=\"' + esc(imgSrc) + '\" alt=\"' + esc(p.name) + '\" loading=\"lazy\">'\n      : '<div class=\"ot-noimg\"><svg width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#5b6a82\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 2h6v3.5l3 5.5v7a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3v-7l3-5.5V2z\"\/><line x1=\"9\" y1=\"11\" x2=\"15\" y2=\"11\"\/><\/svg><span>PHOTO PENDING<\/span><\/div>';\n    \/\/ Pedido del cliente (v\u00eda Nessie): la foto tambi\u00e9n linkea a la landing del\n    \/\/ producto, igual que \"Ver producto\" \u2014 solo cuando hay landingUrl real\n    \/\/ (no el placeholder '#' de los productos todav\u00eda sin ficha propia).\n    var img = (p.landingUrl !== '#')\n      ? '<a href=\"' + esc(p.landingUrl) + '\" class=\"ot-imglink\" target=\"_blank\" rel=\"noopener\" aria-label=\"' + esc(p.name) + '\">' + imgTag + '<\/a>'\n      : imgTag;\n\n    var badge = !p.inStock ? '<span class=\"ot-badge\">COMING SOON<\/span>' : '';\n\n    var buy;\n    var isExternalBuy = p.inStock ? p.external : false;\n    if (isExternalBuy) {\n      \/\/ producto sin ficha propia en WooCommerce todav\u00eda: el bot\u00f3n de compra\n      \/\/ linkea directo a la p\u00e1gina\/categor\u00eda donde s\u00ed se puede comprar (con\n      \/\/ la cantidad elegida como par\u00e1metro), m\u00e1s un link secundario \"Ver\n      \/\/ producto\" a esa misma p\u00e1gina.\n      var extPrefix = 'ot-ext-' + (++CARD_SEQ);\n      buy =\n        '<div class=\"ot-buyblock\">' +\n          '<div class=\"qty-selector\" data-for=\"' + extPrefix + '\">' +\n            '<button type=\"button\" class=\"qty-btn qty-minus\" aria-label=\"Decrease\">\u2212<\/button>' +\n            '<input type=\"number\" class=\"qty-input\" value=\"1\" min=\"1\" aria-label=\"Quantity\">' +\n            '<button type=\"button\" class=\"qty-btn qty-plus\" aria-label=\"Increase\">+<\/button>' +\n          '<\/div>' +\n          '<a href=\"' + esc(p.landingUrl) + '\"' +\n             ' class=\"ot-buy-link\" id=\"' + extPrefix + '\"' +\n             ' data-external=\"1\" data-base-url=\"' + esc(p.landingUrl) + '\"' +\n             ' target=\"_blank\" rel=\"noopener\">' +\n            '<span class=\"cta-label\">Buy<\/span>' +\n          '<\/a>' +\n          '<a href=\"' + esc(p.landingUrl) + '\" class=\"ot-viewbtn\" target=\"_blank\" rel=\"noopener\">View product<\/a>' +\n        '<\/div>';\n    } else if (p.inStock) {\n      var prefix = 'ot-p-' + (++CARD_SEQ);\n      buy =\n        '<div class=\"ot-buyblock\">' +\n          '<div class=\"qty-selector\" data-for=\"' + prefix + '\">' +\n            '<button type=\"button\" class=\"qty-btn qty-minus\" aria-label=\"Decrease\">\u2212<\/button>' +\n            '<input type=\"number\" class=\"qty-input\" value=\"1\" min=\"1\" aria-label=\"Quantity\">' +\n            '<button type=\"button\" class=\"qty-btn qty-plus\" aria-label=\"Increase\">+<\/button>' +\n          '<\/div>' +\n          '<a href=\"' + esc(p.landingUrl) + '?add-to-cart=' + esc(p.productId || '') + '\"' +\n             ' class=\"ot-buy-link\" id=\"' + prefix + '\"' +\n             ' data-base-url=\"' + esc(p.landingUrl) + '?add-to-cart=' + esc(p.productId || '') + '\"' +\n             ' data-product-id=\"' + esc(p.productId || '') + '\"' +\n             ' target=\"_blank\" rel=\"noopener\">' +\n            '<span class=\"cta-label\">Buy<\/span>' +\n            '<span class=\"cta-price\">' + esc(p.price) + '<\/span>' +\n          '<\/a>' +\n          '<a href=\"' + esc(p.landingUrl) + '\" class=\"ot-viewbtn\" target=\"_blank\" rel=\"noopener\">View product<\/a>' +\n        '<\/div>';\n    } else {\n      \/\/ mismo dise\u00f1o de bot\u00f3n que el de compra, pero deshabilitado y sin\n      \/\/ texto de carrito \u2014 solo para que todas las cards mantengan el\n      \/\/ mismo bloque visual abajo.\n      buy =\n        '<div class=\"ot-buyblock\">' +\n          '<span class=\"ot-buy-link is-soon\" aria-disabled=\"true\">' +\n            '<span class=\"cta-label\">Coming soon<\/span>' +\n            '<span class=\"cta-price\">We will notify you when it is available<\/span>' +\n          '<\/span>' +\n          '<a href=\"' + esc(p.landingUrl) + '\" class=\"ot-viewbtn\" target=\"_blank\" rel=\"noopener\">View product<\/a>' +\n        '<\/div>';\n    }\n\n    var tagsAll = (p.ingr || []).concat(p.accion || []);\n    var delay = Math.min(idx || 0, 9) * 55;\n\n    return (\n      '<div class=\"ot-card ot-reveal' + (p.inStock ? ' ot-card--featured' : ' ot-card--soon') + '\" style=\"transition-delay:' + delay + 'ms;--accent:' + esc(p.accent || '#1ea4e4') + ';--accent-deep:' + esc(p.accentDeep || '#0d7ab8') + '\" data-tags=\"' + esc(tagsAll.join(',')) + '\">' +\n        '<div class=\"ot-cardimg\">' + img + badge + '<\/div>' +\n        '<div class=\"ot-cardbody\">' +\n          '<div class=\"ot-pname\">' + esc(p.name) + '<\/div>' +\n          buy +\n        '<\/div>' +\n      '<\/div>'\n    );\n  }\n\n  Object.keys(DATA).forEach(function(key){\n    var section = DATA[key];\n    renderBanner(document.getElementById('ot-banner-' + key), section);\n    var grid = document.getElementById('ot-grid-' + key);\n    grid.innerHTML = section.items.map(function(p, idx){ return renderCard(p, section.hue, idx); }).join('');\n    \/\/ si con 4 columnas quedaria una sola card suelta en la ultima fila, usar 3 columnas\n    if (section.items.length % 4 === 1) { grid.classList.add('ot-grid--3'); }\n  });\n\n  (function renderDisponibles(){\n    var bannerEl = document.getElementById('ot-banner-disponibles');\n    var gridEl = document.getElementById('ot-grid-disponibles');\n    if (!bannerEl || !gridEl) return;\n    renderBanner(bannerEl, DISPONIBLES);\n    gridEl.innerHTML = DISPONIBLES.items.map(function(p, idx){ return renderCard(p, DISPONIBLES.hue, idx); }).join('');\n  })();\n\n  \/\/ ======================================================================\n  \/\/ FILTRO \u2014 por complemento (ingrediente activo) y por beneficio\/acci\u00f3n,\n  \/\/ en vez de por categor\u00eda (las l\u00edneas ya agrupan eso m\u00e1s arriba).\n  \/\/ Click en un chip = toggle. Varios chips activos = OR (muestra el\n  \/\/ producto si matchea CUALQUIERA de los chips activos).\n  \/\/ ======================================================================\n  var filterOpen = false;\n\n  function setFilterOpen(open){\n    filterOpen = open;\n    var bar = document.getElementById('ot-filterbar');\n    if (!bar) return;\n    bar.classList.toggle('is-open', open);\n    var toggleBtn = document.getElementById('ot-filter-toggle');\n    if (toggleBtn) {\n      toggleBtn.setAttribute('aria-expanded', open ? 'true' : 'false');\n      toggleBtn.querySelector('.ot-filter-toggle-label').textContent = open ? 'Hide' : 'Filter';\n    }\n  }\n\n  function resetFilters(){\n    activeTags = [];\n    document.querySelectorAll('#order-tienda .ot-chip.active').forEach(function(b){ b.classList.remove('active'); });\n    applyFilter();\n  }\n\n  function renderActiveSummary(){\n    var s = document.getElementById('ot-filter-summary');\n    if (!s) return;\n    if (!activeTags.length) { s.innerHTML = ''; s.hidden = true; return; }\n    s.hidden = false;\n    s.innerHTML = activeTags.map(function(t){ return '<span class=\"ot-chip-mini\">' + esc(t) + '<\/span>'; }).join('');\n  }\n\n  function applyFilter(){\n    var totalVisible = 0;\n    document.querySelectorAll('#order-tienda .ot-card').forEach(function(card){\n      var tags = (card.getAttribute('data-tags') || '').split(',').filter(Boolean);\n      var show = activeTags.length === 0 || tags.some(function(t){ return activeTags.indexOf(t) !== -1; });\n      card.style.display = show ? '' : 'none';\n      if (show) totalVisible++;\n    });\n    document.querySelectorAll('#order-tienda .ot-section').forEach(function(sec){\n      var cards = sec.querySelectorAll('.ot-card');\n      var visible = 0;\n      cards.forEach(function(c){ if (c.style.display !== 'none') visible++; });\n      sec.style.display = (cards.length === 0 || visible > 0) ? '' : 'none';\n    });\n    var emptyEl = document.getElementById('ot-empty-state');\n    if (emptyEl) emptyEl.style.display = totalVisible === 0 ? 'flex' : 'none';\n\n    var countEl = document.getElementById('ot-result-count');\n    if (countEl) countEl.textContent = activeTags.length ? ('Showing ' + totalVisible + ' of ' + TOTAL_PRODUCTS) : (TOTAL_PRODUCTS + ' products');\n    var resetBtn = document.getElementById('ot-reset-filters');\n    if (resetBtn) resetBtn.hidden = activeTags.length === 0;\n    renderActiveSummary();\n  }\n\n  function toggleTag(tag, btn){\n    var idx = activeTags.indexOf(tag);\n    if (idx === -1) { activeTags.push(tag); btn.classList.add('active'); }\n    else { activeTags.splice(idx, 1); btn.classList.remove('active'); }\n    applyFilter();\n  }\n\n  function renderFilterBar(){\n    var el = document.getElementById('ot-filterbar');\n    if (!el) return;\n    function chipsHtml(tags){\n      return tags.map(function(t){\n        return '<button type=\"button\" class=\"ot-chip\" data-tag=\"' + esc(t) + '\">' + esc(t) +\n          '<span class=\"ot-chip-count\">' + (TAG_COUNTS[t] || 0) + '<\/span><\/button>';\n      }).join('');\n    }\n    el.innerHTML =\n      '<div class=\"ot-filter-head\">' +\n        '<div class=\"ot-filter-head-left\" id=\"ot-filter-head-left\">' +\n          '<span class=\"ot-filter-icon\"><svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 5h16M7 12h10M11 19h2\"\/><\/svg><\/span>' +\n          '<span class=\"ot-filter-title\">Filter by what you are looking for<\/span>' +\n          '<div class=\"ot-filter-summary\" id=\"ot-filter-summary\" hidden><\/div>' +\n        '<\/div>' +\n        '<div class=\"ot-filter-head-right\">' +\n          '<span id=\"ot-result-count\" class=\"ot-result-count\"><\/span>' +\n          '<button type=\"button\" class=\"ot-chip-reset\" id=\"ot-reset-filters\" hidden>Clear \u00d7<\/button>' +\n          '<button type=\"button\" class=\"ot-filter-toggle\" id=\"ot-filter-toggle\" aria-expanded=\"false\">' +\n            '<span class=\"ot-filter-toggle-label\">Filter<\/span>' +\n            '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>' +\n          '<\/button>' +\n        '<\/div>' +\n      '<\/div>' +\n      '<div class=\"ot-filter-body\" id=\"ot-filter-body\"><div>' +\n        '<div class=\"ot-filter-row\">' +\n          '<span class=\"ot-filter-label\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 2h6v3.5l3 5.5v7a3 3 0 0 1-3 3H9a3 3 0 0 1-3-3v-7l3-5.5V2z\"\/><\/svg>Ingredients<\/span>' +\n          '<div class=\"ot-chip-group\">' + chipsHtml(INGR_TAGS) + '<\/div>' +\n        '<\/div>' +\n        '<div class=\"ot-filter-row\">' +\n          '<span class=\"ot-filter-label\"><svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 1 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z\"\/><\/svg>Benefits<\/span>' +\n          '<div class=\"ot-chip-group\">' + chipsHtml(ACCION_TAGS) + '<\/div>' +\n        '<\/div>' +\n      '<\/div><\/div>';\n\n    el.querySelectorAll('.ot-chip[data-tag]').forEach(function(btn){\n      btn.addEventListener('click', function(){ toggleTag(btn.getAttribute('data-tag'), btn); });\n    });\n    var resetBtn = document.getElementById('ot-reset-filters');\n    if (resetBtn) { resetBtn.addEventListener('click', function(e){ e.stopPropagation(); resetFilters(); }); }\n    var toggleBtn = document.getElementById('ot-filter-toggle');\n    if (toggleBtn) { toggleBtn.addEventListener('click', function(e){ e.stopPropagation(); setFilterOpen(!filterOpen); }); }\n    var headLeft = document.getElementById('ot-filter-head-left');\n    if (headLeft) { headLeft.addEventListener('click', function(){ setFilterOpen(!filterOpen); }); }\n\n    applyFilter(); \/\/ inicializa el contador de resultados\n  }\n\n  renderFilterBar();\n  var emptyResetBtn = document.getElementById('ot-empty-reset');\n  if (emptyResetBtn) { emptyResetBtn.addEventListener('click', resetFilters); }\n\n  \/\/ ======================================================================\n  \/\/ STATS DEL HERO \u2014 n\u00fameros reales del cat\u00e1logo (no hardcodeados), con\n  \/\/ animaci\u00f3n de conteo al cargar la p\u00e1gina.\n  \/\/ ======================================================================\n  function renderStats(){\n    var el = document.getElementById('ot-stats');\n    if (!el) return;\n    var lineCount = Object.keys(DATA).length;\n    var stats = [\n      { n: TOTAL_PRODUCTS, label: 'Products in catalog' },\n      { n: lineCount, label: 'Wellness lines' },\n      { n: INGR_TAGS.length, label: 'Active ingredients' },\n      { n: ACCION_TAGS.length, label: 'Benefits covered' }\n    ];\n    el.innerHTML = stats.map(function(s){\n      return '<div class=\"ot-stat\"><div class=\"ot-stat-num\" data-count-to=\"' + s.n + '\">0<\/div><div class=\"ot-stat-label\">' + esc(s.label) + '<\/div><\/div>';\n    }).join('');\n  }\n\n  function countUpStats(){\n    var nums = document.querySelectorAll('#order-tienda .ot-stat-num[data-count-to]');\n    nums.forEach(function(el){\n      var target = parseInt(el.getAttribute('data-count-to'), 10) || 0;\n      var start = null;\n      var duration = 900;\n      function step(ts){\n        if (!start) start = ts;\n        var progress = Math.min((ts - start) \/ duration, 1);\n        var eased = 1 - Math.pow(1 - progress, 3);\n        el.textContent = Math.round(eased * target);\n        if (progress < 1) requestAnimationFrame(step);\n      }\n      requestAnimationFrame(step);\n    });\n  }\n\n  renderStats();\n  var prefersReducedMotion = false;\n  if (window.matchMedia) {\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) { prefersReducedMotion = true; }\n  }\n  if (prefersReducedMotion) {\n    document.querySelectorAll('#order-tienda .ot-stat-num[data-count-to]').forEach(function(el){\n      el.textContent = el.getAttribute('data-count-to');\n    });\n  } else {\n    setTimeout(countUpStats, 250);\n  }\n\n  \/\/ ======================================================================\n  \/\/ SCROLL REVEAL \u2014 fade + translateY al entrar en viewport (tarjetas,\n  \/\/ banners de secci\u00f3n y trust strip). Se degrada con gracia sin IO.\n  \/\/ ======================================================================\n  if ('IntersectionObserver' in window) {\n    var revealObserver = new IntersectionObserver(function(entries){\n      entries.forEach(function(entry){\n        if (entry.isIntersecting) {\n          entry.target.classList.add('is-visible');\n          revealObserver.unobserve(entry.target);\n        }\n      });\n    }, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' });\n    document.querySelectorAll('#order-tienda .ot-reveal').forEach(function(el){ revealObserver.observe(el); });\n  } else {\n    document.querySelectorAll('#order-tienda .ot-reveal').forEach(function(el){ el.classList.add('is-visible'); });\n  }\n\n  \/\/ ======================================================================\n  \/\/ QUANTITY SELECTOR \u2014 sincroniza -\/+\/input con el link de compra\n  \/\/ ======================================================================\n  document.querySelectorAll('#order-tienda .qty-selector').forEach(function(sel){\n    var input = sel.querySelector('.qty-input');\n    var minus = sel.querySelector('.qty-minus');\n    var plus = sel.querySelector('.qty-plus');\n    var link = document.getElementById(sel.getAttribute('data-for'));\n\n    \/\/ AMP = s\u00edmbolo ampersand armado en runtime con fromCharCode, nunca\n    \/\/ como car\u00e1cter literal en el c\u00f3digo. Motivo: al guardar el bloque de\n    \/\/ Custom HTML, WordPress convierte cualquier ampersand suelto que\n    \/\/ encuentre (incluso dentro de un tag script) en su entidad HTML de 7\n    \/\/ caracteres. Fuera de un tag script el navegador decodifica esa\n    \/\/ entidad de nuevo al parsear el HTML \u2014 pero el contenido de un script\n    \/\/ es texto crudo, no se re-decodifica, as\u00ed que la entidad queda como\n    \/\/ texto literal dentro del string y rompe cualquier c\u00f3digo que\n    \/\/ dependiera de que fuera un solo ampersand (como armar un query\n    \/\/ string a mano ac\u00e1 abajo). Por eso ning\u00fan ampersand literal debe\n    \/\/ aparecer nunca dentro de las etiquetas script de este archivo.\n    var AMP = String.fromCharCode(38);\n\n    function sync(){\n      var q = parseInt(input.value, 10);\n      if (!q || q < 1) q = 1;\n      input.value = q;\n      if (link) {\n        if (link.dataset.baseUrl) {\n          \/\/ el link \"interno\" (AJAX) ya trae ?add-to-cart=ID en la base, as\u00ed que\n          \/\/ la cantidad se suma con AMP; el link \"externo\" (sin producto propio\n          \/\/ en WooCommerce) no trae query string previo, as\u00ed que arranca con \"?\".\n          var sep = link.dataset.baseUrl.indexOf('?') === -1 ? '?' : AMP;\n          link.href = link.dataset.baseUrl + sep + 'quantity=' + q;\n        }\n      }\n    }\n    if (minus) { minus.addEventListener('click', function(){ input.value = Math.max(1, (parseInt(input.value,10)||1) - 1); sync(); }); }\n    if (plus) { plus.addEventListener('click', function(){ input.value = (parseInt(input.value,10)||1) + 1; sync(); }); }\n    if (input) { input.addEventListener('input', sync); }\n    sync();\n  });\n\n  \/\/ ======================================================================\n  \/\/ AGREGAR AL CARRITO \u2014 AJAX de WooCommerce (patr\u00f3n validado en\n  \/\/ OMEGA3.HTML \/ doltendix.html, generalizado para N botones ac\u00e1)\n  \/\/ ======================================================================\n  function addToCart(link){\n    if (link.classList.contains('is-loading')) return;\n\n    var productId = link.dataset.productId;\n    var quantity = '1';\n    try {\n      quantity = new URL(link.href, window.location.href).searchParams.get('quantity') || '1';\n    } catch (err) {}\n\n    var labelEl = link.querySelector('.cta-label');\n    var originalLabel = labelEl ? labelEl.textContent : '';\n\n    link.style.minWidth = link.offsetWidth + 'px';\n    link.classList.add('is-loading');\n    if (labelEl) labelEl.textContent = 'Adding\u2026';\n\n    var body = new URLSearchParams();\n    body.set('product_id', productId);\n    body.set('quantity', quantity);\n\n    fetch('\/?wc-ajax=add_to_cart', { \/\/ URL relativa: evita CORS por mismatch www\/no-www o http\/https\n      method: 'POST',\n      credentials: 'same-origin',\n      headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\n      body: body.toString()\n    })\n      .then(function(res){ return res.text().then(function(text){ return { status: res.status, text: text }; }); })\n      .then(function(r){\n        var data;\n        try { data = JSON.parse(r.text); }\n        catch (parseErr) {\n          console.error('add_to_cart: respuesta no es JSON (status ' + r.status + ')', r.text.slice(0, 600));\n          throw new Error('invalid_json');\n        }\n        if (!data || data.error) {\n          console.error('add_to_cart: WooCommerce devolvi\u00f3 error (status ' + r.status + ')', data);\n          throw new Error('add_to_cart_error');\n        }\n\n        if (data.fragments) {\n          Object.keys(data.fragments).forEach(function(selector){\n            document.querySelectorAll(selector).forEach(function(el){ el.outerHTML = data.fragments[selector]; });\n          });\n        }\n\n        try {\n          if (window.jQuery) {\n            var $link = window.jQuery(link);\n            window.jQuery(document.body).trigger('added_to_cart', [data.fragments, data.cart_hash, $link]);\n            window.jQuery(document.body).trigger('wc_fragments_refreshed');\n          }\n          document.body.dispatchEvent(new CustomEvent('added_to_cart', { detail: data }));\n        } catch (triggerErr) {\n          console.error('add_to_cart: agreg\u00f3 bien pero un listener de \"added_to_cart\" tir\u00f3 error', triggerErr);\n        }\n\n        link.classList.remove('is-loading');\n        if (labelEl) {\n          labelEl.textContent = 'Added!';\n          setTimeout(function(){\n            labelEl.textContent = originalLabel;\n            link.style.minWidth = '';\n          }, 1600);\n        }\n      })\n      .catch(function(err){\n        console.error('add_to_cart: fallo el agregado por AJAX, redirigiendo al checkout', err);\n        window.location.href = link.href;\n      });\n  }\n\n  document.querySelectorAll('#order-tienda a.ot-buy-link:not([data-external])').forEach(function(link){\n    link.addEventListener('click', function(e){\n      e.preventDefault();\n      addToCart(this);\n    });\n  });\n\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Store \u00b7 Order Science ESEN HIGH-BIOAVAILABILITY SUPPLEMENTS Your wellbeing, in one store Science, technology, innovation and science-backed quality. Advanced formulas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"disabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-552","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/pages\/552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/comments?post=552"}],"version-history":[{"count":4,"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/pages\/552\/revisions"}],"predecessor-version":[{"id":895,"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/pages\/552\/revisions\/895"}],"wp:attachment":[{"href":"https:\/\/order-science.com\/en\/wp-json\/wp\/v2\/media?parent=552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}