Pulsoby Cuotario
Design System / 3.1.0Abrir Cuotario ›
CUOTARIO / DESIGN SYSTEM
UN LENGUAJE. TODO EL PRODUCTO.

Pulso.

Claridad en los datos.
Energía en cada interacción.

Pulso conecta la identidad de Cuotario con las decisiones de diseño y código. Una base compartida para construir una experiencia deportiva reconocible, accesible y preparada para crecer.

18componentes base02temas01fuente de tokens
PULSO 2.1 / DATA COMPONENTS

La misma pieza.
En el sistema y la app.

Estos ejemplos cargan pulso-data.css, el mismo archivo del dashboard. Datos ilustrativos, sin conexión con apuestas ni cuentas.

Hoy En vivo Dato pendiente

Tiros al arco

Últimos 15 partidos · ejemplo
EquipoProy.Sugerencia
Equipo localLocal
4.62.9–6.5
Menos de 6.5 prob. est.
Equipo visitanteVisitante
3.42.4–5.4
Más de 1.5 prob. est.
TotalAmbos equipos
8.0n=15/15
Más de 5.5 prob. est.

Ticket de ejemplo

0

Añade una selección con +.

Prueba Editar y Listo. El borrador se mantiene solo en esta demo.

Badge · contrato

.p-badge + .today | .live | .warning | .neutral.

  • Padding 5 px vertical / 10 px horizontal. Radio completo.
  • Informativo: no recibe foco ni se comporta como botón.
  • Hoy: lima + tinta oscura. Directo: fondo rosa suave y texto vino en claro; fondo vino y texto rosa claro en oscuro. Incluye punto y texto.
  • No anidar otra píldora dentro ni anular su padding.

Selección · contrato

.p-selection y aria-pressed.

  • 36 px con ratón; 44 px para entrada táctil. SVG de 18 × 18 centrado, con el mismo trazado de la app; no usar caracteres +, ✓ o ×.
  • Hover visible. Seleccionado: check + lima, también por teclado.
  • Enter o Espacio activa; segundo clic quita la misma selección.
  • El contador y todas las instancias reflejan el borrador.
Anatomía y comportamiento por componente
ComponenteInformaciónEstados / respuesta
Market cardMercado → muestra → equipo → proyección → línea → probabilidad → añadir.Sin datos = —, nunca 0; sin señal = sin botón. Probabilidad: verde desde 78%, amarillo de 70% a 77%, siempre en negrita. Menos de 70% no se recomienda; no existe estado rojo. Tres columnas en pantallas amplias desde 1720 px, dos desde 1100 px y una en móvil. Al plegar, la tarjeta recupera la altura de su encabezado.
Featured matchCompetición → estado → equipos → marcador/hora → análisis.Banderas decorativas con blur, fondo oscuro de respaldo; paginación manual sin autoplay.
TicketSelección → fuente de cuota → editar/quitar → monto → guardado.Borrador local revisable; historial y guardado Pro. Escape cierra y devuelve foco. No ejecuta apuestas.
Live cardMinuto → equipos y marcador → lectura del encuentro.Datos antiguos etiquetados; refrescos conservan foco. Superficie oscura independiente del tema general.
CardSuperficie, contenido y separación de 12–16 px.Sin borde decorativo. Divisores suaves solo entre filas; foco de controles visible.
Implementación y criterios para nuevas pantallas
<span class="p-badge today">Hoy</span>
<button class="p-selection" type="button" aria-pressed="false"
  aria-label="Añadir al ticket: selección">
  <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M5 12h14"/></svg>
</button>
<section class="p-theme-dark">…contenido en vivo…</section>

Antes de publicar una nueva variante: probar teclado, claro/oscuro, 320 px, texto largo, dato ausente y estado seleccionado. No duplicar CSS del componente en cada pantalla.

Mercados · apertura inicial

Solo la primera fila comienza abierta. El resto conserva su encabezado para abrirse bajo demanda.

Tiros al arco

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

Remates totales

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

Córners

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

Faltas cometidas

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

Tarjetas

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

Offsides

Proyección y sugerencias por equipo.
Contenido ilustrativo del mercado.

La primera fila se calcula con la retícula real de Pulso: tres columnas desde 1720 px, dos por encima de 1100 px y una hasta 1100 px. Se aplica una vez al cargar el partido; después se respetan las aperturas y cierres de la persona, incluso al redimensionar.

PULSO / LISTADO DE PICKS

Una selección por tarjeta, con espacio para leer.

12 px entre tarjetas, 16 px de espacio interior y 8 px entre bloques de texto. Las alternativas se distribuyen en varias líneas cuando lo necesitan. El filtro de la app se separa 16 px del listado.

Local vs Visitante · ejemplo de componente

Equipo local: Más de 3.5 córners

Probabilidad ilustrativa 76% · proyección 5.4 · cuota mínima 1.41

Si tu casa no la tiene:Más de 2.5 → pide ≥ 1.25Más de 4.5 → pide ≥ 1.69
76%

Local vs Visitante · ejemplo de componente

Equipo visitante: Menos de 6.5 córners

Probabilidad ilustrativa 74% · proyección 4.7 · cuota mínima 1.44

Si tu casa no la tiene:Menos de 5.5 → pide ≥ 1.75Menos de 7.5 → pide ≥ 1.27Menos de 8.5 → pide ≥ 1.17
74%

Estados por tema · Pulso 2.1

