Activa tu metabolismo
Gomi Balance — Vinagre de manzana para metabolismo y digestión
S/ 99.00
Sistema de diseño derivado del Manual de Identidad Gomilovers (Brandbook Básico, 2025) para la tienda online. Tokens, componentes y patrones ecommerce listos para producción: accesibles, responsive y tematizables.
Personalidad de marca: cercana, confiable y seria — bienestar para adultos, nunca infantil. Gomitas nutracéuticas que hacen fácil el autocuidado y transmiten salud y confianza. Eso se traduce en: el beneficio como protagonista de cada pieza, radios generosos y botones píldora, gradientes monocromáticos sutiles dentro de una misma línea de color, contraste tipográfico con Poppins ExtraBold, frutas reales solo como acento secundario de salud y frescura, y el corazón reservado al logo (jamás como motivo decorativo recurrente).
Paleta extraída del manual (pp. 20–21). El rojo #E84755 es el color primario y debe dominar CTAs y acentos. El blanco puro transmite claridad y confianza. Los 8 secundarios aportan versatilidad sin alejarse del estilo central — aquí cada uno recibe además un rol de categoría de producto.
Rojo Gomilovers
#E84755 · CMYK 1 83 56 0
--c-brand-500
Vino
#91334E
--c-brand-700
Rojo tinte
#FCE4E7
--c-brand-100
Blanco puro
#FFFFFF
--c-white
Malva
#B4709C
--c-malva-500
Azul
#4171AF
--c-azul-500
Cian
#38B9CC
--c-cian-500
Verde
#3E805C
--c-verde-500
Lima
#B1BF58
--c-lima-500
Amarillo
#FDCD4C
--c-amarillo-500
Naranja
#F39542
--c-naranja-500
Tinta 900
#1F1F1F
--c-ink-900
| Token | Apunta a | Uso |
|---|---|---|
| --color-action | --c-brand-500 | Relleno de CTA primario. Máx. 1 por pantalla. |
| --color-action-hover | --c-brand-700 | Hover/active del CTA. |
| --color-on-action | #FFFFFF | Texto/icono sobre el CTA — solo etiquetas grandes (≥19px bold). |
| --color-link | --c-brand-700 | Enlaces y texto de marca sobre claro (pasa 4.5:1). |
| --surface / -raised / -sunken | blanco / blanco / #FAFAFA | Página / tarjetas / pozos. |
| --text / -muted / -subtle | tinta 900/700/500 | Texto primario / secundario / metadatos. |
| --focus-ring | --c-azul-500 | Anillo de foco visible (contraste 3:1 sobre blanco y sobre rojo). |
| --color-cat-* | secundarios | Acento de apoyo por beneficio (ver §03) — el color acompaña, el beneficio define. |
≈60% neutrales (blanco, fondos suaves) · ≈30% Rojo Gomilovers (CTAs, acentos, marca) · ≈10% secundarios (categorías, badges, estados). El rojo manda; los secundarios condimentan.
| Par texto / fondo | Ratio | Resultado |
|---|---|---|
| Tinta 900 #1F1F1F sobre blanco | 16.48:1 | AA texto normal ✓ |
| Tinta 700 #4A4A4A sobre blanco | 8.86:1 | AA texto normal ✓ |
| Tinta 500 #6F6F6F sobre blanco | 5.02:1 | AA texto normal ✓ |
| Vino #91334E sobre blanco (links, precios) | 7.53:1 | AA texto normal ✓ |
| Blanco sobre Rojo #E84755 (CTA) | 3.84:1 | AA texto grande / UI (≥19px bold) ✓ |
| Blanco sobre Vino #91334E | 7.53:1 | AA texto normal ✓ |
| Rojo #E84755 sobre blanco (iconos, bordes UI) | 3.84:1 | AA componente UI (3:1) ✓ |
| Azul foco #4171AF sobre blanco | 4.99:1 | Anillo de foco ✓ |
| Tinta 900 sobre Amarillo #FDCD4C (badge Nuevo) | 11.00:1 | AA texto normal ✓ |
| Dark · #F4F2F2 sobre #121214 | 16.78:1 | AA texto normal ✓ |
| Dark · link #FF9AA4 sobre #121214 | 9.28:1 | AA texto normal ✓ |
El manual (p. 25) define los elementos gráficos que este sistema tokeniza: gradientes monocromáticos — siempre tonos de una misma línea de color del book, tomados con cuentagotas de la escala de Colores secundarios, con transición sutil —, vectores geométricos limpios y contraste tipográfico con ExtraBold sobredimensionada de fondo. Las categorías se definen por beneficio, nunca por una fruta o un color.
| Token | 3 tonos (misma línea, sin llegar a blanco) | Uso |
|---|---|---|
| --g-brand | #EC6874 → #E84755 → #CC3E4B (165°) | Hero, newsletter, marca |
| --g-coral | #EC6874 → #E84755 | Gomi Energy Para Ella — rojo principal + subtono · acentos de marca |
| --g-vino | #A5586E → #91334E → #802D45 | Gomi Dreams / Descanso y relajación (morado oscuro) · fondos profundos |
| --g-amarillo | #FDD66C → #FDCD4C → #DFB443 | Destacados, badges promocionales |
| --g-naranja | #F5A864 → #F39542 → #D6833A | Acentos cálidos, promos |
| --g-cian | #5CC6D5 → #38B9CC → #31A3B4 | Frescura, secciones informativas |
| --g-azul | #638BBD → #4171AF → #39639A | Gomi Energy Para Él (azul oscuro) |
| --g-verde | #619779 → #3E805C → #377151 | Activa tu metabolismo (verde oscuro) |
| --g-lima | #BFCB76 → #B1BF58 → #9CA84D | Naturalidad, sellos de producto |
| --g-malva | #C28AAE → #B4709C → #9E6389 | Acentos suaves |
Composición canónica: gradiente monocromático + el beneficio como protagonista (titular Poppins ExtraBold) + palabra de fondo rotada al 14% de opacidad. La taxonomía es la de gomilovers.com: Activa tu metabolismo · Descanso y relajación · Energía y líbido. El color de cada panel es un acento de apoyo — lo que identifica a la categoría es el beneficio. Energía y líbido distingue sus dos productos: Para Ella (rojo principal) y Para Él (azul oscuro).
Activa tu metabolismo
--gradient-cat-metabolismo · --color-cat-metabolismo
Descanso y relajación
--gradient-cat-descanso · --color-cat-descanso
Energía y líbido · Para Ella
--gradient-prod-energia-ella · --color-prod-energia-ella
Energía y líbido · Para Él
--gradient-prod-energia-el · --color-prod-energia-el
Poppins es la única familia tipográfica de la web (embebida en base64, cero sustitución): titulares y fondos en ExtraBold, cuerpo en Regular, etiquetas y tags en Medium/SemiBold. Las manuscritas del book — DK Lemon Yellow Sun y Please write me a song — son de apoyo gráfico para social media y piezas publicitarias exclusivamente: NUNCA en la web (la marca debe verse seria y confiable, no infantil). Montserrat fue retirada del sistema: no figura en el book.
| Token | Familia / peso | Tamaño / línea | Uso |
|---|---|---|---|
| --text-display | Poppins 800 | 48px / 1.05 | Hero. ExtraBold sobredimensionada también como fondo (contraste tipográfico). |
| --text-h2 | Poppins 800 | 32px / 1.15 | Títulos de sección. |
| --text-h3 | Poppins 700 | 20px / 1.3 | Títulos de tarjeta / producto. |
| --text-body | Poppins 400 | 16px / 1.5 | Párrafos. Nunca menor a 16px en cuerpo. |
| --text-sm | Poppins 500 | 14px / 1.45 | Metadatos, captions. |
| --text-tag | Poppins 500–700 | 11–13px / .1em track | Tag de marca, etiquetas, badges, iconografía. |
/* Carga de fuentes — estrategia de este sistema:
· Poppins (licencia OFL): embebida en base64 dentro del archivo → cero sustitución, offline.
· Manuscritas del book (DK Lemon Yellow Sun, Please write me a song): NO se cargan en la web.
Son exclusivas de social media y piezas publicitarias. */
Base de 4px. Los radios son el dial de personalidad: Gomilovers es juguetona → radios generosos y botones píldora.
Tres niveles neutros + una sombra teñida de marca para el hover del CTA (refuerza identidad — solo en acciones primarias).
Mobile-first: estilos base para móvil, media queries min-width hacia arriba. El tráfico ecommerce es mayoritariamente móvil.
| Token | Valor | Comportamiento requerido |
|---|---|---|
| base | <480px | Grid 1 col · navbar condensada (logo + carrito) · drawer 100vw · CTA de PDP sticky-bottom. |
| --bp-sm | 480px | Grid 2 cols · drawer máx. 90vw. |
| --bp-md | 768px | Grid 3 cols · navbar con enlaces completos · PDP a 2 columnas (galería + buy-box). |
| --bp-lg | 1024px | Grid 4 cols · drawer 400px. |
| --bp-xl | 1280px | Contenedor máx. 1200px centrado. |
Cada componente se entrega con todos sus estados: rest, hover, focus-visible, active, disabled, loading y error donde aplique. Touch targets ≥44px siempre.
<button class="btn btn-primary">Agregar al carrito</button> <button class="btn btn-primary" disabled aria-disabled="true">Deshabilitado</button> <button class="btn btn-primary" aria-busy="true"><span class="spinner"></span>Agregando…</button>
Te faltan S/ 45.10 para envío gratis
Activa tu metabolismo
S/ 99.00
Descanso y relajación
S/ 99.00
Especificaciones de los patrones de conversión. La demo (demo.html) los implementa funcionando.
| Zona | Regla |
|---|---|
| Galería | Imagen principal sobre el gradiente de su categoría; fila de miniaturas debajo — botones reales, la activa lleva borde rojo y aria-pressed="true"; clic intercambia la imagen. |
| Título + precio | H1 Poppins 800; precio en Vino, grande; badge de estado encima si aplica. |
| CTA | Primario píldora, etiqueta ≥19px/700; full-width y sticky-bottom en móvil (la fuga ViewContent→AddToCart es el mayor leak del funnel). Estado loading al agregar. |
| Beneficios | Tiles pequeños con el tinte de la categoría (p. ej. «13 vitaminas», «2 al día», «Sin azúcar añadida»). |
| Cross-sell | Tarjetas compactas «Combínalo con» debajo — palanca directa de AOV. |
| Regla | Detalle |
|---|---|
| Modelo de datos | El carrito es un array de líneas {id, nombre, precio, qty}. Nunca un contador global. |
| Por línea | Miniatura + nombre + precio + stepper propio + eliminar. Todo recálculo (total, barra de envío) es en vivo. |
| Envío gratis | Umbral S/ 120. Barra role="progressbar" con relleno en gradiente cítrico. |
| Checkout | CTA primario full-width fijado al pie del drawer con el total visible. |
| Estado | Patrón |
|---|---|
| Carrito vacío | Ícono de carrito (vector geométrico) + «Tu carrito está vacío» + CTA «Seguir comprando» dentro del drawer. |
| Sin resultados | Mensaje + sugerencias de categorías — nunca un panel en blanco. |
| Agotado | Tarjeta/PDP atenuadas, CTA deshabilitado + «Avísame» secundario. |
| Cargando | Skeleton shimmer en tarjetas y PDP. |
| Error de formulario | Borde danger + mensaje vinculado con aria-describedby + aria-invalid. |
| Política | Implementación |
|---|---|
| Contraste | AA: 4.5:1 texto normal, 3:1 texto grande y componentes UI. Tabla verificada en §02. El rojo de marca nunca se usa como texto corrido pequeño. |
| Foco visible | :focus-visible con anillo azul --focus-ring de 3px + offset 2px en todo elemento interactivo (azul: visible sobre blanco y sobre rojo). |
| Touch targets | ≥44×44px en botones, steppers, iconos. Botones icon-only llevan aria-label. |
| Movimiento reducido | @media (prefers-reduced-motion: reduce) desactiva marquee, slides y heartbeat; el toast pasa a fade. |
| Live regions | Toast de confirmación con role="status" aria-live="polite"; cantidades del carrito con aria-live. |
| Drawer modal | role="dialog" aria-modal, trampa de foco, cierre con Esc y overlay, retorno de foco al disparador, fondo inert. |
| Formularios | Todo input con <label>; errores con aria-describedby y aria-invalid. |
| Interacción | Transición | Fallback reduced-motion |
|---|---|---|
| Hover CTA | lift -1px + shadow-brand · .15s | Solo cambio de color |
| Hover tarjeta | lift -6px + shadow-lg · .15s ease | Solo borde |
| Drawer carrito | translateX .3s cubic-bezier(.2,.7,.3,1) | Aparece sin deslizar |
| Toast | slide-up .3s | Fade |
| Favorito | heartbeat scale 1→1.35→1 · .4s | Solo cambio de color |
| Marquee | velocidad constante 80px/s, loop -50% | Estático |
| Skeleton | shimmer 1.4s infinite | Fondo estático |
La capa semántica es la que se reapunta: los componentes no cambian. Activa el modo oscuro con data-theme="dark" en <html> (prueba el botón flotante de esta página). El rojo de acción se mantiene — su contraste etiqueta/relleno no depende del tema — pero links y foco usan variantes claras.
[data-theme="dark"]{
--surface:#121214; --surface-raised:#1C1C20; --surface-sunken:#0D0D0F;
--text:#F4F2F2; --text-muted:#C6C2C3; --text-subtle:#969096;
--border:#2C2A2E;
--color-accent-soft:#3B2026; /* tinte rojo oscuro */
--color-link:#FF9AA4; /* 9.3:1 sobre #121214 */
--focus-ring:#7FB4E8; /* azul claro, 3:1 sobre oscuro */
}
Para la tienda real: Tailwind leyendo las variables CSS — una sola fuente de verdad, sin hex duplicados, y el dark mode sigue funcionando gratis. Los componentes HTML/CSS de la demo mapean 1:1 a estas clases.
// tailwind.config.js
module.exports = {
darkMode: ['selector', '[data-theme="dark"]'],
theme: { extend: {
colors: {
action: 'var(--color-action)',
'action-hover': 'var(--color-action-hover)',
'on-action': 'var(--color-on-action)',
'accent-soft': 'var(--color-accent-soft)',
link: 'var(--color-link)',
surface: 'var(--surface)',
'surface-raised': 'var(--surface-raised)',
'surface-sunken': 'var(--surface-sunken)',
ink: 'var(--text)',
'ink-muted': 'var(--text-muted)',
line: 'var(--border)',
'cat-metabolismo': 'var(--color-cat-metabolismo)',
'cat-descanso': 'var(--color-cat-descanso)',
'cat-energia': 'var(--color-cat-energia)',
},
backgroundImage: {
'g-brand': 'var(--g-brand)', 'g-amarillo': 'var(--g-amarillo)',
'g-cian': 'var(--g-cian)', 'g-verde': 'var(--g-verde)', 'g-malva': 'var(--g-malva)',
},
borderRadius: { pill: 'var(--r-full)', card: 'var(--r-lg)' },
boxShadow: { brand: 'var(--shadow-brand)', card: 'var(--shadow-lg)' },
fontFamily: {
display: ['Poppins','sans-serif'], body: ['Poppins','sans-serif'],
tag: ['Poppins','sans-serif'],
},
}},
}
// Button.jsx — variantes, tamaños y estados
export function Button({ variant='primary', size='md', loading=false, disabled=false, children, ...props }) {
const base = 'inline-flex items-center justify-center gap-2 font-bold rounded-pill min-h-[52px] transition-all ' +
'focus-visible:outline focus-visible:outline-[3px] focus-visible:outline-offset-2 ' +
'focus-visible:outline-[var(--focus-ring)] disabled:opacity-45 disabled:cursor-not-allowed';
const variants = {
primary: 'bg-action text-on-action text-[19px] hover:bg-action-hover hover:shadow-brand hover:-translate-y-px',
secondary: 'bg-surface text-link border-2 border-action hover:bg-accent-soft',
ghost: 'text-ink-muted hover:bg-accent-soft hover:text-link',
};
const sizes = { sm:'px-5 py-2 text-base min-h-[44px]', md:'px-8 py-3', lg:'px-10 py-4 text-[21px] min-h-[60px]' };
return (
<button className={`${base} ${variants[variant]} ${sizes[size]}`}
disabled={disabled || loading} aria-busy={loading} {...props}>
{loading && <span className="spinner" aria-hidden="true" />}
{children}
</button>
);
}