Saltar al contenido
Sistema

Componentes

La librería @arcasilesgroup/brand-kit: botones, badges, cards, gráficos y más.

El paquete @arcasilesgroup/brand-kit trae 73 componentes React construidos sobre design-tokens.json v5.0.1, del Button al CtaBlock. Todos leen las variables CSS del color de énfasis en curso, así que cambian de color sin una línea extra de JavaScript. Aquí verás 51 funcionando, agrupados por familia; los 22 restantes se documentan en sus propios capítulos.

El kit en cifras

Las cifras son el propio componente Metric en uso real: los datos salen del kit en cada build, no de un mock.

73
Componentes

Exportados por @arcasilesgroup/brand-kit v5.0.1

7
Colores de énfasis

Una prop, siete colores para elegir

5.0.1
Tokens

design-tokens.json, único origen

El número grande va en BDSupperBold, la display de marca. Se reserva para cifras y portadas; el cuerpo es siempre Lexend.

Acciones

El Button con sus seis variantes, y el Dialog que confirma antes de ejecutar. Una acción principal por superficie; las demás bajan de jerarquía.

Button

Anatomía

Píldora (radius 100px) con etiqueta central; opcional icono leading/trailing y spinner de carga.

Para qué

La llamada a la acción: dispara la intención primaria de una vista.

Variantes · cuándo
  • primary — LA acción de la pieza — una por superficie.
  • soft — secundaria que quieres resaltar sin robar foco.
  • outline — acción de bajo peso sobre fondo claro u oscuro (onDark).
  • secondary — la compañera de una primary: borde neutro de 1pt; con onDark, borde y texto en blanco.
  • ghost — terciaria y acciones en línea: sólo texto, sin borde.
  • dark — sobre foto o relleno de color: #272727 sólido con texto blanco.
Estados
  • default
  • hover
  • focus
  • active
  • disabled
  • loading
Tamaños
  • sm · 9pt
  • md · 10.5pt (default)
  • lg · 12pt

Usa exactamente una primary por superficie y etiqueta con un verbo.

No

No pongas dos primary juntas ni uses el botón como badge de estado.

Accesibilidad

role=button, min-height ≥44px, foco con anillo azul 2pt, Enter/Espacio activan; Label-in-Name (WCAG 2.5.3).

Props
Prop Tipo Default Descripción
variant primary | soft | outline | secondary | ghost | dark primary Peso visual y jerarquía de la acción.
accent Accent amber Color de marca del relleno y el borde; solo destaca, no informa de un estado.
size sm | md | lg md Tamaño del control (el hit-target se mantiene ≥44px).
onDark boolean Ajusta outline/secondary para superficies oscuras.
disabled boolean Gris neutro; ignora hover y click. Nunca es el color de marca desaturado.
Código
Button
<Button variant="primary" accent="lila">Reservar</Button>
Tokens
  • --arc-accent
  • --arc-accent-text
  • --arc-radius-badge
  • --arc-duration

Dialog

¿Publicar el documento?
El Dialog del kit se renderiza estáticamente abierto — sin portal ni estado de apertura — para componer en documentos y previews.

Los botones del diálogo responden: pruébalos.

Para qué

Panel de confirmación renderizado ESTÁTICAMENTE abierto para componer inline.

Estados
  • open (estático)

Úsalo para componer confirmaciones en documentos o previews; pon las acciones en actions.

No

No esperes portal ni estado de apertura: no gestiona overlay ni foco atrapado. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

role=dialog con aria-label desde el título; las acciones son Button reales con teclado.

Código
Dialog
<Dialog title="¿Publicar?" actions={<Button>Publicar</Button>}>Cuerpo</Dialog>

Feedback y estado

Avisos e insignias: cómo se etiqueta y cómo se responde. Aquí el color significa algo y lo fija el tono semántico; el color de énfasis se queda fuera.

Badge

Amber Lila Blue Ink
Anatomía

Pastilla plana (radius 100px) con texto en mayúsculas Lexend 9pt; sin sombra ni foco.

Para qué

Etiqueta breve en pastilla plana: categoría o marca, no estado.

Estados
  • default
  • live (role=status)

Úsalo para categorizar; pásale live solo si anuncia un cambio dinámico (un contador).

No

No lo hagas enfocable ni objetivo táctil: es texto, no un control. Para algo pulsable está el Button.

Accesibilidad

Sin rol por defecto (span). Con live → role=status + aria-live=polite. No focusable.

Props
Prop Tipo Default Descripción
children ReactNode El texto de la etiqueta.
accent Accent amber Color del relleno y del texto; solo destaca.
live boolean Convierte en role=status + aria-live=polite para cambios dinámicos.

Campo obligatorio

Código
Badge
<Badge accent="blue">Beta</Badge>
Tokens
  • --arc-accent
  • --arc-accent-text
  • --arc-radius-badge

Callout