Fuente única: roles semánticos de pulso.tokens.json y componentes de pulso-data.css. Pasa el cursor o navega con Tab para revisar los estados.

Modo claro

64′ · En vivoHoy
Más de 5.576% prob. estimada · ejemplo

Modo oscuro

64′ · En vivoHoy
Más de 5.576% prob. estimada · ejemplo
Contrato de interacción 2.1
ComponenteRegla compartida
Botón con icono.p-button.icon.compact: SVG de 18 px, centrado en ambos ejes, sin padding asimétrico. Control compacto de 36 px; 44 px para entrada táctil. Cerrar y vaciar usan la variante estándar de 44 px e iconos SVG de 18 px, sin caracteres tipográficos. Usar etiqueta accesible.
Acceso a picks.p-button.emphasis.block: acción de 48 px a todo el ancho debajo del resumen. Texto estable «Ver los mejores picks». Carga datos o reabre el listado existente.
Estado en vivolive-fill / live-ink. Contraste de texto validado en ambos temas; punto y texto siempre presentes.
Tarjetasurface-hover: gris tenue en claro y superficie más clara en oscuro. No colorear toda la tarjeta de lima.
Pro / sugerencia / métricaemphasis para texto; emphasis-fill / emphasis-ink / emphasis-hover para controles. Cobalto en claro y lima en oscuro.
DestacadoHover: línea interior blanca, alfa 0.3 y 1 px, sin salto de tamaño.
Ticket / editorCampo dentro de la misma selección, separación interior, apertura de 200 ms y cierre de 180 ms. Movimiento reducido: sin animación. Vaciar y cerrar comparten objetivo de 44 px.
Directo / diálogolive-overlay: opacidad 0.35. Marcador, lectura y comparación de estadísticas con roles de superficie propios. Tres columnas de encuentros desde 1500 px.

Criterio: WCAG 2.2 · contraste de texto. Los ratios se calculan en Color y temas; no certifican toda la app.

PULSO 2.3 / ESTRUCTURA GLOBAL

Un encabezado de borde a borde.

Logo, buscador y acciones pertenecen a una sola superficie. Su sombra recorre todo el ancho, también sobre el menú lateral. La navegación y el contenido empiezan debajo.

CuotarioBuscar equipo…
InicioEn vivoCompeticiones
Claro · elevación de tarjeta
Guadalajara Chivas

Cuota de ejemplo

1.66
CuotarioBuscar equipo…
InicioEn vivoCompeticiones
Oscuro · elevación de tarjeta
Guadalajara Chivas

Cuota de ejemplo

1.66

Header compartido

.p-app-header usa elevation-header, con sombra de contacto y difusión por header-shadow / header-edge. Altura del producto: app-header-height, 64 px. El sidebar mide 208 px y comienza debajo; nunca contiene un logo duplicado.

Tarjetas con profundidad

elevation-card combina 2/4 px y 8/20 px de desplazamiento y difusión. card-shadow usa grafito al 8% en claro y negro al 24% en oscuro. El relieve se mantiene visible entre tarjetas y superficies del mismo color.

Cuenta y menú · claro

Cuenta y menú · oscuro

Cuenta: 44 px de alto, padding horizontal simétrico de 12 px, avatar de 28 px y separación de 8 px con el nombre. Menú: 44 × 44 px, icono centrado. En móvil la cuenta ocupa 44 × 44 px y centra el avatar al ocultar el nombre.

HEADER / RESPONSIVE

Las acciones siempre a mano.

En móvil, ticket, cuenta, búsqueda y menú conservan 44 × 44 px. El contador se superpone al ticket; la cuenta sin sesión usa la misma anatomía que el perfil. A 360 px o menos, la marca conserva el símbolo y su nombre accesible.

Variantes compartidas: .p-header-ticket, .p-user-control, .p-user-guest y .p-header-icon. Iconos con el acento del tema; estados seleccionados conservan contraste con su superficie.

Detalle de partido · Pulso

Jerarquía del análisis

La sugerencia lleva el acento del tema y peso 750. La proyección es secundaria: 16 px, peso 600 y texto neutro; en móvil estrecho baja a 14 px. Los iconos de contenido usan icon-accent: lima en oscuro y cobalto en claro.

La tabla contextual usa filas de 44 px, escudos de 22 px, padding de 16 px y un título propio. Se alinea con la tarjeta de recomendación.

Navegar entre partidos

El acceso «Ver partidos de [liga]» se ubica sobre el banner junto a Volver. Es un botón tonal, no un breadcrumb de texto. En móvil ocupa una fila completa. Abre los próximos encuentros de esa competición; el título del listado conserva la liga y al cerrar se devuelve el foco.

Los avisos usan texto de 14 px con interlínea de 22 px, tinta principal y un borde neutro visible. El botón tonal conserva un contorno de énfasis en reposo y hover. El acento identifica acciones e iconos; el mensaje se lee con tinta neutra.

El header global usa header-edge / header-shadow para separarse del menú lateral; no aplicar esa sombra a los headers de tarjetas.

Detalle · claro

Volver
Estimación estadística preliminar. Revisa la muestra y el rendimiento por mercado.

Detalle · oscuro

Volver
Estimación estadística preliminar. Revisa la muestra y el rendimiento por mercado.

Resultado del partido

Probabilidades y fuente. Las cuotas abren un diálogo de altura limitada con scroll propio; la comparación del modelo empieza cerrada.

Selección destacada

Solo cuando existe una recomendación. Si falta, Resultado del partido ocupa todo el ancho.

