:root{–papel:#fdfaf6;–papel-2:#f2ebe2;–tarjeta:#fff;–tinta:#221812;–tinta-2:#7d7066;
–linea:#e6dbcd;–naranja:#f26a1b;–naranja-osc:#c4470a;–hay:#2f7d4f;–poco:#b4530c;
–suave:#fdeee2;–sombra:0 1px 2px rgba(34,24,18,.05),0 6px 18px rgba(34,24,18,.06);
–rotulo:»Helvetica Neue Condensed»,»Arial Narrow»,»Roboto Condensed»,system-ui,sans-serif;
–texto:system-ui,-apple-system,»Segoe UI»,Roboto,Arial,sans-serif}
@media (prefers-color-scheme:dark){:root:not([data-theme=»light»]){
–papel:#17120e;–papel-2:#100c09;–tarjeta:#211a14;–tinta:#f6ece2;–tinta-2:#a6978a;
–linea:#362819;–naranja:#ff8038;–naranja-osc:#ff9457;–hay:#63c088;–poco:#e0a153;
–suave:#2b1a0e;–sombra:0 1px 2px rgba(0,0,0,.45),0 6px 18px rgba(0,0,0,.35)}}
:root[data-theme=»dark»]{
–papel:#17120e;–papel-2:#100c09;–tarjeta:#211a14;–tinta:#f6ece2;–tinta-2:#a6978a;
–linea:#362819;–naranja:#ff8038;–naranja-osc:#ff9457;–hay:#63c088;–poco:#e0a153;
–suave:#2b1a0e;–sombra:0 1px 2px rgba(0,0,0,.45),0 6px 18px rgba(0,0,0,.35)}
*{box-sizing:border-box}
body{margin:0;background:var(–papel-2);color:var(–tinta);font-family:var(–texto);
font-size:15px;line-height:1.5}
img{max-width:100%;display:block}
.marco{max-width:1120px;margin:0 auto;padding:0 14px}
:where(button,input,select):focus-visible{outline:2px solid var(–naranja);outline-offset:2px}
/* ———- Barra de arriba, naranja como la portada ———- */
.cima{position:sticky;top:0;z-index:30;
background:linear-gradient(160deg,var(–naranja),var(–naranja-osc));color:#fff}
.cima-fila{display:flex;align-items:center;gap:12px;padding:11px 0}
.icono{background:none;border:0;padding:0;cursor:pointer;color:#fff;position:relative;
display:grid;place-items:center;width:30px;height:30px;flex:none}
.icono svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.7;
stroke-linecap:round;stroke-linejoin:round;
filter:drop-shadow(1px 0 0 rgba(0,0,0,.7)) drop-shadow(-1px 0 0 rgba(0,0,0,.7))
drop-shadow(0 1px 0 rgba(0,0,0,.7)) drop-shadow(0 -1px 0 rgba(0,0,0,.7))}
.icono:hover{opacity:.78}
.rotulo{font-family:var(–rotulo);font-size:21px;letter-spacing:.06em;text-transform:uppercase;
flex:1;min-width:0;paint-order:stroke fill;-webkit-text-stroke:.04em rgba(0,0,0,.55)}
.cuenta{position:absolute;top:-5px;right:-7px;min-width:17px;height:17px;padding:0 4px;
border-radius:999px;background:#fff;color:var(–naranja-osc);font-size:10.5px;font-weight:700;
display:grid;place-items:center;box-shadow:0 0 0 1px rgba(0,0,0,.5)}
/* ———- La moneda, a la vista ———- */
.moneda{display:inline-flex;align-items:center;gap:4px;flex:none;cursor:pointer;
font:inherit;font-size:13.5px;font-weight:700;letter-spacing:.04em;color:#fff;
background:rgba(20,12,6,.34);border:1px solid rgba(255,255,255,.62);
border-radius:999px;padding:5px 11px}
.moneda:hover{background:rgba(20,12,6,.52)}
.moneda svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.2;
stroke-linecap:round;stroke-linejoin:round;transition:transform .18s ease}
.moneda[aria-expanded=»true»] svg{transform:rotate(180deg)}
.monedas{padding:0 0 12px}
.monedas[hidden]{display:none}
.monedas p{margin:0 0 8px;font-size:12.5px;color:rgba(255,255,255,.9)}
.monedas-fila{display:flex;gap:7px;flex-wrap:wrap}
.monedas-fila button{cursor:pointer;font:inherit;font-size:14px;font-weight:700;
letter-spacing:.04em;color:#fff;background:rgba(20,12,6,.3);
border:1px solid rgba(255,255,255,.5);border-radius:999px;padding:8px 18px}
.monedas-fila button:hover{background:rgba(20,12,6,.5)}
.monedas-fila button[aria-pressed=»true»]{background:#fff;color:var(–naranja-osc);border-color:#fff}
/* ———- Buscar ———- */
.busca{padding:0 0 11px}
.busca[hidden]{display:none}
.busca form{display:flex;align-items:center;gap:10px;
background:rgba(20,12,6,.4);border:1px solid rgba(255,255,255,.6);border-radius:999px;
padding:8px 15px}
.busca svg{width:18px;height:18px;flex:none;fill:none;stroke:#fff;stroke-width:1.9;stroke-linecap:round}
.busca input{flex:1;min-width:0;background:none;border:0;outline:none;color:#fff;
font:inherit;font-size:15px}
.busca input::placeholder{color:rgba(255,255,255,.75)}
/* ———- Categorías ———- */
.tira{background:var(–papel);border-bottom:1px solid var(–linea);
position:sticky;top:52px;z-index:29}
/* Las flechas van EN LA FILA, ocupando su propio sitio, no flotando encima:
así ninguna categoría queda escondida debajo de ellas ni cortada a medias. */
.tira-caja{display:flex;align-items:center;gap:6px}
.tira-fila{flex:1;min-width:0;display:flex;gap:7px;align-items:center;padding:10px 0;
overflow-x:auto;scroll-behavior:smooth;scrollbar-width:none}
.tira-fila::-webkit-scrollbar{display:none}
.correr{flex:none;width:30px;height:30px;border-radius:999px;cursor:pointer;
border:1px solid var(–linea);background:var(–tarjeta);color:var(–tinta-2);
display:grid;place-items:center;padding:0}
.correr:hover{border-color:var(–naranja);color:var(–naranja)}
.correr[hidden]{display:none}
.correr svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2.4;
stroke-linecap:round;stroke-linejoin:round}
.cat{flex:none;padding:7px 14px;border-radius:999px;border:1px solid var(–linea);
background:var(–tarjeta);font:inherit;font-size:13.5px;color:var(–tinta);
white-space:nowrap;cursor:pointer}
.cat:hover{border-color:var(–naranja)}
.cat[aria-pressed=»true»]{background:var(–naranja);border-color:var(–naranja);color:#fff;font-weight:600}
.cat.todas{border-style:dashed;font-weight:600;color:var(–naranja-osc)}
/* ———- El desplegable con todo el árbol ———- */
.arbol{display:none;background:var(–papel);border-bottom:1px solid var(–linea);
padding:4px 0 16px}
.arbol[data-abierto]{display:block}
.rama{border-top:1px solid var(–linea);padding:11px 0 0}
.rama:first-child{border-top:0}
.rama b{font-family:var(–rotulo);font-size:16px;display:block;margin-bottom:7px}
.rama .subs{display:flex;flex-wrap:wrap;gap:6px}
.rama .subs button{padding:5px 11px;border-radius:999px;border:1px solid var(–linea);
background:var(–tarjeta);font:inherit;font-size:13px;color:var(–tinta-2);cursor:pointer}
.rama .subs button:hover{border-color:var(–naranja);color:var(–tinta)}
/* ———- Productos ———- */
.aviso{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin:16px 0 14px;
padding:11px 14px;background:var(–suave);border:1px solid var(–linea);
border-left:3px solid var(–naranja);border-radius:0 10px 10px 0}
.aviso b{font-family:var(–rotulo);font-size:16px}
.aviso span{color:var(–tinta-2);font-size:13px}
.rejilla{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));
padding-bottom:60px}
.ficha{background:var(–tarjeta);border:1px solid var(–linea);border-radius:12px;
overflow:hidden;box-shadow:var(–sombra);display:flex;flex-direction:column}
.ficha[hidden]{display:none}
.foto{aspect-ratio:1;background:#fff;display:grid;place-items:center;padding:8px}
.foto img{width:100%;height:100%;object-fit:contain}
.nombre{margin:10px 11px 0;font-size:13.5px;line-height:1.32;min-height:2.6em}
.fila-precio{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin:6px 11px 0}
.precio{font-family:var(–rotulo);font-size:23px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1}
.precio i{font-style:normal;font-size:12px;color:var(–tinta-2);font-weight:400}
.quedan{font-size:11.5px;font-weight:600;color:var(–hay);white-space:nowrap}
.quedan.poco{color:var(–poco)}
.de{margin:5px 11px 0;font-size:11px;color:var(–tinta-2)}
.anadir{display:flex;gap:7px;margin:11px;margin-top:auto;padding-top:10px}
.paso{flex:1;display:flex;align-items:center;border:1px solid var(–linea);border-radius:8px;overflow:hidden}
.paso button{flex:none;width:30px;height:34px;border:0;background:var(–tarjeta);color:var(–tinta);
font-size:17px;cursor:pointer;line-height:1}
.paso button:hover{background:var(–suave)}
.paso output{flex:1;text-align:center;font-variant-numeric:tabular-nums;font-size:14px;font-weight:600}
.echar{flex:none;padding:0 13px;height:36px;border-radius:8px;border:1px solid var(–naranja);
background:var(–naranja);color:#fff;font:inherit;font-size:13.5px;font-weight:600;cursor:pointer}
.echar:hover{background:var(–naranja-osc);border-color:var(–naranja-osc)}
.vacio{padding:40px 0 60px;text-align:center;color:var(–tinta-2)}
.vacio[hidden]{display:none}
Bodegón
¿En qué moneda quieres ver los precios?
Acondicionador XtraCare Rose Hips-413ml
Sin categorizar
Adobo para Todo 24*14g
Sin categorizar
Aji chombo
Sin categorizar
Ajo en Polvo grande
Sin categorizar

Ajo molido 50×10
Sin categorizar
alitas de pollo 2lb
Sin categorizar

Almejas-.500g
Sin categorizar
Anis
Sin categorizar
Antical Gel Limpiador
Sin categorizar
Arrocero 50x10g
Sin categorizar
Arroz -2L
Sin categorizar
Azucar 1KG importada
Sin categorizar
Bicarbonato 1/2 lb
Sin categorizar

Bistec de Cerdo 1L
Sin categorizar

Bombillo-15w
Sin categorizar
Bonbillo
Sin categorizar

Brocha
Sin categorizar
Café Roche-230g
Sin categorizar

Caja Electrica 2×4
Sin categorizar

Caja Electrica 4×4
Sin categorizar
Caldito de pollo con culantro achote 200x10g
Sin categorizar
Cerveza cristal de lata
Sin categorizar
Cerveza La Fria
Sin categorizar
Cerveza Lander Brau
Sin categorizar
Cerveza Parranda 330ml
Sin categorizar
Cerveza Parranda 500ml
Sin categorizar
Cerveza Parranda-1.5L
Sin categorizar
Cerveza Unlaguer
Sin categorizar
Champu Infantil Queray-750ml
Sin categorizar
Cocina de Induccion-$50
Sin categorizar
Cocina Electrica-1 hornilla
Sin categorizar
Cocina Electrica-2 hornilla
Sin categorizar
Colonia-250ml
Sin categorizar
Comin don don-5g
Sin categorizar
Comino Molido-2oz
Sin categorizar
Consome de pollo 24x15g
Sin categorizar
Conzome sazon costilla de res
Sin categorizar
Corta Uñas
Sin categorizar
Cozome y sazonador Total
Sin categorizar
Crema Corporal-355ml
Sin categorizar

Culantro
Sin categorizar
Derri de Pelo
Sin categorizar
Desatascador Turbo
Sin categorizar
Detergente La salud-2.65L Color
Sin categorizar
Detergente La salud-2.65L Marsella
Sin categorizar
Detergente La salud-2.65L Original
Sin categorizar
Detergente La salud-2L Marsella
Sin categorizar
Detergente La salud-2L Ropa negra
Sin categorizar
Detergente polvo 1kg
Sin categorizar
El parrillero
Sin categorizar
Espaguetis-500g
Sin categorizar
Espuma Afeitar
Sin categorizar

Estropajo de Aluminio
Sin categorizar
Expander plastico 6x120mm
Sin categorizar
Expander plastico 6x80mm
Sin categorizar

Filete Pescado-1L
Sin categorizar
Finas hierbas
Sin categorizar
Fosforera
Sin categorizar
Frijol Negro-1Kg
Sin categorizar
Frijol Negro-1l
Sin categorizar
Galletas Fore Fresa-160g
Sin categorizar
Galletas Saltinas Mantequilla
Sin categorizar
Galletas Saltinas Original
Sin categorizar
Gel de Baño Magali-750ml
Sin categorizar
Gel de Baño Queray-1.25L
Sin categorizar
Gelatina Fresa
Sin categorizar
Gelatina Frutos Rojos
Sin categorizar

Grifo de Jardin
Sin categorizar

Grifo de Lavamanos
Sin categorizar
Grifo Fregadero de Meceta
Sin categorizar
Grifo Fregadero de Pared
Sin categorizar
Harina-2L
Sin categorizar
Incienso
Sin categorizar
Interruptor con Toma Corriente
Sin categorizar
Intima Lady-10und
Sin categorizar
Jabas
Sin categorizar

jamon barra especial
Sin categorizar

jamon barra especial lasqueado 0,5lb
Sin categorizar
Jugo de Cajita Tropical
Sin categorizar
Jugo de Lata Fresco Guayaba
Sin categorizar
Jugo de Lata Fresco Limonada
Sin categorizar
Jugo de Lata Fresco Manzana
Sin categorizar
Jugo de Lata Fresco Piña
Sin categorizar

Ketchup 1800 GR C/6
Sin categorizar
Laca Above-250ml
Sin categorizar
Lampara Recargable
Sin categorizar
Lavavajillas-750ml
Sin categorizar
Leche Condensada
Sin categorizar

Levadura-450g
Sin categorizar
Llave de Paso 1/2"
Sin categorizar
Llave de Paso 3/4"
Sin categorizar
Lomo Ahumado de cerdo- S/H
Sin categorizar

lomo Ahumado troceado
Sin categorizar
Maicena 1 lb
Sin categorizar
Malta Guagira-330
Sin categorizar
Malta santa isabel
Sin categorizar

Masas de Cerdo-1L
Sin categorizar

Mejillon-1kg
Sin categorizar
Miel-500ml
Sin categorizar
Mojo Criollo Don Roy-1L
Sin categorizar
Mojo marinado 295 ml
Sin categorizar

Mostaza 1.85g
Sin categorizar

Naranja agria 295 ml
Sin categorizar
Naranja Agria Don Roy-1L
Sin categorizar
Nues moscada polvo 24xg
Sin categorizar
Paleticas Helado CID
Sin categorizar
pan rallado
Sin categorizar
Papel Sanitario
Sin categorizar

Paprika 24x14g
Sin categorizar
Pasta de carbon 100g
Sin categorizar
Pasta de tomate -400g
Sin categorizar

Pasta tomate Vima-3kg
Sin categorizar
Pega todo epoxy 20+20g
Sin categorizar
Perfume-50ml
Sin categorizar
Petit-Beurre-175g
Sin categorizar
Pimienta Negra
Sin categorizar
Pintura acrilica Marfil -4L
Sin categorizar
Pintura acrilica Salmon -10L
Sin categorizar
Pintura acrilica Verde -4L
Sin categorizar
Protector diaria
Sin categorizar
Quaker
Sin categorizar
Queso Crema Vima-200g
Sin categorizar

Queso Gouda Barra Completa
Sin categorizar
Queso Gouda Lasqueado-0.5L
Sin categorizar
Queso Gouda-1L
Sin categorizar
Refresco Candy coctel 50*U
Sin categorizar
Refresco Candy durazno 50*U
Sin categorizar

Refresco Candy limon 50*U
Sin categorizar
Refresco Candy mango 50*U
Sin categorizar
Refresco Candy naranja 50*U
Sin categorizar
Refresco Candy piña 50*U
Sin categorizar
Refresco Cola lata 24*33cl
Sin categorizar
Refresco Limon lata 24*33cl
Sin categorizar
Refresco naranja lata 24*33cl
Sin categorizar
Refresco Piña lata 24*33cl
Sin categorizar

Regleta
Sin categorizar
Remaches de Aluminio 4×12.7mm
Sin categorizar
Repelente Spray Above Niño-150ml
Sin categorizar
Repelente Spray Above-100ml
Sin categorizar
Repelente Spray Above-150ml
Sin categorizar
Romero
Sin categorizar
Sal condimentada
Sin categorizar
Salfumant-1L
Sin categorizar

Salsa China-1.7L
Sin categorizar

Salsa soya 12 onz
Sin categorizar
Sampoo XtraCare Rose Hips-413ml
Sin categorizar
Sandwichera
Sin categorizar
Sazon Achiote 250x10g
Sin categorizar
Sazon Completo 200*10g
Sin categorizar
Sazon de Naranja Agria-5g
Sin categorizar
Sazón Liquido Criollo
Sin categorizar
Sazonador Completo con Curcuma
Sin categorizar
Sazonador con Mantequilla
Sin categorizar
Sazonador de camaron
Sin categorizar
Sazonatado 24x14g
Sin categorizar
Sazondor de res
Sin categorizar
Seca Esmaltes Spray
Sin categorizar
Servilletas Joker-60u
Sin categorizar
Set Facial Nevada
Sin categorizar
Set Ginseng, Romero, Oliva (Shampoo420+Acondicionador200ml)
Sin categorizar
Set Iviza-Colonia100ml-CVrema50g
Sin categorizar
Set Nevada SOS-champoo500ml acondicionador300ml
Sin categorizar
Set Romero(Shampoo320+Acondicionador320 ml)
Sin categorizar
Set V.V.Love de 4
Sin categorizar

Silicona Negra
Sin categorizar
Silicona Nevada-180ml
Sin categorizar
Sopa de carne Belina
Sin categorizar
Sopa de curry Banetti
Sin categorizar
Suavizante-2L La salud
Sin categorizar

T-1/2
Sin categorizar
Terminales Electrico para Carro
Sin categorizar
Tinte de Pelo Nevada
Sin categorizar

Toallitas Humedas
Sin categorizar

Tomillo
Sin categorizar
Tornillo Drywal 3.5x32mm
Sin categorizar

Union Universal -1/2
Sin categorizar
Vinagre de Frutas Don Roy-1L
Sin categorizar
Vinagre de sidra de manzana
Sin categorizar
Vinagre de V Tinto Don Roy-1L
Sin categorizar
Vinagre deleite 2 lb
Sin categorizar
Vinagre-1L
Sin categorizar

Yogurt probiotico 1/2 lt
Sin categorizar
No encontramos nada con eso. Prueba con otra palabra.
const ARBOL =
;
(() => {
const sinTildes = t => t.normalize(‘NFD’).replace(/[̀-ͯ]/g, »).toLowerCase().trim();
const rejilla = document.getElementById(‘rejilla’);
const fichas = […rejilla.querySelectorAll(‘.ficha’)];
const tira = document.getElementById(‘tira’);
const arbol = document.getElementById(‘arbol’);
const busca = document.getElementById(‘busca’);
const texto = document.getElementById(‘busca-texto’);
let elegida = null;
// «Todos» va de PRIMERA, para no tener que bajar hasta el final para verlo todo.
const usadas = [];
for (const f of fichas) {
const c = f.dataset.cat;
if (c && !usadas.includes(c)) usadas.push(c);
}
const pinta = (etiqueta, valor, clase) => {
const b = document.createElement(‘button’);
b.type = ‘button’; b.className = ‘cat’ + (clase ? ‘ ‘ + clase : »);
b.textContent = etiqueta;
b.setAttribute(‘aria-pressed’, String(elegida === valor));
b.addEventListener(‘click’, () => {
if (clase === ‘todas’) {
const abierto = arbol.hasAttribute(‘data-abierto’);
arbol.toggleAttribute(‘data-abierto’, !abierto);
return;
}
elegida = valor;
arbol.removeAttribute(‘data-abierto’);
pintarTira(); filtrar();
});
tira.appendChild(b);
};
// Las flechas solo salen cuando de verdad queda algo por ese lado.
const izq = document.getElementById(‘izq’);
const der = document.getElementById(‘der’);
function mirarFlechas() {
const sobra = tira.scrollWidth – tira.clientWidth;
izq.hidden = tira.scrollLeft <= 2;
der.hidden = sobra = sobra – 2;
}
const correr = paso => {
tira.scrollBy({ left: tira.clientWidth * 0.8 * paso });
// No se confía solo en el evento de desplazamiento: se vuelve a mirar al rato.
setTimeout(mirarFlechas, 60);
setTimeout(mirarFlechas, 400);
};
izq.addEventListener(‘click’, () => correr(-1));
der.addEventListener(‘click’, () => correr(1));
tira.addEventListener(‘scroll’, mirarFlechas);
addEventListener(‘resize’, mirarFlechas);
// El ancho de la fila cambia cuando asientan las tipografías y cuando entran las fotos,
// y para entonces la primera comprobación ya pasó. Con esto se vuelve a mirar sola.
if (window.ResizeObserver) {
tira._vigia = new ResizeObserver(mirarFlechas);
tira._vigia.observe(tira);
}
if (document.fonts?.ready) document.fonts.ready.then(mirarFlechas);
function pintarTira() {
tira.textContent = »;
pinta(‘Todos’, null);
for (const c of usadas) pinta(c, c);
pinta(‘Ver todas ▾’, ‘__arbol__’, ‘todas’);
// La elegida se trae a la vista, que si no queda escondida a un lado.
const marcada = tira.querySelector(‘.cat[aria-pressed=»true»]’);
if (marcada) marcada.scrollIntoView({ block: ‘nearest’, inline: ‘nearest’ });
requestAnimationFrame(mirarFlechas);
if (window.ResizeObserver && tira._vigia) for (const hijo of tira.children) tira._vigia.observe(hijo);
}
// El desplegable con el árbol entero: categoría y sus subcategorías.
function pintarArbol() {
const marco = document.getElementById(‘arbol-marco’);
marco.textContent = »;
for (const [padre, hijas] of ARBOL) {
const rama = document.createElement(‘div’);
rama.className = ‘rama’;
const b = document.createElement(‘b’);
b.textContent = padre;
const subs = document.createElement(‘div’);
subs.className = ‘subs’;
for (const hija of hijas) {
const s = document.createElement(‘button’);
s.type = ‘button’; s.textContent = hija;
s.addEventListener(‘click’, () => {
elegida = hija; arbol.removeAttribute(‘data-abierto’);
if (!usadas.includes(hija)) usadas.unshift(hija);
pintarTira(); filtrar();
scrollTo({ top: 0, behavior: ‘smooth’ });
});
subs.appendChild(s);
}
rama.append(b, subs);
marco.appendChild(rama);
}
}
function filtrar() {
const escrito = sinTildes(texto.value);
let salen = 0;
for (const f of fichas) {
const porCat = !elegida || f.dataset.cat === elegida || f.dataset.sub === elegida;
const porTexto = !escrito || sinTildes(f.querySelector(‘.nombre’).textContent).includes(escrito);
const sale = porCat && porTexto;
f.hidden = !sale;
if (sale) salen++;
}
document.getElementById(‘cuantos’).textContent =
salen === 1 ? ‘Hay 1 producto’ : ‘Hay ‘ + salen + ‘ productos’;
document.getElementById(‘vacio’).hidden = salen > 0;
document.getElementById(‘cuando’).hidden = salen === 0;
}
// ———- La moneda ———-
// Estas tasas son de muestra. En la web de verdad salen de la máquina, con la regla
// de que el dólar va al cambio del billete grande (`shared/monedas.ts`).
const MONEDAS = [
{ cod: ‘CUP’, tasa: 1 },
{ cod: ‘USD’, tasa: 440 },
{ cod: ‘EUR’, tasa: 470 },
{ cod: ‘MLC’, tasa: 260 },
];
let moneda = MONEDAS[0];
const precios = […document.querySelectorAll(‘.precio’)];
const cajaMonedas = document.getElementById(‘monedas’);
const botonMoneda = document.getElementById(‘abre-moneda’);
const redondear = valor => moneda.cod === ‘CUP’
? Math.round(valor).toLocaleString(‘es’)
: (Math.round(valor * 100) / 100).toLocaleString(‘es’, { minimumFractionDigits: 2 });
function pintarPrecios() {
for (const p of precios) {
const cup = Number(p.dataset.cup || 0);
p.innerHTML = redondear(cup / moneda.tasa) + ‘ ‘ + moneda.cod + ‘‘;
}
document.getElementById(‘moneda-hoy’).textContent = moneda.cod;
}
function pintarMonedas() {
const fila = document.getElementById(‘monedas-fila’);
fila.textContent = »;
for (const m of MONEDAS) {
const b = document.createElement(‘button’);
b.type = ‘button’;
b.setAttribute(‘aria-pressed’, String(m.cod === moneda.cod));
b.textContent = m.cod;
b.addEventListener(‘click’, () => {
moneda = m;
pintarPrecios(); pintarMonedas();
cajaMonedas.hidden = true;
botonMoneda.setAttribute(‘aria-expanded’, ‘false’);
});
fila.appendChild(b);
}
}
botonMoneda.addEventListener(‘click’, () => {
cajaMonedas.hidden = !cajaMonedas.hidden;
botonMoneda.setAttribute(‘aria-expanded’, String(!cajaMonedas.hidden));
if (!cajaMonedas.hidden) busca.hidden = true;
});
pintarMonedas(); pintarPrecios();
document.getElementById(‘abre-busca’).addEventListener(‘click’, () => {
busca.hidden = !busca.hidden;
document.getElementById(‘abre-busca’).setAttribute(‘aria-expanded’, String(!busca.hidden));
if (!busca.hidden) texto.focus(); else { texto.value = »; filtrar(); }
});
document.getElementById(‘busca-form’).addEventListener(‘submit’, e => e.preventDefault());
texto.addEventListener(‘input’, filtrar);
addEventListener(‘keydown’, e => { if (e.key === ‘Escape’ && !busca.hidden) {
busca.hidden = true; texto.value = »; filtrar(); } });
// El sumador y el carrito
let enCarro = 0;
for (const f of fichas) {
const salida = f.querySelector(‘output’);
const [menos, mas] = f.querySelectorAll(‘.paso button’);
const mover = paso => { salida.value = Math.max(1, Number(salida.value) + paso); };
menos.addEventListener(‘click’, () => mover(-1));
mas.addEventListener(‘click’, () => mover(1));
f.querySelector(‘.echar’).addEventListener(‘click’, () => {
enCarro += Number(salida.value);
const n = document.getElementById(‘n-carro’);
n.textContent = enCarro; n.hidden = false;
salida.value = 1;
});
}
pintarTira(); pintarArbol(); filtrar();
})();
(() => {
document.addEventListener(‘click’, ev => {
const boton = ev.target.closest(‘.echar’);
if (!boton) return;
const ficha = boton.closest(‘.ficha’);
const id = ficha?.dataset.id;
if (!id) return;
ev.preventDefault();
const cuantos = Number(ficha.querySelector(‘.paso output’)?.textContent || 1) || 1;
boton.textContent = ‘Echando…’;
window.location = ‘/?add-to-cart=’ + id + ‘&quantity=’ + cuantos;
});
})();
.woocommerce-products-header, .woocommerce-result-count, .woocommerce-ordering,
ul.products, .woocommerce-pagination, .page-header{ display:none !important; }
#main, #content-wrap, .content-area, .container, #wrap, .entry, .single-page-article{
max-width:none !important; width:100% !important; margin:0 !important; padding:0 !important;
}
#site-header, #footer, #scroll-top{ display:none !important; }
html{ margin-top:0 !important; } #wpadminbar{ position:absolute !important; }
-


- Sin categorizar
Anis
- $250.00
- Añadir al carrito