Énfasis de marca
Callout que toma el color por prop: fondo tintado y borde en ese color, sin que signifique un estado.
Info
Fondo azul tintado, borde e icono semánticos.
Éxito
Confirmación verde con icono de check.
Atención
Advertencia amarilla con triángulo.
Error
Error rojo con icono de cerrar.
Anatomía

Caja 8pt con borde 1pt; punto/icono a la izquierda, título 11pt/600 opcional y cuerpo 10.5pt.

Para qué

Aviso destacado dentro del flujo: contexto, éxito, atención o error.

Variantes · cuándo
  • tone=info/success/warn/error — mensajería SEMÁNTICA de sistema.
  • accent — énfasis de marca: el fondo se tiñe del color que recibe y no significa un estado.

Elige tone cuando comunica estado; accent cuando solo enfatiza.

No

No mezcles tono semántico y color de marca en el MISMO mensaje. Si el aviso informa de algo, usa tone; si solo destaca, usa el color. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Título + cuerpo legibles; el icono es decorativo (aria-hidden). Contraste AA garantizado por tono.

Props
Prop Tipo Default Descripción
children ReactNode Cuerpo del aviso.
tone info | success | warn | error Estado semántico: fondo en el paso 100 de la escala, borde en el 500 e icono en el 700.
accent Accent amber Color de marca cuando NO hay tone (fondo, borde y punto).
title ReactNode Título opcional sobre el cuerpo.

Campo obligatorio

Código
Callout
<Callout tone="success" title="Listo">Se publicó el documento.</Callout>
Tokens
  • --arc-accent
  • --arc-callout-bg
  • --arc-radius-card

Formularios

Entrada de datos con estados de verdad: foco, ayuda, error y deshabilitado. El color de énfasis pinta el foco; el error va siempre en el rojo danger.

Input · Select · Checkbox

Input

Como aparecerá en el material
Formato no válido

Select

Las opciones salen del registro del kit
Selección no válida

Checkbox

Input

Anatomía

Etiqueta arriba + caja 6pt con borde 1pt; debajo, texto de ayuda o mensaje de error.

Para qué

Campo de texto de marca con etiqueta, ayuda y estado de error accesible.

Estados
  • default
  • focus (borde acento)
  • helper
  • error
  • disabled

Empareja siempre label; usa error para validación (pinta rojo danger + mensaje).

No

No señales el error con el color de marca: el error es SIEMPRE el rojo danger, con su mensaje al lado.

Accesibilidad

label ligado por id (useId), error con aria-invalid + aria-describedby, foco anillo azul 2pt.

Props
Prop Tipo Default Descripción
label ReactNode Etiqueta ligada al campo por id.
error ReactNode Mensaje de validación (rojo danger + aria-invalid).
helper ReactNode Texto de ayuda bajo el campo.
accent Accent amber Tiñe el borde de foco.
disabled boolean Bloquea la entrada y baja el contraste.
Código
Input
<Input label="Correo" type="email" error="Formato no válido" />
Tokens
  • --arc-accent
  • --arc-gray
  • --arc-radius-metric

Select

Para qué

Desplegable nativo estilizado con etiqueta, ayuda, error y deshabilitado.

Estados
  • default
  • focus (borde acento)
  • helper
  • error
  • disabled

Da opciones con value/label; para preview estático usa defaultValue.

No

No lo uses para 2 opciones (usa Checkbox/segmented) ni para acciones.

Accesibilidad

select nativo → teclado y lector de serie; label ligado; error con aria-invalid.

Código
Select
<Select label="Acento" options={[{value:"lila",label:"Lila"}]} />

Checkbox

Para qué

Casilla de una decisión binaria (aceptar, activar) con etiqueta clicable.

Estados
  • unchecked
  • checked
  • focus (acento)
  • disabled

Usa la etiqueta como área clicable; controla con checked+onChange.

No

No lo uses para acciones inmediatas ni para elegir 1 de N (eso es radio/Select).

Accesibilidad

input checkbox nativo, label ligado, foco visible; disabled baja opacidad y bloquea.

Código
Checkbox
<Checkbox checked={ok} onChange={setOk} label="Acepto las condiciones" />

Navegación

Moverse dentro de una vista sin recargar la página. La pestaña activa se marca con peso y subrayado, nunca solo con color.

Tabs

Panel general con la información del color en curso.
Anatomía

Fila de etiquetas sobre una regla de 1pt; la activa lleva subrayado en color; debajo, el panel.

Para qué

Cambia entre paneles dentro de una misma vista sin recargar.

Variantes · cuándo
  • no controlado (defaultActive) — el estado vive dentro del componente.
  • controlado (active + onActiveChange) — el índice lo maneja el caller.
Estados
  • active (subrayado acento + peso)
  • inactive
  • focus (anillo azul)

Reserva Tabs para vistas hermanas del mismo nivel; marca activo por peso + subrayado.

No

No lo uses como navegación entre páginas ni con más de ~5 pestañas.

Accesibilidad