Jerarquía: Resumen → Mercados → Equipos y contexto → Cuotas y metodología. La primera fila de mercados comienza abierta; las herramientas secundarias, cerradas.

Posiciones en la liga

Una tarjeta sin vecina ocupa el 100%. Cada tarjeta conserva su altura natural, sin estirar a la vecina. La navegación de secciones permanece fija debajo del header al desplazarse. Los saltos dejan espacio para el header y la altura real de la navegación, incluidas sus dos filas en móvil. Los módulos opcionales sin cobertura se ocultan y no reservan espacio.

Cara a cara · últimos 5

El historial conserva una fila completa dentro de Equipos y contexto, tanto abierto como cerrado.

.p-detail-grid: distribución flexible con separación de 16 px. Una proyección de cero es un dato válido. Un error al cargar conserva un aviso con reintento; nunca equivale a falta de cobertura.

PULSO / ALINEACIONES

El once, de un vistazo.

Cancha compacta, equipos identificados y titulares junto a su distribución. Los suplentes y los cambios se consultan sin desplazar el contenido principal.

Distribución en cancha

Deportivo CentralLocal · 4-2-3-1
Atlético NorteVisitante · 4-2-3-1

Ubicación según la alineación publicada.

Deportivo CentralLocal · 4-2-3-1
Titulares11
  • 1A. RiveraPOR
  • 2D. VegaDEF
  • 3M. TorresDEF
  • 4J. RojasDEF
  • 5L. CastroDEF
  • 6P. DíazMED
  • 7S. LeónMED
  • 8N. SotoMED
  • 9C. SilvaMED
  • 10R. MoraMED
  • 11G. CruzDEL

DT A. Salas

Suplentes 3
  • 12E. MendozaPOR
  • 18M. SalazarMED
  • 20J. RuizDEL
Atlético NorteVisitante · 4-2-3-1
Titulares11
  • 1J. PérezPOR
  • 2S. ReyesDEF
  • 3M. GarcíaDEF
  • 4F. RamosDEF
  • 5D. ParraDEF
  • 6L. GómezMED
  • 7A. NavarroMED
  • 8P. OrtizMED
  • 9N. ÁvilaMED
  • 10C. MedinaMED
  • 11V. RíosDEL

DT C. Romero

Suplentes 3
  • 12E. MendozaPOR
  • 18M. SalazarMED
  • 20J. RuizDEL
Cambios durante el partido 1
  1. 67′
    ↑ Entra · M. Salazar↓ Sale · P. Díaz
    Deportivo Central

Datos ilustrativos. El componente compartido PulsoLineups.render genera la misma estructura en resultados históricos y alineaciones confirmadas. Campo de 400 px de alto; composición de dos columnas desde 1100 px de ancho disponible. En contenedores menores de 600 px, el campo gira a vertical (460 px) y las listas se apilan cuando es necesario. Superficies neutrales y acentos semánticos de Pulso en ambos temas.

PULSO 2.1 / INTERACCIÓN & IDENTIDAD

Se siente diferente.
Desde el primer clic.

Una tipografía con carácter. Controles planos, estados claros y densidad útil. Una marca que se reconoce en pequeño.

CONTROLES EN CONTEXTO

Tu próxima lectura del partido.

Demo

6 competiciones de ejemplo. Puedes buscarlas por nombre.

Prueba los controles. Esta demo no consulta ni guarda apuestas.

01 / ACCIONES
02 / CONFIRMACIÓN
03 / ERROR RECUPERABLE

Anatomía: etiqueta → superficie → valor → ayuda. Radio 12 px · altura 48 px · entrada de texto 16 px · foco exterior 3 px. El selector conserva su semántica HTML y su alternativa nativa.

01 / DIRECCIÓN

Energía con criterio.

Cuotario ayuda a comparar estadísticas, cuotas y contexto. Cada decisión visual debe facilitar esa lectura.

01

La señal primero

Resultado, tiempo, mercado y fuente forman la jerarquía. El ruido visual nunca compite con la información.

02

Confianza trazable

Una estimación muestra sus límites. Una cuota conserva su origen y hora. Un dato desconocido se reconoce.

03

Carácter consistente

La tinta guía las acciones en claro; el lima señala interacción y selección. Los estados mantienen su propio significado.

02 / IDENTIDAD

Cuotario es la marca.
Pulso es su lenguaje.

Una C circular, abierta y precisa. El punto independiente representa una señal dentro del contexto. Menos trazos, más reconocimiento: legible en un icono, un marcador o una firma.

Cuotario, logotipo sobre fondo oscuroVersión principal / fondos oscuros
Cuotario, logotipo sobre fondo claroVersión principal / fondos claros

Espacio de protección

Reserva al menos ¼ del ancho del símbolo en cada lado. No superponer marcadores ni insignias.

Tamaño y versiones

Símbolo: mínimo 24 px. Firma: mínimo 144 px. El archivo monocromo sirve para impresión a una tinta.

Integridad

No estirar, inclinar ni añadir sombras. La firma SVG contiene contornos vectoriales: no depende de una fuente instalada. No sustituir sus colores por estados de resultados.

03 / COLOR

Una identidad eléctrica.

Lienzo gris azulado #EEF0F3 en claro y grafito #0C0E14 en oscuro, sin brillo ambiental verde. Tarjetas blancas y acciones en tinta en claro. Signal Lime destaca Hoy y selección. Las tarjetas usan hover neutro. Métricas, sugerencias y Pro: cobalto en claro, lima en oscuro. El directo usa grafito. El cobalto se conserva en identidad, foco y acciones del tema oscuro.

