Componentes

Skills
/galilei-brand
02Buttons

Sistema de botones

6 variantes según la acción · 3 tamaños · 5 estados. Si algo es clickeable y ejecuta una acción, es un button. Para etiquetar sin acción, ve a Chips.

Variantes

Primary · acción principal

Uno por vista. El CTA que avanza el flujo.

Secondary · acción alterna

Va junto a un Primary. Acciones secundarias.

Tertiary · neutral sin marca

Acciones útiles que no compiten con Primary ni son brand-affiliated. Compartir, cancelar, cerrar, copiar URL, toolbar actions.

Ghost · soft tint lima

Navegación en contexto: "ver más", "continuar". Tint lima 6% por default. En hover sube a 14% + glow + la flecha se mueve 3px.

Destructive · acción irreversible

Borrar, revocar, archivar. Úsalo con cuidado.

Soft · acción compacta con ícono

Acciones inline en callouts, cards y tooltips. Tint lima + borde sutil + ícono. Tamaño small por default.

Tamaños

Small · 32px alto · 13px text

Tablas, filtros e inline en cards densas.

Medium · 40px alto · 14px text · default

CTAs standard, forms, modales.

Large · 48px alto · 16px text

Hero CTAs, landing, momentos clave.

Estados

Hover: aclara + glow lima sutil. Focus: glow lima intenso, más fuerte que hover para diferenciarlo. Active: scale(0.98) + brand más oscuro. Disabled: gris neutral, sin marca.

Specs técnicastoken level · click para expandir
Variante Background Border Text Hover
Primary #B3F131 none #0E1012 · 600 glow lima 30%
Secondary #FFFFFF none #0E1012 · 600 bg #F0F2F5 + glow white sutil
Tertiary #292F36 none #F0F2F5 · 600 bg #353C44 sin glow
Ghost rgba(lima, 0.06) none #B3F131 · 600 bg lima 14% + glow + arrow slide 3px
Destructive #FB7E7E none #0E1012 · 600 glow error 25%
Soft rgba(lima, 0.08) 1px rgba(lima, 0.15) inset #B3F131 · 600 bg lima 14% + border 25%

Cuándo SÍ vs cuándo NO

Sí usa button
  • CTA principal de la vista. Uno solo, en Primary, para avanzar el flujo.
  • Acción alterna junto al Primary. Secondary cuando hay segunda opción legítima.
  • Acciones neutrales sin marca. Tertiary para compartir, cancelar, cerrar, toolbar.
  • Navegación contextual. Ghost para "continuar", "ver más" en contexto.
  • Acciones destructivas o irreversibles. Destructive con confirmación obligatoria.
  • Inline compacto con ícono en cards. Soft tamaño small para acciones secundarias en callouts.
No usa button
  • 2 Primary en la misma vista. Solo uno: el CTA que avanza el flujo. Si hay dos acciones iguales, una pasa a Secondary.
  • Destructive sin confirmación. Nunca borres al primer click. Siempre con modal o "deshacer" inline.
  • Ghost para acciones críticas. Ghost es para contexto. Si la acción importa, usa Primary o Secondary.
  • Botón sin label para acciones complejas. Solo ícono sirve para acciones obvias. Si hay duda, agrega texto.
  • 5 estados sin definir disabled. Si puede estar inactivo, define disabled. No lo dejes en "default + opacidad".
03Chips

Etiquetas de estado y categoría

Pills compactos que etiquetan algo: una superficie, un estado, una categoría. No ejecutan acción, solo informan. Dos familias: structural (punto con el color de la superficie) y semantic (ícono + color del estado). Más chicos que un button.

Variantes

Structural · familia surfaces

Identifican el tipo de superficie. El dot con el color real de la surface ES la información: un dot oscuro ya te dice que es Panel 1 sin leer el texto. Se usan en docs, layouts anotados y mockups técnicos. El sistema completo de superficies vive en Fondos.