role=tablist/tab/tabpanel; el activo no depende solo del color; foco anillo azul 2pt.

Props
Prop Tipo Default Descripción
items { label; content }[] Pestañas: etiqueta + contenido del panel.
accent Accent amber Tiñe el subrayado de la pestaña activa.
defaultActive number 0 Índice inicial en modo no controlado.
active / onActiveChange number / (i) => void Modo controlado: el caller maneja el índice.

Campo obligatorio

Código
Tabs
<Tabs items={[{label:"Uno",content:<p></p>}]} accent="lila" />
Tokens
  • --arc-accent
  • --arc-blue
  • --arc-duration-fast
  • --arc-duration-press

Datos

Cifras y series renderizadas en servidor, sin JavaScript: la métrica display, tres gráficos SVG y la tabla de marca. Los colores salen de la chartPalette que corresponde.

Metric

73
Componentes
7
Colores de énfasis
5.0.1
Tokens
Anatomía

Card 6pt con borde: valor grande en BDSupperBold, etiqueta debajo y caption gris opcional.

Para qué

Cifra display de marca (BDSupperBold) con su etiqueta: KPIs y portadas.

Resérvalo para los números que importan; dale el color de la sección en la que va.

No

No lo uses para texto de corrido ni para números dentro de una frase. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

El valor y la etiqueta son texto real (no imagen); contraste AA con accent="ink" sobre claro.

Props
Prop Tipo Default Descripción
value ReactNode La cifra display.
label ReactNode Qué mide el número.
caption ReactNode Nota gris opcional bajo la etiqueta.
accent Accent ink Color text-safe del valor.
animate boolean Countup 0→valor al montar (solo números; reduced-motion lo salta).

Campo obligatorio

Código
Metric
<Metric value="49" label="Componentes" accent="ink" />
Tokens
  • --arc-accent
  • --arc-font-display
  • --arc-radius-metric

DonutChart

100
Comunidad40%Eventos25%Tech20%Música15%
Para qué

Reparto de un total en pocas partes, en SVG de servidor.

Úsalo con 3–6 segmentos y su etiqueta; los colores salen de la chartPalette.

No

No pases de seis partes, y no lo uses para series en el tiempo — para eso está LineChart.

Accesibilidad

SVG con títulos accesibles; el color no es el único portador (etiqueta + valor).

Código
DonutChart
<DonutChart data={[{label:"Eventos",value:25}]} size={160} />

BarChart

062,5125187,5250120Ene180Feb95Mar240Abr175May
Para qué

Comparar magnitudes discretas entre categorías, en SVG de servidor.

Etiqueta cada barra; ordena por criterio (magnitud o cronología).

No

No lo uses para partes de un todo (eso es DonutChart).

Accesibilidad

SVG server-first, sin JS; ejes y etiquetas legibles con contraste AA.

Código
BarChart
<BarChart data={[{label:"Ene",value:120}]} />

LineChart

062,5125187,5250EneFebMarAbrMay
20242025
Para qué

Tendencia de una o varias series en el tiempo, en SVG de servidor.

Nombra cada serie y pásalas por props en el orden de la chartPalette.

No

No re-ordenes los colores a mano ni mezcles unidades en un mismo eje.

Accesibilidad

SVG accesible; cada serie con nombre — no se distingue solo por color.

Código
LineChart
<LineChart labels={m} series={[{name:"2025",points:[80,120]}]} />

BrandTable

PropiedadValorDescripción
radius-metric6ptCards e inputs
radius-card8ptContenedores y callouts
radius-badge100pxPills y badges
Para qué

Tabla de datos con la tipografía y el ritmo de marca.

Da headers y rows; en pantallas estrechas, déjala desbordar su contenedor.

No

No la uses para maquetar layout: es datos tabulares, no una rejilla.

Accesibilidad

table/th/td semánticos; el desbordamiento horizontal se recorre también con teclado.

Código
BrandTable
<BrandTable headers={["Prop","Valor"]} rows={[["radius","8pt"]]} />

Contenido

Las piezas con las que se compone una página o un documento: tarjetas, prosa, fotografía, cintas de partners y los cierres de marca. Todo HTML de servidor.

BenefitCard

01
Server-first
Los 73 componentes pintan HTML en el servidor — nada depende del navegador para verse.
02
Atento al color
Leen las variables --arc-* y reciben el color por prop, sin volver a renderizar.
03
Desde tokens
Generados desde design-tokens.json v5.0.1: un único origen para color, radio y motion.
Para qué

Tarjeta numerada que enumera una ventaja o paso.

Úsala en tríos o rejillas para 3–4 beneficios; número + título + cuerpo.

No

No metas párrafos largos: es un resumen, no un artículo. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Encabezado real por tarjeta; el número es decorativo, el título lleva el peso.

Código
BenefitCard
<BenefitCard number="01" title="Server-first">HTML en servidor.</BenefitCard>

CompareColumns