01 / IDENTIDAD Y TEMA OSCUROElectric Cobalt#4F5BFF
02 / IDENTIDADSignal Lime#D8FF3E
03 / LIENZO OSCUROGraphite#0C0E14

El lima identifica Hoy y selección; el hover de las tarjetas usa una superficie neutra. No significa “apuesta segura” ni reemplaza los estados de éxito. El directo usa una señal rosa adaptada a cada tema, con texto y punto.

Roles semánticos

Cargando roles de color…

Primero el rol, después el valor

En componentes usa --p-action, --p-text o --p-danger. Las primitivas definen temas y piezas de identidad.

.mi-control {
  background: var(--p-action);
  color: var(--p-action-ink);
  border-radius: var(--p-radius-sm);
}

Contraste comprobable

Texto normal ≥ 4,5:1. Texto grande y límites de controles ≥ 3:1. Estos pares se calculan con el tema activo; no certifican toda la aplicación.

Escala de cobalto y reglas de uso

En oscuro, 600 define la acción primaria. En claro, la acción usa tinta. Pro y las sugerencias usan cobalto; las tarjetas tienen hover gris. En oscuro, la jerarquía de datos usa lima. Enlaces claros en oscuro y profundos en claro. Los divisores decorativos no sustituyen el borde de un campo.

04 / TIPOGRAFÍA

Una escala.
Nueve pasos.

Plus Jakarta Sans, autohospedada. Escala tipográfica de Pulso: tamaño, interlínea y tracking se eligen juntos. Pesos de producto: 400 lectura, 600 etiquetas y 700 títulos.

La jornada, en perspectiva.

La información importante se reconoce antes de abrir el partido.

68,4%   2,10   90′

Tokens --p-type-{paso}-{size | line | tracking}
PasoTamaño / líneaTrackingUso
112 / 16 px.0025emMetadatos breves
214 / 20 px0Filas, controles y texto de UI
316 / 24 px0Cuerpo y formularios
418 / 26 px−.0025emTítulos de tarjeta
520 / 28 px−.005emSecciones
624 / 30 px−.00625emMétricas
728 / 36 px−.0075emTítulo de página
835 / 40 px−.01emMarcador destacado
960 / 60 px−.025emMarketing

API CSS: class="p-type" data-size="2". Para cantidades, añadir cifras tabulares. El dashboard usa pasos 1–8; el paso 9 se reserva para la Home de marketing. No reducir todo el texto para ganar espacio: agrupar datos y quitar redundancia.

05 / COMPOSICIÓN

Espacio que organiza.

Ritmo de 4 px, con pasos de 8 px en la estructura. Agrupa lo relacionado y separa las decisiones.

Detalle · claro

Local · Visitante

Banner de partido · ejemplo

Cara a cara

El análisis empieza 16 px después del banner.

Detalle · oscuro

Local · Visitante

Banner de partido · ejemplo

Cara a cara

El análisis empieza 16 px después del banner.

.p-canvas usa --p-bg sin degradados globales. .p-match-header usa --p-space-12 arriba y --p-space-16 debajo; vacío no ocupa espacio. El mismo contrato aplica a móvil y escritorio.

4812162432486496

Móvil / < 600

4 columnas; margen exterior 12 px y separación 10–12 px. Una tarjeta por fila. Acciones al alcance; navegación inferior en la app.

Tablet / 600–1023

8 columnas, margen 24 px. Dos módulos cuando la información siga legible. No comprimir etiquetas.

Escritorio / ≥ 1024

Margen exterior 20 px y sidebar de 208 px. Mercados en dos columnas desde 1100 px y tres desde 1720 px; partidos en tres desde 1450 px y directo desde 1500 px. El contenido se adapta al ancho disponible.

Densidad y forma

Campos 48 px, botones 44 px y selección compacta 36 px con ratón / 44 px táctil. Radios: badge completo, control 12 px, tarjeta 16–20 px. Espaciado interior 12–16 px.

Capas

Base 0 → sticky 20 → menú 40 → overlay 100 → modal 110 → toast 120. El diálogo nativo usa la capa superior del navegador.

06 / EXPRESIÓN

Pequeños gestos.
La misma personalidad.

Iconos de contorno, retícula 24 × 24, trazo 1,75 px y extremos redondeados. Ningún emoji debe ser el único nombre de una acción.

InicioEn vivoAnálisisFavoritoBuscar

120 ms / respuesta

Hover y color. No desplazar contenido para indicar selección.

Movimiento reducido

Sin shimmer ni giros si se solicita menos movimiento. Los destacados no rotan solos.

07 / BIBLIOTECA

Diseñados para responder.

18 componentes base con CSS compartido. Prueba formularios, pestañas, ordenación y diálogos. Todas las acciones de esta sección son demostraciones locales.

01 / Botón

.p-button
Uso, estados y accesibilidad

Una acción primaria por decisión. Texto con verbo y objeto; enlace para navegar. Reposo, hover, presión, foco, deshabilitado y carga. Explicar el motivo de indisponibilidad. Iconos solos requieren nombre accesible.

<button class="p-button primary" type="button">Ver análisis</button>

02 / Badge

.p-badge
En vivo · 64′ActualizadoCobertura parcialErrorDestacado
Uso y estados

Etiqueta breve con texto, no botón ni filtro. Live requiere estado del proveedor. “Destacado” es editorial; no mide confianza. El color nunca comunica por sí solo.