Base Outline Panel 1 Panel 2 Panel 3 Frosted Mystery

Semantic · estado y categoría

Comunican estado: completado, pendiente, error, beta, nuevo. Van con ícono Phosphor porque el ícono se lee más rápido que un color solo. El fondo lleva un tint sutil del color y el texto va en el color del estado.

Completado Pendiente Atención Falló Beta Nuevo Borrador

Casos: badges en tablas, indicadores beta/new en cards, prioridad de tareas, validación inline de forms. La anatomía del chip semántico admite además un ícono Phosphor líder antes del label en lugar del dot · reusa snc-chip + token semántico + snc-chip-icon, mismo color, sin gradiente ni glow.

Validado Bloqueado En revisión Acción requerida Beta Borrador

Anchor · navegación intra-página

Tercera familia. A diferencia de structural y semantic (que solo etiquetan), los anchor chips son clickeables: llevan a un ancla de la misma página. Tienen estado hover y activo (scroll-spy). Se usan en el TOC interno de Superficies y como nav de sub-secciones largas. Badge de letra o número opcional al inicio.

Las tres familias: structural usa dot del color de surface (no clickeable) · semantic usa ícono + tint del estado (no clickeable) · anchor usa badge de letra/número (clickeable + scroll-spy). Mismo pill 100px, mismo body 500 12-13px, sentence case.

Anatomía

Chip vs Button

A primera vista se parecen (ambos son pills). La diferencia es la función: un chip etiqueta, un button actúa. Eso cambia su escala, peso y comportamiento.

Panel 2
Chip
  • 10px mono · weight 500 · UPPERCASE
  • Height 22px · padding 0 10px
  • Pill radius 100px (mini-button shape)
  • Dot indicator del color real de la surface
  • Bg neutral muy sutil · sin borde
  • Letter-spacing 0.08em
  • No estados interactivos
Button
  • 14px text · weight 600
  • Padding 10px × 20px
  • Height 40px (touch target)
  • Bg sólido (lima primary)
  • Sin borde (filled)
  • Radius 100px (pill)
  • 5 estados (default → disabled)

Regla del texto

Máximo 2 palabras por chip. El chip vive en 1 línea, sin wrap. Si una palabra sola es larga (10+ chars), busca un sinónimo más corto. Si necesitas explicar más, ya no es chip · es note callout. Válidos: Completado, Beta, En progreso. Inválidos: Falló por error de red, Pendiente de revisión.

Specs técnicastoken level · click para expandir
Propiedad Valor
FontSpace Grotesk · font-mono · weight 500
Font size10px · UPPERCASE · letter-spacing 0.08em
Padding0 10px · ícono interno gap 6px
Border-radius100px pill
Height22px · single line, sin wrap
Bg defaultTint 5-8% del color de surface o del estado semántico
Color defaultColor del estado (semantic) o text-secondary (structural)
HTML<span> con .snc-chip + token (.snc-chip-r2, .snc-chip-success, etc.)
EstadosEstático · solo anchor chip tiene hover + active (scroll-spy)

Cuándo SÍ vs cuándo NO

Sí usa chip
  • Para el estado de algo: "Completado", "Pendiente", "Falló".
  • Para una categoría corta: "Beta", "Nuevo", "Premium".
  • Para identificar una superficie en docs: chip structural con dot de color.
  • Para la prioridad en tablas o cards de tareas.
  • Para señalar filtros activos en una lista (sin click).
No usa chip
  • Como botón clickeable. Si ejecuta acción, usa button.
  • Con texto largo. Máximo 1-2 palabras, si no es note callout.
  • Mezclando colores semánticos sin razón. Solo si comunican estados reales del mismo objeto.
  • Sin dot ni ícono. Un chip sin indicador es solo un label.
  • Structural con ícono. Llevan dot del color de la surface, nunca ícono.
04Code tags