Lo que aporta Arcasiles

  • Marca y comunicación del evento
  • Comunidad y convocatoria
  • Producción del contenido

Lo que aporta el partner

  • Espacio y logística
  • Difusión en sus canales
  • Recursos técnicos
Para qué

Dos columnas enfrentadas: lo que aporta A vs. lo que aporta B.

Úsala para acuerdos o comparativas de alcance con ítems paralelos.

No

No metas más de 2–3 columnas ni listas asimétricas largas. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Cada columna con su título; listas semánticas.

Código
CompareColumns
<CompareColumns columns={[{title:"Arcasiles",items:["Marca"]}]} />

Diagram

Texto corporativo

no se publica

Estamos encantados de anunciar un evento disruptivo, premium y exclusivo.

brand_check lo rechaza en CI y en el MCP.

Texto Arcasiles

pasa

El 12 de octubre hacemos un evento en Siles con 12 artistas de la comarca.

Un dato, una fecha y un lugar.

El mismo anuncio, escrito de dos maneras. Las listas que separan una de otra viven en el capítulo Voz.

lo que lee una pieza antes de existir

Canon de marca

el color es énfasis, no estructura

Guía del componente

una acción principal por superficie

Tu encargo

una tarjeta para la jornada de octubre

Frases de ejemplo, no citas literales del canon.

Las tres fuentes llegan juntas: la pieza cumple las tres a la vez.
Anatomía

Marco de figura con pie; dentro, dos lados enfrentados (Compare) o un bloque con secciones y frases marcadas (Block).

Para qué

Dibujar una idea con HTML y tokens de marca, sin captura de pantalla ni PNG suelto.

Variantes · cuándo
  • DiagramCompare — dos versiones se enfrentan y el color dice cuál es cuál.
  • DiagramBlock — un texto largo y las frases que hay que mirar dentro.

Deja la conclusión en el pie de figura: el dibujo enseña la forma, no la argumenta.

No

No lo uses como adorno ni en lugar de una tabla: las barras dicen «aquí hay texto», nunca cifras.

Accesibilidad

Los rótulos son texto real; las barras de relleno van aria-hidden. El veredicto no va sólo en el color: cada lado lo dice también con palabras.

Props
Prop Tipo Default Descripción
before / after DiagramSide Los dos lados de DiagramCompare: título, cifra, cita, etiquetas y veredicto.
sections DiagramBlockSection[] Secciones de DiagramBlock, cada una con sus líneas y su frase marcada.
tone "problem" | "good" | "neutral" | "accent" "neutral" Qué dice el color de un lado antes de leerlo.
caption ReactNode Pie de figura. Sin él el diagrama sale sin marco.
accent Accent Color de énfasis del subárbol.

Campo obligatorio

Código
Diagram
<DiagramCompare before={{title:"Así no",tone:"problem"}} after={{title:"Preferir",tone:"good"}} />
Tokens
  • --arc-accent
  • --arc-accent-text
  • --arc-danger
  • --arc-green
  • --arc-gray
  • --arc-neutral-300

BulletList

  • Primer elemento de la lista, con el punto en negro
  • Segundo elemento con la misma marca visual
  • Tercer elemento — el marcador es neutro, nunca del color de énfasis
Para qué

Lista con el marcador de marca: un punto negro, nunca de color.

Úsala para enumeraciones cortas; el marcador es neutro por diseño.

No

No pintes el marcador con el color de énfasis. Si hace falta destacar, va el texto en negrita.

Accesibilidad

ul/li semántico; el punto es decorativo.

Código
BulletList
<BulletList items={["Primero","Segundo"]} />

Avatar

EA AG BK
Anatomía

Círculo (radius 100px) con iniciales derivadas del nombre o una imagen recortada.

Para qué

Retrato o iniciales de una persona en tres tamaños.

Variantes · cuándo
  • name — deriva iniciales del nombre automáticamente.
  • initials — iniciales explícitas cuando no hay nombre.
Tamaños
  • sm · 20pt
  • md · 28pt (default)
  • lg · 36pt

Pasa name para iniciales automáticas; elige tamaño por contexto.

No

No lo uses como icono decorativo genérico: representa a una persona.

Accesibilidad

Texto de iniciales legible; si es imagen, alt descriptivo.

Props
Prop Tipo Default Descripción
name string Nombre del que se derivan las iniciales.
initials string Iniciales explícitas cuando no hay nombre.
src string Imagen de retrato (recortada al círculo).
size sm | md | lg md Diámetro del avatar.
Código
Avatar
<Avatar name="Equipo Arcasiles" size="lg" />
Tokens
  • --arc-accent
  • --arc-radius-badge

AccentLine

Para qué

Línea de 3pt bajo un titular, en el color de énfasis: la puntuación de la marca.

Estados
  • ancho por prop width

Úsala bajo un h2/h3 para marcar sección; hereda --arc-accent-line.

No

No la repitas por todo el bloque: una por sección, y el resto se separa con espacio.

Accesibilidad