03 / Campo de texto

.p-input

Uso, estados y accesibilidad

Label persistente y ayuda con aria-describedby. Validar al enviar y enfocar el primer error. Estados: vacío, completo, foco, inválido, deshabilitado. Placeholder nunca reemplaza etiqueta.

04 / Selector

.p-select

Hora de ejemplo: 15:00 · Lima

Uso y accesibilidad

Select nativo con menú personalizado donde el navegador admite base-select. En otros navegadores conserva el menú del sistema. Flechas, búsqueda por letra, Enter y Escape siguen siendo nativos. Listas largas: añadir búsqueda, como en el selector de torneos de la app.

05 / Checkbox

.p-check
Mercados de ejemplo
Uso y estados

Varias opciones; label completo pulsable. Checked y disabled nativos. Estado mixto solo en selección de grupos, nunca fingido con un icono.

06 / Radio

.p-check
Densidad preferida de ejemplo
Uso y accesibilidad

Una selección por grupo con legend. Flechas para recorrer las opciones nativas. No simular radios con botones sin semántica.

07 / Interruptor

.p-switch

Contexto visible en esta demostración.

Uso y estados

Preferencia binaria de efecto inmediato. Nombre estable. Encendido, apagado, foco y deshabilitado. No usar si necesita envío posterior.

08 / Pestañas

.p-tabs + .p-tab
El marcador, el minuto y la última actualización encabezan el análisis. Datos ilustrativos.
Teclado y estados

Flechas izquierda/derecha recorren y activan paneles locales. Home/End van al inicio/final. Tab entra al panel. Si una consulta es lenta, usar activación manual con Enter/Espacio.

09 / Tabla de datos

.p-table
Comparación ilustrativa · sin cuotas operativas
SelecciónCuota registradaCobertura
Ejemplo A64%1,80Parcial
Ejemplo B71%—Sin cuota
Ejemplo C58%2,10Parcial

Pulsa el encabezado para ordenar la probabilidad.

Uso y accesibilidad

Caption, scope y cifras alineadas. aria-sort indica orden. En móvil, scroll dentro de la tabla sin romper semántica convirtiendo celdas en bloques.

10 / Aviso

.p-alert
Cobertura parcialFaltan alineaciones confirmadas. La estimación puede cambiar.
Uso y estados

Información, advertencia o error con título y siguiente paso. role=alert solo para un error urgente nuevo; una nota persistente no debe interrumpir.

11 / Estado vacío

.p-empty
No hay partidos con estos filtrosCambia la fecha o amplía las ligas seleccionadas.
Uso y variantes

Distinguir primera visita, ausencia de resultados y error. No mostrar ceros cuando faltan datos. Ofrecer una acción de recuperación si existe.

12 / Carga

.p-skeleton

Ejemplo de carga de estadísticas…

Uso y accesibilidad

Reservar tamaño final. Skeleton con aria-hidden; contenedor real con aria-busy. Mensaje de carga una sola vez; terminar ante respuesta o error.

13 / Acordeón

.p-accordion
¿Qué significa “estimada”?

Es una salida del modelo basada en los datos disponibles; no garantiza el resultado del encuentro.

¿Cómo se compara con el resultado?

La vista histórica muestra el resultado real junto a la proyección previa.

¿Qué pasa cuando faltan datos?

El mercado indica que no hay datos disponibles.

Uso y accesibilidad

Details/summary nativos para ayuda secundaria. Las advertencias importantes permanecen visibles. Enter o Espacio cambia el estado. Agrupar acordeones consecutivos con .p-accordion-stack: separación de 16 px mediante --p-space-16, tanto abiertos como cerrados, en ambos temas y en móvil.

14 / Diálogo

.p-dialog

Foco contenido, Escape y regreso al activador.

Uso y estados

Una decisión concreta con título y contexto. Dialog nativo con showModal. Foco en la opción segura. No anidar diálogos ni cerrar por clic accidental en el fondo.

15 / Confirmación breve

.p-toast
Uso y accesibilidad

role=status sin mover foco. Permanece hasta cerrarla. Los errores que requieren acción permanecen junto al campo o contenido afectado.

16 / Métrica

.p-metric
Probabilidad estimada · ejemplo64%Modelo ilustrativo · no validado para apostar
Uso y anatomía

Etiqueta, valor, unidad y contexto. Tendencias solo con periodo comparable y muestra suficiente. — y causa cuando falta el dato.

17 / Partido

.p-match
Liga de ejemplo64′ · En vivo
Local2 : 1Visitante
Datos ilustrativos
Uso y estados

Competición, equipos, horario/marcador, estado y acción. Programado, directo, descanso, finalizado, aplazado, atrasado. No anidar botones en una tarjeta pulsable.

18 / Lectura de mercado

.p-pick
Estimación ilustrativa

Más de 8,5 córners

Local vs. Visitante · partido de ejemplo

Prob. estimada
64%
Cuota registrada
—
Estado
Sin comparación
No hay una cuota vigenteLa lectura del modelo no basta para calcular una ventaja frente al mercado.
Uso y anatomía

Mercado y línea, partido, estimación, versión del modelo, cobertura, cuota con fuente/hora y estado. Sin precio no hay comparación. Retirar acción si el mercado está suspendido o desactualizado.

08 / DATOS DEPORTIVOS

Tres datos.
Tres significados.

Lo ocurrido, lo estimado y el precio de una casa nunca deben parecer intercambiables.

