Posters
Naturaleza
Agua
Una pausa líquida en medio del ruido. Agua fluye entre la quietud y el movimiento, invitando a mirar más allá de la superficie. Su presencia transforma la pared en respiración, en horizonte. Es un recordatorio de que lo esencial no se ve, se siente.
const AFX11_VARIANTS = { "21x29.7": { label: "21×29.7 cm", price: 48.00 }, "40x60": { label: "40×60 cm", price: 65.00 }, "60x90": { label: "60×90 cm", price: 69.00 } }; (function () { function fmt(val, locale, currencyCode, symbol) { try { return new Intl.NumberFormat(locale, { style: 'currency', currency: currencyCode }).format(val); } catch { return (Number(val).toFixed(2)) + ' ' + symbol; } } function initOne(root) { const trigger = root.querySelector('.afx11-trigger'); const valueEl = root.querySelector('.afx11-value'); const menu = root.querySelector('.afx11-menu'); const opts = Array.from(menu.querySelectorAll('.afx11-opt')); const priceEl = root.querySelector('.afx11-price'); const hiddenVariant = root.querySelector('.afx11-var'); const hiddenPrice = root.querySelector('.afx11-price-hidden'); const currencyCode = root.dataset.currency || 'EUR'; const symbol = root.dataset.symbol || '€'; const locale = root.dataset.locale || 'es-ES'; function setActiveByKey(key) { opts.forEach(li => { const active = li.dataset.key === key; li.classList.toggle('is-active', active); li.setAttribute('aria-selected', active ? 'true' : 'false'); }); valueEl.dataset.key = key; valueEl.textContent = AFX11_VARIANTS[key].label; const p = AFX11_VARIANTS[key].price; priceEl.textContent = fmt(p, locale, currencyCode, symbol); hiddenVariant.value = key; hiddenPrice.value = p.toFixed(2); } function openMenu() { menu.classList.add('is-open'); trigger.setAttribute('aria-expanded', 'true'); } function closeMenu() { menu.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); } trigger.addEventListener('click', (e) => { e.stopPropagation(); menu.classList.contains('is-open') ? closeMenu() : openMenu(); }); opts.forEach(li => li.addEventListener('click', (e) => { e.stopPropagation(); setActiveByKey(li.dataset.key); closeMenu(); }) ); document.addEventListener('click', (e) => { if (!root.contains(e.target)) closeMenu(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); setActiveByKey(valueEl.dataset.key || Object.keys(AFX11_VARIANTS)[0]); } document.querySelectorAll('.afx11').forEach(initOne); })(); Tierra
Materia viva, origen y destino. Tierra es una reverencia al equilibrio: la calma que sostiene, la fuerza que germina. Evoca el peso amable de lo natural y la belleza que ocurre cuando todo vuelve a su centro. No busca destacar, sino pertenecer.
const AFX12_VARIANTS = { "21x29.7": { label: "21×29.7 cm", price: 48.00 }, "40x60": { label: "40×60 cm", price: 65.00 }, "60x90": { label: "60×90 cm", price: 69.00 } }; (function () { function fmt(val, locale, currencyCode, symbol) { try { return new Intl.NumberFormat(locale, { style: 'currency', currency: currencyCode }).format(val); } catch { return (Number(val).toFixed(2)) + ' ' + symbol; } } function initOne(root) { const trigger = root.querySelector('.afx12-trigger'); const valueEl = root.querySelector('.afx12-value'); const menu = root.querySelector('.afx12-menu'); const opts = Array.from(menu.querySelectorAll('.afx12-opt')); const priceEl = root.querySelector('.afx12-price'); const hiddenVariant = root.querySelector('.afx12-var'); const hiddenPrice = root.querySelector('.afx12-price-hidden'); const currencyCode = root.dataset.currency || 'EUR'; const symbol = root.dataset.symbol || '€'; const locale = root.dataset.locale || 'es-ES'; function setActiveByKey(key) { opts.forEach(li => { const active = li.dataset.key === key; li.classList.toggle('is-active', active); li.setAttribute('aria-selected', active ? 'true' : 'false'); }); valueEl.dataset.key = key; valueEl.textContent = AFX12_VARIANTS[key].label; const p = AFX12_VARIANTS[key].price; priceEl.textContent = fmt(p, locale, currencyCode, symbol); hiddenVariant.value = key; hiddenPrice.value = p.toFixed(2); } function openMenu() { menu.classList.add('is-open'); trigger.setAttribute('aria-expanded', 'true'); } function closeMenu() { menu.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); } trigger.addEventListener('click', (e) => { e.stopPropagation(); menu.classList.contains('is-open') ? closeMenu() : openMenu(); }); opts.forEach(li => li.addEventListener('click', (e) => { e.stopPropagation(); setActiveByKey(li.dataset.key); closeMenu(); }) ); document.addEventListener('click', (e) => { if (!root.contains(e.target)) closeMenu(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); setActiveByKey(valueEl.dataset.key || Object.keys(AFX12_VARIANTS)[0]); } document.querySelectorAll('.afx12').forEach(initOne); })(); Fuego
Intenso, pero sin prisa. Fuego vibra, ilumina y se repliega con la elegancia de algo que sabe su poder. Es energía en reposo: una explosión medida, un impulso que no necesita permiso para existir. Perfecto para quien prefiere provocar sin decirlo.
const AFX13_VARIANTS = { "21x29.7": { label: "21×29.7 cm", price: 48.00 }, "40x60": { label: "40×60 cm", price: 65.00 }, "60x90": { label: "60×90 cm", price: 69.00 } }; (function () { function fmt(val, locale, currencyCode, symbol) { try { return new Intl.NumberFormat(locale, { style: 'currency', currency: currencyCode }).format(val); } catch { return (Number(val).toFixed(2)) + ' ' + symbol; } } function initOne(root) { const trigger = root.querySelector('.afx13-trigger'); const valueEl = root.querySelector('.afx13-value'); const menu = root.querySelector('.afx13-menu'); const opts = Array.from(menu.querySelectorAll('.afx13-opt')); const priceEl = root.querySelector('.afx13-price'); const hiddenVariant = root.querySelector('.afx13-var'); const hiddenPrice = root.querySelector('.afx13-price-hidden'); const currencyCode = root.dataset.currency || 'EUR'; const symbol = root.dataset.symbol || '€'; const locale = root.dataset.locale || 'es-ES'; function setActiveByKey(key) { opts.forEach(li => { const active = li.dataset.key === key; li.classList.toggle('is-active', active); li.setAttribute('aria-selected', active ? 'true' : 'false'); }); valueEl.dataset.key = key; valueEl.textContent = AFX13_VARIANTS[key].label; const p = AFX13_VARIANTS[key].price; priceEl.textContent = fmt(p, locale, currencyCode, symbol); hiddenVariant.value = key; hiddenPrice.value = p.toFixed(2); } function openMenu() { menu.classList.add('is-open'); trigger.setAttribute('aria-expanded', 'true'); } function closeMenu() { menu.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); } trigger.addEventListener('click', (e) => { e.stopPropagation(); menu.classList.contains('is-open') ? closeMenu() : openMenu(); }); opts.forEach(li => li.addEventListener('click', (e) => { e.stopPropagation(); setActiveByKey(li.dataset.key); closeMenu(); }) ); document.addEventListener('click', (e) => { if (!root.contains(e.target)) closeMenu(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); setActiveByKey(valueEl.dataset.key || Object.keys(AFX13_VARIANTS)[0]); } document.querySelectorAll('.afx13').forEach(initOne); })(); Viaje en el Tiempo
Edición Vintage
Un homenaje a lo analógico en tiempos de algoritmos.
La Edición Vintage reinterpreta objetos que alguna vez marcaron el ritmo del mundo: una cámara que aún escucha la luz, una máquina de escribir que respira palabras, una bicicleta que huele a libertad, un teléfono que sonaba con intención o una radio que narraba sin pantalla.Cada pieza se posa sobre sutiles marcas de acuarela, como si el tiempo mismo hubiese dejado su huella.
(function () { const AFX15_VARIANTS = { "bicicleta": { label: "Bicicleta" }, "camara": { label: "Cámara" }, "radio": { label: "Radio" }, "telefono": { label: "Teléfono" }, "maquina": { label: "Máquina de Escribir" } }; function initAFX15(root) { const trigger = root.querySelector('.afx15-trigger'); const valueEl = root.querySelector('.afx15-value'); const menu = root.querySelector('.afx15-menu'); const opts = Array.from(menu.querySelectorAll('.afx15-opt')); const hiddenInput = root.querySelector('.afx15-var'); function setActiveByKey(key) { opts.forEach(li => { const active = li.dataset.key === key; li.classList.toggle('is-active', active); li.setAttribute('aria-selected', active ? 'true' : 'false'); }); valueEl.dataset.key = key; valueEl.textContent = AFX15_VARIANTS[key].label; hiddenInput.value = key; } function openMenu() { menu.classList.add('is-open'); trigger.setAttribute('aria-expanded', 'true'); } function closeMenu() { menu.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); } trigger.addEventListener('click', (e) => { e.stopPropagation(); menu.classList.contains('is-open') ? closeMenu() : openMenu(); }); opts.forEach(li => li.addEventListener('click', (e) => { e.stopPropagation(); setActiveByKey(li.dataset.key); closeMenu(); })); document.addEventListener('click', (e) => { if (!root.contains(e.target)) closeMenu(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); setActiveByKey(valueEl.dataset.key || Object.keys(AFX15_VARIANTS)[0]); } document.querySelectorAll('.afx15').forEach(initAFX15); })(); const AFX11_VARIANTS = { "21x29.7": { label: "21×29.7 cm", price: 48.00 }, "40x60": { label: "40×60 cm", price: 65.00 }, "60x90": { label: "60×90 cm", price: 69.00 } }; (function () { function fmt(val, locale, currencyCode, symbol) { try { return new Intl.NumberFormat(locale, { style: 'currency', currency: currencyCode }).format(val); } catch { return (Number(val).toFixed(2)) + ' ' + symbol; } } function initOne(root) { const trigger = root.querySelector('.afx11-trigger'); const valueEl = root.querySelector('.afx11-value'); const menu = root.querySelector('.afx11-menu'); const opts = Array.from(menu.querySelectorAll('.afx11-opt')); const priceEl = root.querySelector('.afx11-price'); const hiddenVariant = root.querySelector('.afx11-var'); const hiddenPrice = root.querySelector('.afx11-price-hidden'); const currencyCode = root.dataset.currency || 'EUR'; const symbol = root.dataset.symbol || '€'; const locale = root.dataset.locale || 'es-ES'; function setActiveByKey(key) { opts.forEach(li => { const active = li.dataset.key === key; li.classList.toggle('is-active', active); li.setAttribute('aria-selected', active ? 'true' : 'false'); }); valueEl.dataset.key = key; valueEl.textContent = AFX11_VARIANTS[key].label; const p = AFX11_VARIANTS[key].price; priceEl.textContent = fmt(p, locale, currencyCode, symbol); hiddenVariant.value = key; hiddenPrice.value = p.toFixed(2); } function openMenu() { menu.classList.add('is-open'); trigger.setAttribute('aria-expanded', 'true'); } function closeMenu() { menu.classList.remove('is-open'); trigger.setAttribute('aria-expanded', 'false'); } trigger.addEventListener('click', (e) => { e.stopPropagation(); menu.classList.contains('is-open') ? closeMenu() : openMenu(); }); opts.forEach(li => li.addEventListener('click', (e) => { e.stopPropagation(); setActiveByKey(li.dataset.key); closeMenu(); }) ); document.addEventListener('click', (e) => { if (!root.contains(e.target)) closeMenu(); }); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closeMenu(); }); setActiveByKey(valueEl.dataset.key || Object.keys(AFX11_VARIANTS)[0]); } document.querySelectorAll('.afx11').forEach(initOne); })(); Artemia 2025. Todos los derechos reservados.
Concepto y visuales por Artemia Store.