Decorativa (no aporta significado); no requiere texto alternativo.

Código
AccentLine
<AccentLine width="80pt" />

RichText

La identidad del grupo se sostiene sobre dos gestos de color. El amarillo de marca, #f9be4a, enciende los realces decorativos —nunca el texto corrido— y marca el ritmo de cada página como una pieza de marca, no como un manual.

Eventos responde con su lila, #674a98, que repinta insignias, líneas y gráficos sin tocar una sola línea de HTML. La pastilla trae el color exacto al lado del hex, y el texto de alrededor se mantiene tan legible como en un libro.

Para qué

Contenedor de prosa larga con medida, interlineado y realce de libro.

Úsala para artículos/descripciones; el realce es por peso, no por color.

No

No pintes el texto de amarillo ni superes la medida de lectura.

Accesibilidad

Medida 45–75ch, interlineado 1.7; jerarquía por encabezados reales.

Código
RichText
<RichText><p>Prosa larga</p></RichText>

HexToken

Color #f9be4a amber y #674a98 lila.

Para qué

Pastilla inline con un hex y su color, para citar tokens en la prosa.

Insértalo dentro del párrafo; el código se escribe claro u oscuro según su luminancia WCAG.

No

No lo uses como swatch grande (usa BrandPalette) ni fuera de texto.

Accesibilidad

El hex se lee como texto; la pastilla es decorativa.

Código
HexToken
<HexToken value="#674a98" />

CodeBlock

accents.ts
import { accentVars } from "@arcasilesgroup/brand-kit";

const av = accentVars("lila");
// → { fill, onFill, strong } — cada rol es una CSS var del canon
Para qué

Bloque de código con resaltado, título y botón copiar.

Variantes · cuándo
  • lineNumbers — cuando el número de línea importa (refs).
  • maxHeight — para acotar un bloque muy largo a una altura fija.

Pásale lang para el resaltado y locale para el idioma del botón.

No

No pegues secretos ni rutas de máquina; es contenido público.

Accesibilidad

Botón copiar con aria-label; el <pre> conserva el texto para lectores.

Código
CodeBlock
<CodeBlock code="const x = 1;" lang="ts" title="ej.ts" locale="es" />

ServiceCard

Eventos

Producción integral de eventos corporativos y de comunidad.

  • Gestión de eventos
  • Organización de congresos
  • Team building

Marketing

Comunicación de marca, de la estrategia a la ejecución.

  • Publicidad
  • Marketing
  • Comunicación

Tech

Tecnología a medida para el evento y para el negocio.

  • Soluciones a medida
  • IT & Cloud
  • Datos
Recomendado

Plan de ejemplo

La variante con pricing: precio display en el tono text-safe, periodo en gris y CTA de píldora. La prop featured añade el borde negro y la píldora «Recomendado».

950 €/mes
Hablemos
Para qué

Tarjeta de servicio o plan, con variante de pricing destacable.

Variantes · cuándo
  • base — describe un servicio con features.
  • pricing + featured — plan con precio y CTA destacado.

Marca UN plan como featured; el precio va en el tono text-safe del color.

No

No destaques varios planes a la vez ni inventes tarifas. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Encabezado real; CTA es Button/enlace con objetivo ≥44px.

Código
ServiceCard
<ServiceCard title="Plan" price="950 €" featured cta={{label:"Hablemos",href:"#"}} />

CoverHero

Documento de partnership
Propuesta de colaboración 2025
Siles · 2025
Para
Ayuntamiento de Siles
Confidencial
Documento de partnership
Propuesta de colaboración 2025
Siles · 2025
Para
Ayuntamiento de Siles
Confidencial
Para qué

Portada de documento: título, subtítulo, destinatario y banda.

Variantes · cuándo
  • default — cubierta clara, con la banda en color.
  • accent + invertBand — cubierta oscura invertida (Tech).

Úsala como primera página de propuestas/documentos.

No

No la uses como hero web genérico (para eso está el hero del sitio).

Accesibilidad

Un h1 por documento; contraste AA garantizado por la banda.

Código
CoverHero
<CoverHero title="Propuesta" subtitle="2025" accent="ink" invertBand />

LogoStrip

Partners tecnológicos principales
Arcasiles GroupArcasilesArcasiles
Para qué

Fila de logotipos con título: partners o marcas del grupo.

Usa los ficheros originales de cada marca; da alt por logo.

No

No recrees logos ajenos ni los pintes de un color que no es suyo. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Cada logo con alt; el título encabeza la tira.

Código
LogoStrip
<LogoStrip title="Partners" logos={[{src:"/l.svg",alt:"Marca"}]} />

LogoMarquee

CodemotionNerdearlaGDG SpainDevOpsDaysT3chFestCommit ConfOpenExpo EuropeAPI AddictsMicrosoftMyTechPlanNationale NederlandenCelonisVoxel51PaisanosDisitech
Para qué

Cinta animada de logotipos que se desplaza en bucle.