OBSERVADO

6 córners

Estadística reportada. Conservar proveedor, minuto, hora de recepción y posibles correcciones.

ESTIMADO

9,2 al final

Salida ilustrativa. Añadir incertidumbre, variables ausentes y versión. Sin precisión falsa.

PRECIO

Cuota 1,80

Precio ilustrativo con casa, mercado, línea y captura. No es la cuota mínima del modelo.

Contrato de estados del dato
SituaciónPresentaciónComportamiento
Sin dato— · No disponibleNo sustituir por cero
Feed atrasadoHora + avisoConservar contexto; suspender acción de mercado
Mercado suspendidoMercado suspendidoNo mostrar precio como operativo
Muestra insuficienteSin estimación fiableNo inventar porcentaje
Fuente en conflictoDato por confirmarMostrar origen; no afirmar resultado

La vigencia depende del proveedor, mercado y frecuencia contratada. Es configuración del producto con pruebas; no un umbral universal definido por diseño.

09 / VISUALIZACIÓN

Que se entienda
sin descifrar colores.

Etiquetas, unidades y equivalente textual. Escalas comunes para comparar; rangos solo si el modelo realmente los produce.

Remates · ejemplo ilustrativo
Local
12
Visitante
8

Escala común: 0–16 remates. Local 12; visitante 8.

Reglas para gráficas

  • Barras desde cero; no exagerar diferencias.
  • Cobalto para local; visitante con otro color y trama.
  • Tooltip complementario, nunca único acceso.
  • Incertidumbre con banda, intervalo y método.
  • No usar una torta si las categorías no suman 100%.
10 / VOZ

Directos. Útiles.
Sin promesas vacías.

Qué se sabe, qué falta y qué puede hacer la persona. Criterio sin presión para apostar.

USAR

“Faltan las alineaciones.”

“La estimación puede cambiar cuando se confirmen.”

“Cuota registrada a las 15:42. Comprueba el precio actual.”

EVITAR

“Apuesta ganadora garantizada.”

“Corre, no puedes perder esta oportunidad.”

“70% de acierto verificado”, sin evaluación que lo sostenga.

Formatea números con Intl según idioma y moneda. Almacena UTC y muestra zona local explícita. Si el precio es S/19 por 30 días con pago único, dilo así; no lo presentes como renovación automática.

11 / ACCESIBILIDAD

Parte de la definición
de terminado.

Objetivo: WCAG 2.2 AA. Revisar ejemplos y pares de color no certifica todas las pantallas heredadas.

Percepción y lectura

  • Contraste en ambos temas y estados.
  • Zoom 200% y reflow hasta 320 CSS px.
  • Texto, forma o icono además del color.
  • Alt útil; logos decorativos junto al nombre con alt vacío.

Interacción y recuperación

  • Teclado completo y foco visible sin quedar oculto.
  • Objetivo táctil 44 px; compacto solo donde encaje.
  • Escape y regreso al activador en diálogos.
  • Error asociado al campo, con solución.
  • Directo sin robar foco ni anunciar cada segundo.

Referencias: WCAG 2.2 › y WAI-ARIA APG ›.

PULSO / ADMINISTRACIÓN

Evolución del modelo.

Filtros, métricas comparables y control de publicación. Esta demostración usa datos ficticios; exportación y activación están deshabilitadas. La app entrega datos reales y verifica permisos en el servidor.

Contrato: PulsoModelMonitor.mount(host, {request, headers}). Tokens compartidos, foco visible, carga anunciada, error recuperable y tablas con desplazamiento horizontal en móvil. Los filtros descartan respuestas obsoletas; el color siempre acompaña un signo o texto.

12 / GOBERNANZA

Un sistema vivo.
Con reglas claras.

Cuotario consume los mismos tokens, componentes e interacciones que esta documentación. Las mejoras de diseño se definen aquí y llegan a la app desde los archivos compartidos. La lógica de partidos, cuentas y apuestas permanece en el producto.

  1. ProponerProblema, pantallas afectadas y por qué no basta una pieza existente.
  2. DiseñarAnatomía, variantes, estados, temas, móvil, teclado y casos sin datos.
  3. ValidarRevisión de producto, diseño y desarrollo, con comportamiento real.
  4. PublicarActualizar fuente, ejemplos, cambios y guía de migración.

Patch / 3.0.1

Corrección compatible. Documentar impacto.

Minor / 3.1.0

Nueva pieza compatible, validada en una pantalla real.

Major / 3.0.0

Cambiar contratos requiere mapa de sustitución y periodo de migración.

Madurez de esta entrega
ÁreaEstadoAlcance
Tokens e identidadCompartidosJSON, temas y adaptación global
Componentes p-*En usoBadges, mercados, selección, ticket y tarjetas en app y documentación
Controles e interacciónIntegrados en CuotarioBotones, campos, selectores, búsqueda con teclado, filtros, diálogos y avisos
Pantallas dinámicasInicialización compartidaContenido insertado por la app: foco, acordeones, errores de campos y carga
Composiciones de productoAdaptadores de layoutJornada, directo, detalle, ticket, cuenta, Pro y administración; datos y permisos propios de la app
Biblioteca FigmaNo publicadaMapeo y entrega documentados
SEMÁNTICA / RESULTADOS

Victoria en verde.
El estado, siempre escrito.

El verde Mint comunica victoria, acierto o un balance realizado positivo. El lima sigue siendo selección y énfasis de marca. Una probabilidad alta no es un resultado ganado.

