Info
Tips contextuales, nuevas features, "beta activa".
/galilei-brand 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.
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.
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.
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.
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.
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.
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.
| Propiedad | Valor |
|---|---|
| Font | Space Grotesk · font-mono · weight 500 |
| Font size | 10px · UPPERCASE · letter-spacing 0.08em |
| Padding | 0 10px · ícono interno gap 6px |
| Border-radius | 100px pill |
| Height | 22px · single line, sin wrap |
| Bg default | Tint 5-8% del color de surface o del estado semántico |
| Color default | Color del estado (semantic) o text-secondary (structural) |
| HTML | <span> con .snc-chip + token (.snc-chip-r2, .snc-chip-success, etc.) |
| Estados | Estático · solo anchor chip tiene hover + active (scroll-spy) |
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).
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.
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.
| Propiedad | Valor |
|---|---|
| Bg | rgba(C, 0.05) flat full-coverage · sin gradient |
| Padding | 14px 18px |
| Border-radius | 10px |
| Font | Space Grotesk regular · 0.82rem · line-height 1.55 |
| Color | text-secondary · strong en text-primary |
| HTML | <p> o <aside> |
| Estados | Estático · sin hover/active |
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.
Tips contextuales, nuevas features, "beta activa".
Confirmaciones de acción, "guardado", sync ok.
"Revisa esto antes de seguir". Dura más (6s).
Validación rota, fallo de red. Soporta acción "Reintentar".
Sin emoción · sync, status sistémico.
Único de Galilei · gamification. Glow pulse + sparkle rotando para unlocks.
| Propiedad | Valor |
|---|---|
| Posición | fixed top: 24px · right: 24px · stack vertical, gap 8px |
| Min / Max width | 320px a 480px · full-width bajo 640px |
| Padding | 14px 16px 14px 14px |
| Border-radius | 12px |
| Background | Panel 2 + tint 6% del color semántico (color-mix oklab) |
| Shadow | 0 8px 24px rgba(0,0,0,0.40) · depth para flotar |
| Enter | translateX(110% → 0) + fade · 240ms ease-out-quart |
| Exit | fade + drift 20px · 180ms ease-in |
| Duración | info/success/neutral 4.5s · warning/error 6s · achievement 5s |
| Hover | pausa el timer · reanuda 2s al salir |
| ARIA | error/warning → role="alert" + assertive · resto status + polite |
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 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.
Badge circular + glow icon + número + label. El patrón que usan las pantallas de cierre de misión, perfiles, leaderboards y dashboards. Reutiliza los íconos Glow del sistema; cada uno trae su tint canónico extraído del SVG.
var(--n01)), border-radius: 50%./assets/icons/glow/, 78% del badge, drop-shadow propio del SVG.1.35 / 1.6 / 2 rem.--text-muted.Triple inline en cierre de misión, leaderboards, perfil. 2 a 4 stats máximo por fila.
Lista vertical en detalle de misión, settings, resumen del día. Sin límite de stats.
Cada glow icon ya trae su color extraído del SVG. Solo pasa tint si quieres sobreescribirlo en un contexto especial.
Racha#FB7E7ETarget#F69554Clock#FFEA5ACheck#B3F131Crown#FFD23AGem#73C8E8import GlowStat from '~/components/GlowStat.astro';
<GlowStat icon="Racha" value="15+" label="Daily Streak" />
<GlowStat icon="Target" value="82%" label="Monthly Accuracy" />
<GlowStat icon="Clock" value="2:46 min" label="Play time" layout="row" />
<GlowStat icon="Check" value="27" label="Correct Ans." size="lg" />
// props:
// icon · glow icon basename (Racha, Target, Clock, Check, Crown...)
// value · string | number
// label · string
// tint? · override hex (default = canónico por icon)
// layout? · 'stack' (default) | 'row'
// size? · 'sm' | 'md' (default) | 'lg' Flat para UI funcional, Glow para plataforma y 3D para hero. Una pieza, un tipo dominante.
Hero · onboarding emotivo, slides de marca, celebraciones.
Plataforma · badges, currency, racha, achievements.
UI funcional · navegación, botones, inputs, estados.
Regla de mezcla. Flat y Glow pueden convivir en una misma vista. 3D nunca se mezcla con Flat ni con Glow en la misma superficie: si entra un ícono 3D, manda 3D y los otros dos sistemas se van. Una pieza, un tipo dominante.
Los íconos flat cambian de color según la carpeta semántica. Lima solo en CTAs y acentos; las demás carpetas usan tonos del Neutralverse o del set de feedback. Si pones cinco íconos lima seguidos en una vista, el verde deja de significar nada.
Para evitar la saturación de verde: cuando tengas una grilla de capabilities, features o feature-cards con 4+ items, considera (a) usar 3D icons en su lugar, (b) variar los colores por carpeta semántica, o (c) usar Primary (#F0F2F5) y reservar lima solo para el ícono "estrella" del grupo.
Un mini-dashboard con todo el sistema en una pieza: Base, Paneles, Tinted, Mystery, Gradient, Outline, buttons, chips, code tags y notes. Si construyes algo, parte de este patrón.
Construye misiones, monitorea progreso y celebra cada logro con el equipo.
Gradient · Panel 2 → Panel 1Sin código. Drag and drop. Listo en minutos.
Framework para orquestar contenido programáticamente.
npm install @galilei/sdk Anatomía de la composición 1 hero con Panel 2 + Gradient diagonal · 2 cards en Panel 2 (una con input Outline, otra con code well Panel 3) · 4 misiones en Panel 2 con 1 Mystery y 1 Tinted Success. Todo sobre Base. Cero bordes decorativos.
Todo campo es superficie Outline: transparente sobre Base, borde 1px rgba(255,255,255,0.10). El foco no usa ring: usa glow lima, igual que los botones. El error habla con color y texto, nunca con borde de acento.
Regla de validación el error se dice con texto bajo el campo (qué pasó y cómo resolverlo) más color en el borde del input. Nunca un borde grueso de acento ni solo color rojo sin texto.
Las tres pantallas que casi nunca se diseñan y siempre aparecen. Cada una con su tono: el vacío invita, el error orienta, la carga tranquiliza. Nunca en blanco ni con texto crudo.
Crea la primera y tu equipo empieza a jugar hoy mismo.
Crear misiónInvita a la acción: una ilustración, una frase y un CTA claro. Nunca un vacío literal.
Revisa tu conexión e inténtalo de nuevo. Si sigue, escríbenos.
ReintentarOrienta, no culpa: qué pasó, cómo resolverlo y una salida. Tono humano, nunca un código crudo.
Tranquiliza: skeleton con la forma del contenido real, no un spinner solo. Da sensación de progreso.
La superficie base de contenido del portal. Se compone por clases: una superficie (.card o .card-deep), modificadores opcionales y un grid preset. Antes de escribir CSS de página, revisa si el sistema ya lo cubre · un patrón que se repite 2 veces pertenece a portal-marca.css.
Panel 2 · radius 12 · padding 24 · gap 8. La superficie por defecto para grids de contenido.
Padding horizontal 32 y ritmo interno 16. Para cards editoriales que respiran más.
Panel 1 · radius 16 · padding 32 · gap 16. Franja editorial que agrupa contenido propio.
8% de error mezclado en la superficie: comunica "esto no" sin borde de acento. Para pares completos siempre/nunca usa el componente VerdictPanel.
Sube 2px en hover. Para cards que enlazan o invitan a interactuar. Pasa el cursor por aquí.
Sube 2px y aclara la superficie a Panel 3. Refuerzo de hover para grids clickeables.
Dos presets responsive con gap 16. .grid-2 colapsa a 1 columna en 768 · .grid-3 baja a 2 en 980 y a 1 en 600. Si el grid necesita otro breakpoint o auto-fill, ahí sí es CSS de página.
Columna 1
Columna 2
Columna 3
El overline canónico de contenido: 12px semibold uppercase, tracking 0.14em, text-muted. Es el label de arriba de esta card.
Contenedor de ícono con tint. Tamaños snap sm 36 · md 40 · lg 48, más tonos neutral y error.
var(--n02)var(--radius-md)var(--space-5)| Clase | Spec | Cuándo usarla |
|---|---|---|
| .card | bg var(--n02) · radius 12px · padding 24px · flex column gap 8px | Superficie por defecto de contenido |
| .card-roomy | padding 24px 32px · gap 16px | Cards editoriales con más aire |
| .card-deep | bg var(--n01) · radius 16px · padding 32px · gap 16px | Franjas tipo panel que agrupan bloques |
| .card-tint-error | color-mix(in oklab, var(--n02) 92%, var(--error-vivid)) | Anti-patrones · "esto no" |
| .card-lift / .card-lift-tint | hover translateY(-2px) · tint suma bg var(--n03) | Cards clickeables o enlazadas |
| .grid-2 / .grid-3 | gap 16px · 2 a 1 en 768 · 3 a 2 en 980 y a 1 en 600 | Layout responsive de cards |
| .kicker | var(--fs-xs) semibold uppercase · ls 0.14em · var(--text-muted) | Overline de bloque o dt de ficha |
| .def-rows / .def-cols-3 | dl de pares label/valor · 3 columnas en desktop | Fichas técnicas dentro de cards |
| .icon-box (-sm / -lg / -neutral / -error) | 36/40/48px · tint brand, neutral o error | Ícono con contenedor en cards |
| .card-reveal | scroll-reveal · 360ms · respeta reduced motion | Entrada en scroll · requiere observer de página |