Estados
  • animada
  • pausa (hover/focus)
  • estática (reduced-motion)

Úsala para muchos partners; se pausa con cursor o foco de teclado.

No

No metas texto de lectura en la cinta ni animaciones que no respeten reduced-motion.

Accesibilidad

aria-label describe la cinta; con prefers-reduced-motion queda fila estática.

Código
LogoMarquee
<LogoMarquee items={items} ariaLabel="Partners" mono />

SponsorTiers

Bronce
400 €
  • Logo en materiales
  • Mención en apertura
Recomendado
Plata
900 €
  • Todo lo de Bronce
  • Stand en el evento
  • Post dedicado
Oro
1.800 €
  • Todo lo de Plata
  • Charla patrocinada
  • Logo en escenario
Para qué

Niveles de patrocinio con precio y perks, uno destacado.

Ordena de menor a mayor; destaca el nivel recomendado con featured.

No

No inventes precios reales ni destaques todos los niveles. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Cada tier con encabezado; listas de perks semánticas.

Código
SponsorTiers
<SponsorTiers tiers={[{name:"Oro",price:"1.800 €",perks:["…"]}]} />

TeamGrid

Alcachofil leyendo un libro
Eventos

Nombre Apellido

El rol se escribe con el tono text-safe del color de énfasis, nunca con el amarillo crudo: sobre claro el amarillo no se lee.

Alcachofil trabajando con un portátil
Tech

Nombre Apellido

Nombre en BDSupperBold y bio en Lexend de 14px con interlineado 1.6 — la ficha entera es HTML del servidor.

Alcachofil pintando con pincel y paleta
Comunidad

Nombre Apellido

Con Instagram o LinkedIn presentes, la ficha añade iconos SVG con área táctil por encima del mínimo WCAG.

Para qué

Rejilla de fichas de equipo (TeamCard): retrato, nombre y rol.

Usa retratos reales, nombre y rol; añade redes con área táctil ≥44px.

No

No inventes personas ni pongas el personaje de marca en producción: van retratos reales, con nombre y rol. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Nombre en encabezado; iconos de red con aria-label y objetivo táctil.

Código
TeamGrid
<TeamGrid members={[{name:"…",role:"Eventos",photo:"/p.png"}]} />

PhotoGallery

Ponente presentando una gráfica en el escenario durante un evento de ArcasilesPúblico asistente durante una sesión en un evento de ArcasilesPonente en el atril con la pantalla «Nuestra esencia» proyectada de fondoTurno de preguntas y respuestas: moderador y público conversan durante el eventoFoto de grupo de asistentes y equipo al cierre de un evento
Fotos reales de eventos, las mismas que embebe el kit: rejilla densa en escritorio y una sola tira horizontal en móvil.
Para qué

Rejilla densa de fotos con caption y lightbox opcional.

Usa span para destacar una foto; encuadra con position donde el crop corta caras.

No

No mezcles proporciones dispares ni dejes fotos sin alt.

Accesibilidad

Cada foto con alt; lightbox operable por teclado y con Escape.

Código
PhotoGallery
<PhotoGallery photos={[{src,alt:"…",span:2}]} caption="…" lightbox />

BrandPhoto · PhotoBlock

Ponente presentando una gráfica en el escenario durante un evento de Arcasiles Ponente en el atril con la pantalla «Nuestra esencia» proyectada de fondo
Turno de preguntas y respuestas: moderador y público conversan durante el evento

BrandPhoto

Para qué

Una de las seis fotos curadas del kit, con encuadre y radio de marca.

Elige photo (charla/publico/qa/ponente/grupo/postevento); sube position si el crop corta caras.

No

No uses BrandPhoto para fotos propias (usa PhotoBlock).

Accesibilidad

alt descriptivo obligatorio; radio y encuadre por diseño.

Código
BrandPhoto
<BrandPhoto photo="ponente" height={200} position="center 30%" alt="…" />

PhotoBlock

Para qué

Acota una foto PROPIA con el radio de 8pt de marca y caption opcional.

Úsalo para fotos que no vienen del kit; da alt y opcional caption.

No

No lo uses para las seis curadas del kit (usa BrandPhoto).

Accesibilidad

alt obligatorio; caption como texto real bajo la imagen.

Código
PhotoBlock
<PhotoBlock src={url} alt="…" height={200} />

BrandPalette

Neutros
black
#272727
darkGray
#afafaf
gray
#e9e9e9
whitesmoke
#f5f5f5
Superficie
paper
#faf9f7
Marca
primary
#f9be4a
green
#7fbf80
blue
#2797c4
lila
#674a98
pink
#e887a7
orange
#da7835
deepBlue
#114F82
Funcionales
success
#7fbf80
info
#2797c4
warn
#f9be4a
danger
#b3362a
link
#114F82
Para qué

Referencia viva de la paleta: nombres y hex exactos del canon.

Úsalo para citar el color de marca; es referencia, no decoración.

No