Modo claro

Últimos resultados

VVDED
V · VictoriaE · EmpateD · Derrota
✓ Ganada✗ Perdida○ PendienteCash out
✓ AcertóCobertura parcialActualización disponible

Modo oscuro

Últimos resultados

VVDED
V · VictoriaE · EmpateD · Derrota
✓ Ganada✗ Perdida○ PendienteCash out
✓ AcertóCobertura parcialActualización disponible

Un estado, una función

Verde: victoria / acierto. Rose: derrota / fallo. Neutro: empate, pendiente, sin dato o cash out. El resultado monetario de un cash out puede ser positivo, negativo o cero; su etiqueta no implica victoria.

Los estados en curso mantienen “Va ganando” / “Va perdiendo” y nunca se presentan como liquidados. La identidad local/visitante en gráficas no indica éxito o fracaso.

Lectura y accesibilidad

Las fichas compactas miden 24 × 24 px y son informativas. Conservan V/E/D, nombre accesible y tooltip. Las filas del historial son botones accesibles con teclado.

El texto sobre cada ficha supera 4.5:1 en ambos temas. Los fondos semánticos tienen su propia pareja de texto; no se combina texto blanco con cualquier tono de la escala.

<span class="p-result" data-result="win" role="img" aria-label="Victoria" title="Victoria">V</span>
<span class="p-badge success">✓ Ganada</span>
PULSO EN CUOTARIO

El mismo componente.
El mismo comportamiento.

Una pieza se valida en el catálogo y en una pantalla real. No hace falta incluir las 42 piezas en cada pantalla: cada necesidad usa el contrato apropiado.

Una fuente visual

Tokens → controles y biblioteca → componentes deportivos → composición de Cuotario. Los adaptadores distribuyen el contenido; no inventan colores ni estados.

Interacción compartida

PulsoUI gestiona foco, capas, búsqueda, acordeones, validación y carga. El producto entrega datos reales y conserva sus permisos y acciones.

En el resumen de un partido, Ganador del partido · 1X2 y Doble oportunidad son dos tarjetas de acordeón independientes, abiertas al inicio. Se muestran lado a lado en escritorio y apiladas en móvil, con filas compactas y sin igualar alturas al cerrar una tarjeta. Las cuotas se etiquetan como justas, sin margen; la comparación con el modelo sigue siendo secundaria.

La navegación del detalle utiliza .p-tabs + .p-tab con subrayado activo y queda fija bajo la cabecera. PulsoSectionNav sincroniza aria-current="location" con la sección visible al desplazarse, incluso al cambiar la altura de un acordeón. Es navegación por secciones continuas: no oculta contenido ni cambia el foco durante el scroll. En móvil mantiene una fila desplazable y revela el tab activo. Tab y Enter permiten navegar; las flechas, Inicio y Fin mueven el foco. Respeta movimiento reducido.

Demos identificadas

Las simulaciones viven en data-p-demo. No se conectan a cuentas, pagos ni partidos. Los estados de carga de la app reflejan sus peticiones reales.

Contrato de integración
NecesidadAPI compartidaResponsabilidad del producto
Contenido dinámicoPulsoUI.observe(root)Insertar HTML semántico; evitar doble inicialización
Diálogo o panelopenLayer / closeLayerTítulo, disparador y callback de cierre
Búsquedacombobox(input, list, options)Consulta, resultados y descarte de respuestas obsoletas
FormulariofieldError / setBusyValidación y confirmación del servidor
Acordeóndata-p-disclosure / setDisclosureCarga de datos al recibir pulso:disclosure
Mensaje y confirmaciónnotify / prompt / confirmTexto, decisión y persistencia explícita

Carga pulso-runtime.js antes de pulso-library.js. Prueba ambos temas, teclado y móvil. Motion reducido conserva información; los estados nunca dependen solo del color.

13 / BENCHMARK · REVISADO 26 SEP 2026

Menos contornos.
Más jerarquía.

Selección revisada visualmente desde la búsqueda que compartiste. La fecha corresponde a la consulta, no a la publicación de cada shot. Son referencias visuales, no evidencia de conversión comercial.

Pulso define los contratos visuales y de interacción del producto. Los componentes usan HTML, CSS y JavaScript nativos.
SEMÁNTICA / ESTIMACIONES

Probabilidades de un vistazo.

Verde desde 78%; amarillo entre 70% y 77%. Porcentaje en negrita, visible sin depender del color. No se muestran recomendaciones rojas.

Modo claro

Sin señal

Modo oscuro

Sin señal

Un criterio compartido

PulsoProbability.signal / badge / legend se usa en mercados, selección destacada y picks. Solo acepta probabilidades válidas entre 0 y 1 y exige un mínimo sin redondear de 70%. El nivel visual se asigna al porcentaje entero mostrado, para que un mismo número nunca cambie de color.

Por debajo del mínimo, el mercado conserva su proyección y muestra “Sin señal”, sin línea sugerida ni botón de ticket. No se elimina el histórico ni se aplica este filtro a la distribución 1X2. El porcentaje expresa una estimación; el verde no significa victoria, rentabilidad ni garantía.

PATRÓN / DASHBOARD

Picks a primera vista.

Entre el banner y los próximos partidos. Tres tarjetas en escritorio, dos en tablet y una con avance visible en móvil. Datos ilustrativos.

Contrato compartido

PulsoPicks.render(root, options) recibe datos ya consultados y callbacks para analizar, ver todos y reintentar. El botón + usa p-selection del ticket. Sin avance automático, peticiones por tarjeta ni mezcla de probabilidades del modelo con cuotas reales.