Tags de valores técnicos

Los buttons actúan, los chips etiquetan, los code tags muestran valores técnicos literales: hex, tokens, paths, class names, comandos. Rectangulares (no pill), tipografía mono, padding compacto.

Variantes

#B3F131 Default · hex, paths, class names, comandos, props y versiones
--g-brand Accent · tokens del brand, valores de marca destacados

Hex inline: usar #0E1012 como Panel 1 (estructura del app).

Token CSS: el accent vive en --g-brand · siempre via token.

Class name: la card de doc usa .snc-r2 internamente.

Path: ver ejemplo completo en /identidad-visual/color/.

Comando: instalar con npm install @galilei/sdk.

Prop name: el componente acepta size=24 y weight="fill".

Versión: requiere @phosphor-icons/core ^2.0.

Env var: configura GALILEI_API_KEY antes de correr.

Specs técnicastoken level · click para expandir
Propiedad Valor
FontSpace Grotesk · font-mono · weight 400
Font size11px (default) · 0.82em dentro de párrafo
Padding3px 7px compacto inline
Border-radius4px rect (no pill, diferencia de chip)
Bg defaultrgba(255,255,255,0.05) neutral 5%
Bg accentrgba(179,241,49,0.08) lima 8%
Color defaultvar(--text-secondary)
Color accent#B3F131 lima brand
HTML<code> con clases .code-tag o .code-tag-accent
EstadosEstático · sin hover, focus, active

Cuándo SÍ vs cuándo NO

Sí usa code tag
  • Hex inline. #0E1012 dentro de un párrafo de docs.
  • Tokens CSS. var(--g-brand) con la variante accent.
  • Paths y URLs. /identidad-visual/color/.
  • Class names. .snc-r2, .btn-primary.
  • Comandos shell. npm install, git status.
  • Props de componentes. size=24, weight="fill".
  • Versiones de paquete. @phosphor-icons/core ^2.0.
  • Env vars. GALILEI_API_KEY.
No usa code tag
  • Como chip. Si etiqueta estado ("Completado", "Falló"), usa chip.
  • Dentro de un heading. Solo viven inline en párrafos, nunca en títulos.
  • Como oración completa. Es valor literal corto, no frase entera.
  • Envolviendo paths largos. Si no cabe en línea, ya no es code tag.
05Note callouts

Notes inline contextuales

Notas inline al lado del contenido principal: anatomías, excepciones, tips, aclaraciones. La clave: fondo flat al 5% con el color del estado, sin gradient. Si necesitas algo más prominente, usa Tinted (tab Fondos).

Variantes

Accent (lima) default para meta-notes del sistema: anatomías, excepciones, footer notes.

Info tips contextuales, explicaciones extra, aclaraciones.

Success notas positivas inline, confirmaciones, "todo bien aquí".

Warning precauciones · "revisa esto antes de seguir".

Error bloqueos o anti-patrones · "esto no se hace nunca".

Neutral gris muted · cuando ni lima aplica, solo separación visual sutil.

Anatomía

Regla del eyebrow

El título es la categoría, no la pregunta. El eyebrow (la palabra en uppercase arriba del callout) dice de qué trata el contenido. Por eso nunca lleva dos puntos al final · sobra. Escribe Error, no Error:. Si el título no dice nada por sí solo, el problema es el título, no la puntuación · repiénsalo.

Specs técnicastoken level · click para expandir
Propiedad Valor
Bgrgba(C, 0.05) flat full-coverage · sin gradient
Padding14px 18px
Border-radius10px
FontSpace Grotesk regular · 0.82rem · line-height 1.55
Colortext-secondary · strong en text-primary
HTML<p> o <aside>
EstadosEstático · sin hover/active

Cuándo SÍ vs cuándo NO