No re-declares hex a mano en otro sitio: esta es la fuente citada.

Accesibilidad

Nombres y hex como texto legible; no depende solo del swatch.

Código
BrandPalette
<BrandPalette view="palette" />

CtaBlock

¿Hablamos?
Emailinfo@arcasiles.com
Webarcasiles.com
© 2026 Arcasiles Group
Para qué

Cierre de documento a sangre: fondo negro, logo y canales de contacto.

Úsalo como pie de propuestas; pon email y web en channels.

No

No lo uses como banner intermedio: es un cierre.

Accesibilidad

Contraste AA sobre el fondo negro; los canales son texto real, no una imagen.

Código
CtaBlock
<CtaBlock subtitle="¿Hablamos?" channels={[{label:"Email",value:"…"}]} />

NavHeader

Anatomía

Logotipo a la izquierda, grupos desplegables y enlaces sueltos en el centro, CTA de píldora a la derecha.

Para qué

La cabecera de un sitio de marca, con su navegación completa.

Variantes · cuándo
  • links — la navegación cabe en una fila de destinos.
  • groups — hay más destinos de los que caben: cada grupo abre su lista.
Estados
  • reposo
  • hover
  • focus-visible
  • abierto
  • página actual

Marca la página en curso con active: el grupo que la contiene se subraya solo.

No

No metas más de un CTA ni uses el grupo para una sola entrada — ahí va un enlace suelto.

Accesibilidad

Cada grupo es un <details> nativo: abre al pulsar, cierra con Escape y anuncia su estado sin JavaScript. La página en curso lleva aria-current, no sólo peso.

Props
Prop Tipo Default Descripción
links NavLink[] Destinos sueltos, después de los grupos.
groups NavGroup[] Grupos desplegables, antes de los enlaces sueltos.
cta string Etiqueta del CTA de píldora, alineado a la derecha.
accent Accent "amber" Color de énfasis del subrayado activo y del CTA.

Campo obligatorio

Código
NavHeader
<NavHeader groups={[{label:"Sistema",links:[{label:"Componentes",href:"/componentes"}]}]} links={[]} />
Tokens
  • --arc-accent
  • --arc-gray
  • --arc-blue

Eventos y blog

La agenda y el blog del grupo: una misma fuente de datos en tarjeta, lista, calendario y entrada. El kit nunca consulta una API — recibe todo por props.

EventCards

Comunidad

Meetup de la comunidad

Sábado 12 de octubre · 19:30 · Siles

El badge toma su color del registro del kit; la foto queda acotada y el CTA hereda ese mismo color, con el texto de encima ya calculado por contraste.

Inscríbete
Foto de grupo de asistentes y equipo al cierre de un evento
Comunidad
25 sep19:00

Arcasiles Community · Networking de otoño

Espacio Arcasiles, Siles

Encuentro abierto de la comunidad para cerrar la temporada; la plaza se reserva en Luma.

Ponente en el atril con la pantalla «Nuestra esencia» proyectada de fondo
Tech
16 oct18:30

Tech Talk · IA aplicada a la producción de eventos

Sala Tech, Siles + online

Charla técnica con demo en vivo; apúntate en Luma o síguela desde LinkedIn Events.

Meetup
13 nov19:00

Meetup mensual de la comunidad

Café del Centro, Siles

El meetup abierto de cada mes; la convocatoria y las plazas viven en Meetup.

Jornada
22 may19:00

Jornada Arcasiles · Balance de temporada

Auditorio Municipal, Siles

Repasamos la temporada con el equipo y la comunidad; el resumen y las fotos quedan publicados.

Group
5 nov18:00

Arcasiles Group · Kickoff de temporada

Sede Arcasiles, Siles

Arranque de temporada con todo el grupo: agenda y objetivos del trimestre.

Tech
12 nov18:30

Tech Talk · Diseño de sistemas con IA

Sala Tech, Siles + online

Charla técnica con demo en vivo; plaza en Luma.

Eventos
20 nov18:00

Feria de proyectos de la comunidad

Auditorio Municipal, Siles

Muestra abierta de los proyectos de la temporada.

Música
27 nov21:00

Las Noches de Arcasiles · Jazz en vivo

Club Las Noches, Siles

Sesión de jazz de la sub-marca nocturna.

EventCard

Anatomía

Card de 8pt: cartel opcional arriba, badge de color, título, fecha y lugar, y un CTA de píldora.

Para qué

Tarjeta de un evento: cartel, badge de color, fecha, lugar y CTA.

Da fecha, lugar y cta; acota el cartel con imagePosition.

No

No inventes eventos ni llames a una API desde aquí: el kit recibe los datos por props. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

CTA con objetivo táctil ≥44px; el badge solo destaca, no informa de un estado.

Props
Prop Tipo Default Descripción
title / date / place ReactNode Datos base del evento.
accent Accent amber Color del badge de categoría.
cta / ctaHref string Etiqueta + destino del botón.
image / imagePosition string Cartel opcional y su encuadre.