Tab recorre acciones. Con foco en la fila, ← / → desplazan una tarjeta; Inicio / Fin recorren los extremos. Los controles se desactivan en los límites. El movimiento respeta la preferencia del sistema. Al iniciar el partido, la app retira el pick del resumen y del listado.

PATRÓN / DESCUBRIMIENTO

Primero el dato. Después la cuenta.

Google → home o liga → explorar el dashboard → acceso voluntario. Calendario y análisis públicos; historial guardado con Pro. Nunca abrir un modal de registro al llegar desde el buscador.

Contrato compartido

PulsoDiscovery.renderInvite utiliza tokens, botones y foco de Pulso. El aviso se puede cerrar durante la sesión; desaparece al iniciar sesión. El diálogo solo aparece tras una acción explícita, conserva la vista y el ticket, ofrece seguir sin cuenta y distingue registro gratuito de acceso Pro. Guardar requiere una confirmación nueva después de entrar.

Home y ocho ligas tienen HTML público, canonical y enlaces reales. Administración y documentación permanecen fuera del índice. No hay contenido especial para robots ni páginas automáticas por cada combinación de filtros.

PATRÓN / DESCUBRIMIENTO

La puerta de entrada.

Home pública de Cuotario: propuesta, ejemplo explícito, cobertura, metodología, planes y preguntas. El contenido se sirve en HTML en español e inglés.

Composición y comportamiento

pulso-marketing.css y pulso-hero.css consumen tokens, fuente y botones de Pulso. El hero utiliza la fotografía de estadio editada para Pulso como fondo, con un velo oscuro para mantener el contraste del texto y el ejemplo de producto. El recurso se sirve localmente en WebP con selección responsive y prioridad alta. Negro para el escenario, lima para la sugerencia y cobalt para la profundidad. En móvil se apilan el mensaje y la selección, con un recorte del estadio que mantiene visible la cancha. El ejemplo tiene margen lateral propio en escritorio y queda centrado en móvil. Tarjeta y selector comparten una superficie de vidrio con tinte ink, reflejo sutil, desenfoque de 18 px y borde claro. El texto y el estado seleccionado permanecen opacos. Sin soporte de backdrop-filter, con transparencia reducida o mayor contraste, se utiliza una superficie sólida legible.

El selector Córners / Tiros al arco / Tarjetas utiliza radios nativos: funciona sin JavaScript, admite flechas y conserva foco visible. Solo se muestra un mercado cada vez. Cambiarlo no consulta proveedores ni modifica un ticket. Las cifras siempre llevan la etiqueta de ejemplo ilustrativo.

Fondo estático; entrada del texto con el token --p-motion-page, una sola vez. Cambio de ejemplo: token --p-motion-enter. Sin bucles, parallax ni rotación automática. Con prefers-reduced-motion no se anima. La fotografía de fondo es decorativa para lectores de pantalla; la información está en HTML.

pulso-story.html y pulso-story.css añaden tres escenas de producto: histórico, contexto y ticket. Las tres escenas comparten fondo claro, acentos cobalt, la misma altura, cabecera y separadores. El ticket muestra una selección alineada en una fila, sin capas superpuestas ni inclinación; la entrada conserva solo una traslación vertical suave. Los gráficos son ilustrativos; todos los títulos, explicaciones y límites se sirven en HTML en ambos idiomas. El recorrido de metodología utiliza radios nativos: Tab entra al grupo y las flechas cambian el paso, con foco visible y sin JavaScript ni consultas a proveedores.

pulso-story.js activa entradas una sola vez cuando la sección llega a pantalla. Las barras crecen y los trazos se dibujan en 480–800 ms; la transición de paso usa --p-motion-page. No hay carrusel automático, bucles ni cambios de datos. Con movimiento reducido no se anima. Sin JavaScript se conserva el contenido y la interacción. En móvil las escenas se apilan y el recorrido usa tres controles compactos sobre la vista previa.

El bloque de planes utiliza una fotografía de estadio decorativa, servida en WebP. El desenfoque de 6 px se aplica solo a la imagen; un velo ink mantiene contraste para títulos blancos, texto secundario claro y CTA lima. El contenido y los controles permanecen nítidos. El fondo es estático y se sustituye por una superficie sólida cuando se solicita contraste reforzado o transparencia reducida.

La navegación y los CTA funcionan como enlaces. Los precios provienen de configuración. Las cifras de la vista previa son ilustrativas y nunca se presentan como resultados reales.

14 / RECURSOS

Del diseño
al producto.

Archivos versionados para trabajar desde la misma base. El proyecto conserva identificadores internos durante la migración.

Entrega de diseño

En Figma, separar primitivas y semánticos; modos Dark/Light y componentes con variantes y estados. Vincular medidas y colores a variables. Entregar anatomía, flujo, límites y enlace a este manual.

El repositorio contiene la fuente y reglas. Todavía no existe una biblioteca Figma sincronizada.

Entrega de desarrollo

python scripts/build_pulso_tokens.py
python scripts/build_pulso_tokens.py --check
node tests/ui-navigation.cjs

Editar pulso.tokens.json, regenerar CSS y revisar temas. No editar directamente el CSS generado.

Una base compartida.
Un producto con Pulso.
Volver al inicio ⌃

Eliminar ejemplo

Esta es una demostración del componente. No se eliminará ningún dato de tu cuenta.