Sí usa note
  • Meta-notes inline contextuales. Aclaraciones cortas al lado del contenido principal.
  • Anatomías explicadas dentro de docs. El "cómo funciona esta pieza" en 1-3 líneas.
  • Excepciones a una regla. "Salvo en este caso", "ojo con esto".
  • Tips breves (1-3 líneas). Confirmaciones, recordatorios, side-info útil.
  • Side-info que no merece sección propia. Demasiado chico para un heading, demasiado importante para borrar.
No usa note
  • Para textos largos. Es un párrafo breve (1-3 líneas). Si necesitas más, es una sub-sección con su propio heading.
  • Como card de estado. Si tiene título + descripción + bullets, eso es Tinted (superficie). El note callout es inline, no card.
  • Apilados uno tras otro. 3 seguidos hacen ruido. Si hay muchas notas del mismo tema, agrúpalas en un párrafo o una lista.
  • Para acciones. Si lleva un button adentro pidiendo click, eso ya es un banner o un Tinted con CTA.
  • Variante semántica al azar. El color DEBE coincidir con la intención: error = rojo, success = verde. No uses warning porque "se ve bien".
06Toasts

Feedback efímero

5 variantes semánticas + Achievement para gamification. Auto-dismiss con pausa en hover, slide-in desde la derecha, stacking vertical. API global · window.toast.{variant}(title, opts) disponible en cualquier página.

Variantes

Info

Tips contextuales, nuevas features, "beta activa".

Success

Confirmaciones de acción, "guardado", sync ok.

Warning

"Revisa esto antes de seguir". Dura más (6s).

Error

Validación rota, fallo de red. Soporta acción "Reintentar".

Neutral

Sin emoción · sync, status sistémico.

Specs técnicastoken level · click para expandir
Propiedad Valor
Posiciónfixed top: 24px · right: 24px · stack vertical, gap 8px
Min / Max width320px a 480px · full-width bajo 640px
Padding14px 16px 14px 14px
Border-radius12px
BackgroundPanel 2 + tint 6% del color semántico (color-mix oklab)
Shadow0 8px 24px rgba(0,0,0,0.40) · depth para flotar
EntertranslateX(110% → 0) + fade · 240ms ease-out-quart
Exitfade + drift 20px · 180ms ease-in
Duracióninfo/success/neutral 4.5s · warning/error 6s · achievement 5s
Hoverpausa el timer · reanuda 2s al salir
ARIAerror/warning → role="alert" + assertive · resto status + polite

API

toast.success('Misión guardada');
toast.info('Beta activa', { body: 'La vista de leaderboards está lista' });
toast.error('No pudimos guardar', {
  body: 'Revisa tu conexión',
  action: { label: 'Reintentar', onClick: () => save() }
});
toast.achievement('¡Nueva racha!', { body: 'Llevas 7 días seguidos' });

// opts: { body?, action?, duration? }
// duration: 0 = no auto-dismiss · null = default de la variante

Cuándo SÍ vs cuándo NO

Sí usa toast
  • Feedback efímero (4-6s) de una acción del usuario.
  • Confirmaciones positivas: "guardado", "completado", "sincronizado".
  • Unlocks de gamification con la variante achievement.
  • Notificaciones del sistema: "pago procesado", "sync terminado".
  • Errores recuperables con acción de "Reintentar".
No usa toast
  • Información que el usuario necesita revisar después · usa banner o note callout.
  • Errores que bloquean el flujo · usa modal con CTA.
  • Contenido extenso (más de 2 líneas) · usa modal o sub-página.
  • Validación inline de un campo · usa form error helper debajo del input.
  • Mensajes persistentes sin tiempo definido · usa banner top-of-page.

Achievement es exclusivo de Galilei. El glow pulse al entrar + sparkle icon rotando + tint lima son el sello visual de gamification. Úsalo SOLO para unlocks, rachas, logros conseguidos · nunca para feedback genérico. Las otras 5 variantes (info/success/warning/error/neutral) son el sistema base que cualquier app de Galilei usa.