Campo obligatorio

Código
EventCard
<EventCard title="Meetup" date="…" place="Siles" cta="Inscríbete" />
Tokens
  • --arc-accent
  • --arc-radius-card
  • --arc-radius-badge

EventCards

Para qué

Los mismos eventos en rejilla de tarjetas (auto-fit).

Reusa la MISMA fuente de datos que EventList/EventCalendar.

No

No dupliques la agenda: una sola fuente de datos, tres presentaciones. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

Cada tarjeta con encabezado; chips con icono + etiqueta.

Código
EventCards
<EventCards items={items} lang="es" />

EventList

Próximos7 eventos

  • Foto de grupo de asistentes y equipo al cierre de un evento
    Comunidad

    Arcasiles Community · Networking de otoño

    19:00Espacio Arcasiles, Siles

    Encuentro abierto de la comunidad para cerrar la temporada; la plaza se reserva en Luma.

  • Ponente en el atril con la pantalla «Nuestra esencia» proyectada de fondo
    Tech

    Tech Talk · IA aplicada a la producción de eventos

    18:30Sala Tech, Siles + online

    Charla técnica con demo en vivo; apúntate en Luma o síguela desde LinkedIn Events.

  • Group

    Arcasiles Group · Kickoff de temporada

    18:00Sede Arcasiles, Siles

    Arranque de temporada con todo el grupo: agenda y objetivos del trimestre.

  • Tech

    Tech Talk · Diseño de sistemas con IA

    18:30Sala Tech, Siles + online

    Charla técnica con demo en vivo; plaza en Luma.

  • Meetup

    Meetup mensual de la comunidad

    19:00Café del Centro, Siles

    El meetup abierto de cada mes; la convocatoria y las plazas viven en Meetup.

  • Eventos

    Feria de proyectos de la comunidad

    18:00Auditorio Municipal, Siles

    Muestra abierta de los proyectos de la temporada.

  • Música

    Las Noches de Arcasiles · Jazz en vivo

    21:00Club Las Noches, Siles

    Sesión de jazz de la sub-marca nocturna.

Pasados1 evento

  • Jornada

    Jornada Arcasiles · Balance de temporada

    19:00Auditorio Municipal, Siles

    Repasamos la temporada con el equipo y la comunidad; el resumen y las fotos quedan publicados.

Para qué

Agenda en lista agrupada por estado (Próximos, Pasados).

Pasa items con estado; el pasado ofrece «ver resumen».

No

No mezcles el orden: primero los próximos, después los pasados.

Accesibilidad

Chips ≥24px, CTA 44px; iconos SVG con etiqueta, nunca emoji.

Código
EventList
<EventList items={items} lang="es" />

EventCalendar

Noviembre 2026

  • Group
  • Tech
  • Meetup
  • Eventos
  • Música
Noviembre 2026
LMXJVSD
2627282930311
2345678
910111213Meetup mensual de la comunidad1415
16171819202122
23242526272829
30123456
  • Jueves 5 de noviembre

  • Jueves 12 de noviembre

  • Viernes 13 de noviembre

    Meetup mensual de la comunidad
  • Viernes 20 de noviembre

  • Viernes 27 de noviembre

Para qué

Calendario mensual navegable con los eventos como pastillas por día.

Estados
  • isla (client)
  • colapsa a lista por día en móvil

Fija month/year para el primer render (SSR estable); el «hoy» lo resuelve el navegador.

No

No uses new Date en render, que rompe el SSR: pasa el mes y el año por props.

Accesibilidad

Tabla semántica accesible; glifos ‹/› con etiqueta; en móvil lista por día.

Código
EventCalendar
<EventCalendar items={items} month={9} year={2026} lang="es" />

PostCard

Para qué

Tarjeta de entrada de blog: cover opcional, título, excerpt y meta.

Variantes · cuándo
  • con imagen — hay cover (alt vacío, decorativo del link).
  • solo texto — sin cover: variante de texto.

Enlaza a la entrada real con href; PostMeta compone fecha ISO + autor.

No

No metas un h1 dentro: el título de la tarjeta es un h3, y el h1 lo pone PostHero en la entrada abierta. Nunca uses una franja de color pegada a un solo borde de la tarjeta, panel o contenedor: ni superior, inferior, izquierdo ni derecho.

Accesibilidad

La tarjeta entera es un enlace; la fecha es <time> ISO.

Código
PostCard
<PostCard title="…" excerpt="…" href="/blog/x" meta={{date,author}} />

51 componentes en vivo en este capítulo, de los 73 que exporta el kit. Todos leen la misma prop de color, y ninguno guarda un hex propio.

Los 22 restantes no faltan: trabajan en otro capítulo. Logo y SectionCard están en Logo, ColorSwatch en Color, Alcachofil en su propio capítulo, CodeBlock en MCP, y DocPage y SlidePage en Plantillas. SectionHeader y Heading componen estas mismas páginas.