Saltar al contenido

FF COACHING · BRAND SYSTEM v1.1

De inseguro a
fuerte y confiado.

Manual operativo de la marca FF Coaching. Recoge los dos sistemas que están hoy en producción: Raw, el de la home, y Atleta, el de las landings de anuncios y las páginas legales. Con sus tokens, sus componentes y sus descargas.

Identidad

Identidad.

Quién es FF Coaching, a quién habla, y qué territorio ocupa en la cabeza del avatar.

01 · ESENCIA

Lo que somos en dos frases.

01.01 · STATEMENT

De inseguro a fuerte y confiado.

01.02 · PROPUESTA

Acompañamiento 1:1 para hombres que quieren dejar de sentirse inseguros con su físico y construir una versión más fuerte, segura y disciplinada de sí mismos. Sin PDFs. Sin desaparecer.

02 · ADJETIVOS

Cinco adjetivos justificados.

Cada palabra carga una decisión visual y editorial. Si una pieza no encarna alguno de estos cinco, no es FF.

Directo02.01

Cero rodeos. Una promesa, un siguiente paso. El público objetivo ya está cansado de gurús que se enrollan.

Masculino02.02

Habla a un hombre adulto. Sin condescendencia, sin broseo, sin motivación de plantilla.

Premium02.03

Acompañamiento 1:1, no app fitness barata. La identidad refleja precio y exclusividad relativa.

Disciplinado02.04

El resultado es consecuencia del oficio, no del hype. La marca encarna esa misma postura.

Real02.05

Anti-postureo. Evita stock photos, transformaciones imposibles y promesas sin proof.

03 · POSICIONAMIENTO

A quién hablamos y contra quién competimos.

AVATAR

03.01

Hombre 28-45, entrena o quiere empezar. No se ve como quiere. Ha probado rutinas YouTube, dietas que duran 2 semanas, y un par de coaches que le mandaron un PDF y desaparecieron. Busca acompañamiento real, no más información.

ARQUETIPO

03.02

El Héroe en formación. Quiere transformarse pero necesita un mentor que le marque el camino. No motivador, mentor. El que dice qué hacer cuando él no lo sabe y le obliga a aparecer cuando él fallaría solo.

CLUSTER COMPETIDOR

03.03

Apps fitness genéricas (MyFitnessPal, MyProtein), coaches Instagram de plantilla, gimnasios franquicia. FF sale del cluster por densidad editorial, oficio premium 1:1 y nivel de seguimiento que ningún software replica.

04 · SISTEMAS

Dónde manda cada sistema.

Desde septiembre de 2026 la web tiene dos vestidos. Cada página lleva uno entero, nunca mitad y mitad. Antes de abrir una pantalla nueva, mira en cuál de los dos cae.

PRINCIPAL

04.01

Raw

Home (/), opt-ins (/o/*), páginas de gracias y guías

Fondo negro, Bebas Neue en titulares gigantes, Inter en mayúsculas espaciadas para el apoyo, fotos en blanco y negro, contorno como firma y azul como único acento.

SECUNDARIO

04.02

Atleta

Landings de anuncios (/l/*), páginas legales, este manual

Fondo claro, Barlow para el texto y Barlow Semi Condensed para titulares, cifras y botones. La itálica azul en em es su firma. Botones rellenos con forma de píldora.

Color

Color.

Dos paletas y un solo azul. La clara, con la regla 60/30/9/1, viste las landings de anuncios y las legales. La negra del sistema Raw viste la home. El acento Signal Blue es el mismo en las dos.

01 · PALETA

12 swatches operativos.

Background01.01
#FAFAFA--bg

RGB 250 · 250 · 250

Background principal de toda la marca. 60% de superficie.

Surface01.02
#FFFFFF--surface

RGB 255 · 255 · 255

Cards, paneles, dropdowns. Capa elevada sobre bg.

Surface-201.03
#F4F4F5--surface-2

RGB 244 · 244 · 245

Hovers, segunda capa, bandas alternas (section-band).

Surface-301.04
#E4E4E7--surface-3

RGB 228 · 228 · 231

Borders fuertes, scrollbar tracks, dividers gruesos.

Foreground01.05
#09090B--fg

RGB 9 · 9 · 11

Texto primario, headlines, fondo inverso (section dark).

Accent01.06
#3B82F6--accent

RGB 59 · 130 · 246

ACENTO 1%. CTAs, em itálicas, dots timeline, números 01-NN.

Accent-201.07
#60A5FA--accent-2

RGB 96 · 165 · 250

Hover en links secundarios, glows decorativos.

Accent-dark01.08
#2563EB--accent-dark

RGB 37 · 99 · 235

Hover / active de Accent en botones primarios.

Muted01.09
#71717A--muted

RGB 113 · 113 · 122

Texto secundario, body de soporte. AA sobre bg.

Muted-201.10
#A1A1AA--muted-2

RGB 161 · 161 · 170

Captions mono, labels técnicos. Solo texto grande.

Muted-301.11
#D4D4D8--muted-3

RGB 212 · 212 · 216

Placeholders desactivados, dots inactivos del timeline.

Border01.12
rgba(0,0,0,0.08)--border

RGB 0 · 0 · 0 · 0.08

Borders sutiles, dividers, separadores de cards.

02 · PROPORCIÓN

Ratio 60 · 30 · 9 · 1.

El acento Signal Blue ocupa solo el 1% de la superficie. Cada aparición pesa. Si aparece en el 10% pierde fuerza y la marca se desangra.

60 · BG
30 · FG
9 · SURFACE
1

RATIO DE SUPERFICIE · LANDING TÍPICA

02.01

03 · CONTRASTE

WCAG 2.1 calculado.

Combinaciones reales con ratio numérico y veredicto. Las marcadas FAIL están prohibidas en cualquier superficie productiva.

Contraste del sistema claro sobre fondo off-white
#ForegroundBackgroundRatioResultadoNota
03.01ForegroundBackground19.3 : 1AAA—
03.02ForegroundSurface18.9 : 1AAA—
03.03MutedBackground4.5 : 1AA—
03.04Muted-2Background2.5 : 1AA · LARGE ONLYSolo texto grande ≥18pt. Prohibido en body.
03.05AccentBackground3.8 : 1AA · LARGE ONLYSolo headlines / CTAs grandes. No body.
03.06WhiteAccent3.9 : 1AA · LARGE ONLYPara CTAs (semibold ≥14px). Prohibido en text small.
03.07Muted-2Accent1.6 : 1FAIL · DO NOT USECombinación prohibida en cualquier contexto.

04 · PALETA RAW

La home va en negro.

Cuatro colores y nada más. Sobre negro el azul gana contraste, así que aquí sí vale para texto pequeño. El blanco puro se reserva a titulares y enlaces; el texto de apoyo baja al 80% para que el titular siga mandando.

Negro
#000000background

RGB 0 · 0 · 0

Fondo de toda la home. Es el 60% de la superficie y el que hace que el azul pese.

Hormigón
#0B0B0B.raw-concrete

RGB 11 · 11 · 11

Gris casi negro con ruido encima y fundido a negro. Menú, barra fija y bandas de sección.

Raw accent
#3B82F6--raw-accent

RGB 59 · 130 · 246

El mismo Signal Blue del sistema claro. Cinta, bordes del menú y bloque del diagnóstico.

Raw accent-2
#60A5FA--raw-accent-2

RGB 96 · 165 · 250

Azul claro para texto sobre negro: palabra destacada del titular, cifras y hover de los enlaces.

Contraste de la paleta Raw sobre fondo negro
#TextoFondoRatioResultadoNota
04.05BlancoNegro21 : 1AAA—
04.06Raw accent-2Negro8.3 : 1AAA—
04.07Raw accentNegro5.7 : 1AAVale también para texto pequeño, al revés que sobre fondo claro.
04.08BlancoRaw accent3.7 : 1AA · LARGE ONLYSolo el enlace grande del diagnóstico. Nunca en texto pequeño.
Tipografía

Tipografía.

Cuatro fuentes repartidas en dos parejas que no se mezclan. Bebas Neue e Inter visten la home; Barlow y Barlow Semi Condensed, las landings de anuncios y las legales. Poppins y JetBrains Mono ya no se cargan.

01 · FAMILIAS

Dos por sistema, y no se cruzan.

Dentro de cada pareja, la variedad sale del peso y del espaciado, no de meter una fuente más. Una página lleva una pareja entera.

Aa01.01 · RAWTITULARES

Bebas Neue

400

Condensada y en mayúsculas por diseño. Sostiene titulares de 60 a 170 px con el interlineado en 0.92. Es la que da el aire de cartel de gimnasio. No se usa nunca en párrafos.

Aa01.02 · RAWTEXTO Y APOYO

Inter

400 · 500 · 600

Todo lo que no es titular en la home. En su versión de apoyo va en mayúsculas con 0.18em de separación entre letras, y por eso se limita a dos o tres líneas: en párrafos largos cansa.

Aa01.03 · ATLETATEXTO

Barlow

400 · 500 · 600 + itálica

Cuerpo de las landings de anuncios, las páginas legales y este manual. Legible de 13 a 18 px. Sustituyó a Poppins en septiembre de 2026.

Aa01.04 · ATLETATITULARES Y CIFRAS

Barlow Semi Condensed

600 · 700 + itálica

Titulares, botones y números. Su itálica azul en em es la firma del sistema claro. Ocupó el sitio de JetBrains Mono, que ya no se carga en ninguna página.

02 · JERARQUÍA

12 tokens tipográficos.

Los tres primeros son del sistema Raw y se enseñan sobre negro, que es donde viven. Cada token trae tamaño, peso, espaciado y para qué sirve.

raw-display

02.01

clamp(60 → 120px) · 0.92

w400

Tu trabajo está resuelto

Titular de la home. Uno por pantalla.

raw-outline

02.02

clamp(56 → 170px) · trazo 1.5px

w400

Método

Titular de sección, solo el contorno. Firma del sistema Raw.

raw-lead

02.03

13-19 · 0.18em · 1.55

w500

Online y presencial en Bizkaia

Apoyo bajo el titular. Máximo dos o tres líneas.

display

02.04

clamp(48 → 128px) · -4px

w200 / 300

De inseguro a fuerte y confiado

Hero brutal. Una vez por pantalla.

h1

02.05

clamp(40 → 84px) · -3px

w200 / 300

Acompañamiento, no entrenamiento.

Apertura de sección principal.

h2

02.06

clamp(28 → 56px) · -2px

w200 / 300

Estructura. Seguimiento. Dirección.

Subsección dentro de un bloque.

h3

02.07

20 · -0.5px

w500

Plan de entrenamiento adaptado

Títulos de cards y listas destacadas.

lead

02.08

18 · 1.7

w300

Cero atajos. Cero postureo. Mes a mes hasta tener un físico que represente tu disciplina.

Subheadlines y descripciones de apertura.

body

02.09

15 · 1.65

w300

Cuerpo de texto estándar. Una idea por párrafo, frases cortas, ritmo de lectura limpio.

Texto principal de secciones explicativas.

body-sm

02.10

13 · 1.6

w300

Texto secundario, notas al pie, descripciones complementarias.

Microcopy, hints, descripciones de cards pequeñas.

eyebrow

02.11

11 · 3.5px tracking

w500

EYEBROW · 11PX · 3.5PX

Eyebrows de sección, badges, tags accent.

caption-mono

02.12

11 · 1.5px tracking

w400

CAPTION · 11PX · 1.5PX

Captions, counters NN.MM, labels técnicos.

03 · FIRMA

Una firma por sistema.

En Atleta la firma es la em itálica azul, en titulares, texto y cifras. En Raw es el titular en contorno con una palabra en azul claro. Cada página usa la suya y no la de la otra.

03.01 · EN VIVO

EN HEADLINE

De inseguro a fuerte.

EN BODY

Acompañamiento real cada semana — peso, fotos, audios, bajones. Los resultados vienen cuando hay alguien detrás que no te suelta.

EN STAT

1:1

03.02 · CSS

em {
  font-style: italic;
  color: var(--accent);
  font-weight: 300;
}

Tres líneas. Aplica globalmente a todo <em> en la página. No usar italic en headings ni body normal — solo en em.

03.03 · FIRMA RAW

Método

Tu trabajo está resuelto. Tu cuerpo no.

03.04 · CSS

.raw-outline {
  color: transparent;
  -webkit-text-stroke: 1.5px #fff;
}

El contorno abre la sección y la frase maciza remata debajo, con una sola palabra en azul claro. Si el contorno aparece dos veces seguidas pierde el efecto, así que va uno por sección.

Espaciado

Espaciado.

Escala 4 → 160px en saltos significativos. Ritmo vertical pedagógico. Radios premium grandes para cards y hero, pill total para botones.

01 · ESCALA

10 valores significativos.

Cada salto dobla o aumenta 50%. Evita 6/10/14 — rompen el ritmo visual. Si necesitas un valor intermedio, revisa primero si el diseño está mal pensado.

01.01space-14px
01.02space-28px
01.03space-416px
01.04space-624px
01.05space-832px
01.06space-1248px
01.07space-1664px
01.08space-2496px
01.09space-32128px
01.10space-40160px

02 · RITMO VERTICAL

Separación entre elementos.

No improvises padding-y. Esta es la matriz canónica de separación vertical de toda superficie FF.

space-4002.01

160px

Hero→Primera sección
space-3202.02

128px

Sección→Sección
space-2402.03

96px

Subsección→Subsección
space-1602.04

64px

Bloque→Bloque dentro de subsección
border02.05

1px (gap-px)

Card→Card en grid
space-602.06

24px

Texto→Texto en stack

03 · RADIOS

Premium grande por defecto.

La marca defaultea a radios grandes (20-32px) como firma premium. Botones siempre pill. Cards siempre rounded-2xl.

--r-sm03.01
8px

Tags, badges pequeños, code inline

--r-md03.02
14px

Inputs, alerts, dropdowns

--r-lg03.03
20px

Cards, popovers

--r-xl03.04
26px

Cards destacadas, modal estándar

--r-2xl03.05
32px

Hero cards, pricing featured, bento

--r-pill03.06
pill

Botones, tabs, paginación, badges

04 · GRIDS

3 breakpoints, 3 grids.

04.01

Mobile

≤640px
4 colsgutter 16pxmargin 24px

Una columna efectiva. Cards full-width.

04.02

Tablet

641-1024px
8 colsgutter 20pxmargin 32px

Layouts de 2 columnas. Bento grids.

04.03

Desktop

≥1025px
12 colsgutter 24pxmargin 48px

Layouts editoriales. Max-width 1240px.

Iconos

Iconos.

Lucide React. Stroke 1.5px, outline only — sin rellenos, sin duotone. Set curado de 29 iconos críticos agrupados por categoría.

01 · SET CURADO

30 iconos por categoría.

Si un icono que necesitas no está aquí, primero pregunta si la superficie lo necesita realmente. La paleta visual cabe.

01.01

NAVEGACIÓN

07 ITEMS
arrow-right
chevron-right
chevron-down
search
plus
x
check
01.02

COMUNICACIÓN

05 ITEMS
mail
phone
message-square
message-circle
send
01.03

ESTADO · FEEDBACK

05 ITEMS
info
circle-help
settings
shield
play
01.04

TIEMPO · AGENDA

03 ITEMS
calendar
clock
timer
01.05

PERSONAS

02 ITEMS
user
users
01.06

ENTRENAMIENTO · MÉTRICAS

08 ITEMS
dumbbell
target
trophy
flame
heart
activity
bar-chart-3
trending-up

02 · REGLAS

Cómo usarlos, qué evitar.

02.01 · DO

  • 01

    Stroke 1.5px siempre.

    Nunca mezclar weights distintos en la misma superficie.

  • 02

    Tamaño en pasos de 4.

    12 · 14 · 16 · 20 · 24px. Nunca 13/15/22.

  • 03

    Color hereda del texto.

    text-current por defecto. Accent solo en CTAs y status.

  • 04

    aria-hidden si va con texto.

    El icono es decorativo cuando el label adyacente describe la acción.

02.02 · DON'T

  • 01

    No mezclar librerías.

    Solo Lucide. Si falta un icono, se compone con primitivos.

  • 02

    No rellenos sólidos.

    Rompen el lenguaje outline editorial de la marca.

  • 03

    No iconos a ≥32px.

    Si necesitas tamaño grande, usa ilustración o el logo.

  • 04

    No emojis como iconos.

    El brand es vectorial y monocromo. Emojis son texto.

Componentes UI

Componentes.

Librería primitiva completa. Cada componente: forwardRef, focus ring visible, aria correcto, disabled/loading exclusivos. 32 piezas — todas importables desde @/app/brand-kit/components/ui.

01 · PRIMITIVOS

Buttons, inputs, badges, avatars.

Button · variantes

<Button variant size />

Primary domina la acción crítica. Secondary, subtle y ghost se reservan para acciones de soporte. Link en navegación textual.

Button · tamaños y estado

size · loading · disabled

loading bloquea el botón vía disabled={disabled || loading} y publica aria-busy.

DefaultEn vivoPremiumActivoError

Badge

<Badge tone dot pulse />

Metadata corta. Pulse solo para estados críticos (en cola, error, en vivo).

Hipertrofia1:1OnlineEspaña

Tag

<Tag />

Etiqueta técnica neutra para chips de categoría.

Avatar · solo y grupo

<Avatar /> · <AvatarGroup max />

Sin foto cae a iniciales. AvatarGroup colapsa después del max con un contador.

Clientes43+Activos
Historias250+Reales
Cierre60%Tasa

Stat

<Stat label value delta />

Métricas marketing. Display extralight, label en mono uppercase.

Solo te escribo yo. Sin newsletter.

Input · Field

<Field label hint error>

Field vincula label, hint y error vía aria-describedby. children es función — recibe id, aria-describedby, aria-invalid.

Textarea · Select

<Textarea /> · <Select />

Mismos estados y mismos focus rings que Input.

Checkbox · Radio · Switch

form controls

Todos comparten focus ring accent/35 y aria roles nativos (role='switch' en Switch).

Aún no hay transformaciones aquí

Sube la primera comparativa antes/después para verla aparecer.

EmptyState

<EmptyState icon title description action />

Para listas vacías, transformaciones sin filtros, paginación vacía.

02 · FEEDBACK

Alerts, banners, loaders, progress.

Alert · 4 tonos

<Alert tone title />

role='alert'. Title opcional, body en sans light.

Verano empieza pronto. 6 plazas abiertas este mes.

Banner

<Banner action dismissible />

Fondo accent, ancho completo. Usar para anuncios temporales (oferta, plazas).

Toast + useToast

useToast()

Provider montado en layout. Hook push() encola notificaciones con duration por defecto 4s.

CargandoCargando

Spinner · DotsLoader · Skeleton

loading states

Spinner para bloqueos cortos, DotsLoader para envío de formularios, Skeleton para layouts en carga.

74%

Progress · ProgressCircle

<Progress value /> · <ProgressCircle />

Barra horizontal para tareas largas. Circle para resúmenes y stats.

03 · OVERLAY

Modal, drawer, floating elements.

Modal

<Modal open onClose />

Portal + backdrop blur. Esc cierra. Focus traps via tabIndex=-1.

Drawer

<Drawer side />

Lateral right/left/bottom. Scroll interno, footer fijo opcional.

Tooltip · Popover · Dropdown

floating elements

Tooltip = info contextual sobre hover/focus. Popover = contenido rico. Dropdown = menú de acciones.

04 · NAVEGACIÓN

Tabs, breadcrumb, pagination, stepper.

Programa enfocado en ganar masa muscular con superávit calórico controlado.

Tabs

<Tabs><TabList><Tab>…

Roving tabindex + flechas izquierda/derecha. Solo el tab activo es tabbable.

Breadcrumb

<Breadcrumb items />

aria-current='page' en el último. Separadores ChevronRight 12px.

Pagination

<Pagination page total onPageChange />

Compacta con elipsis cuando total > 7. aria-current en página activa.

  1. Reservar llamada30 min sin compromiso
  2. DiagnósticoDefinimos objetivo
  3. PlanRecibes tu protocolo
  4. SeguimientoSemanal hasta resultado

Stepper

<Stepper current steps />

Para procesos lineales (onboarding, checkout, alta).

05 · DISCLOSURE

Accordion, collapsible.

Accordion

<Accordion type='single'>

single (1 abierto) o multiple. aria-expanded + aria-controls en cada item.

Collapsible

<Collapsible trigger>

Versión ligera del Accordion para un solo bloque colapsable.

Cómo importar

import { Button, Field, Input, useToast } from "@/app/brand-kit/components/ui";

function Hero() {
  const { push } = useToast();
  return (
    <Field label="Email" required>
      {(p) => <Input {...p} type="email" placeholder="tu@email.com" />}
    </Field>
  );
}
Sistema gráfico

Sistema gráfico.

Los patrones que visten el fondo sin competir con el texto. Primero los del sistema Raw, que son los de la home; después los del claro, que siguen en las landings de anuncios. Todos viven en globals.css.

01 · SISTEMA RAW

5 recursos de la home.

Están hechos solo con CSS, sin imágenes y sin librerías de animación, así que la home se ve así sin pagarlo en velocidad. Lo que la frena es el vídeo del hero y el píxel de Meta.

.raw-concrete01.01

Gris muy oscuro con un ruido SVG encima y fundido a negro. Menú, barra fija y bandas de sección. El ruido va dentro del CSS, así que no descarga ninguna imagen.

Método
.raw-outline01.02

Titular sin relleno, solo el trazo blanco de 1.5px. Abre sección. Uno por sección: repetido seguido deja de llamar la atención.

.raw-smoke01.03

Tres manchas blancas desenfocadas en la parte baja. Funde el vídeo del hero con la sección siguiente. Solo en el hero.

  • Constancia
  • Estructura
  • Dirección
.raw-marquee01.04

Cinta azul inclinada con el texto avanzando en bucle de 38 s. Es lo único que se mueve solo en la home. Una por página. Aquí arranca al apuntarla o al entrar con el teclado.

Háblame ahora
.raw-link01.05

El CTA de la home: texto en Bebas con una línea de 2px debajo, que pasa a azul claro al apuntarlo. Sustituye al botón relleno en todo el sistema Raw, menos en el bloque del diagnóstico.

02 · SISTEMA ATLETA

8 patrones operativos.

Los de las landings de anuncios, las páginas legales y este manual. Cada uno con su clase, su muestra y dónde se usa.

.grid-bg02.01

Grid de fondo con mask radial. Líneas a 56px, opacidad 0.04. Reservado al hero.

.radial-glow-blue02.02

Dos gradientes elípticos del accent al 8% y 5%. Para hero, CTA, pricing featured.

Sobre band

.section-band02.03

Banda surface-2 con border-top/border-bottom. Separa secciones sin heading adicional.

.diagonal-texture02.04

Líneas a 45º del accent al 6%. Para superficies de soporte (FAQ, footer) sin gritar.

CUPO LIMITADO
.pulse-dot02.05

Pulso accent 2s ease-in-out infinito. Solo badges live, en vivo, escasez.

01
.stroke-number02.06

Números display outline (sin relleno). Para sección Método y numeración 01-10.

FFGLASS
.glass-nav02.07

Translucencia blanca 78% + backdrop-blur 20px. Solo navbar fijo.

Quiero mi plaza →
.shadow-cta02.08

Halo accent + sombra negra suave. Solo botones primarios.

03 · BAR ACCENT SYSTEM

Barras, líneas, dividers.

Gramática visual recurrente. Cada elemento tiene un rol claro — eyebrow, énfasis, callout, separador.

EYEBROW

Horizontal accent · 32×1px

03.01

Eyebrow → línea → label. Marca inicio de subsección.

Underline trio · 3/2/1px

03.02

Énfasis editorial bajo headline. Tres capas decrecientes.

No empecé fuerte. Me hice fuerte.

Vertical accent · 3px

03.03

Callouts, quotes destacados, blockquotes.

Divider con dot

03.04

Separar bloques de contenido similar sin border completo.

04 · REGLAS

Cómo aplicar el sistema.

04.01

Un patrón por sección como máximo. Mezclar grid-bg + radial-glow es la excepción heredada del hero.

04.02

Patrones siempre en fondo, nunca encima de copy.

04.03

No se mezclan los dos sistemas en una misma página: o todo Raw, o todo claro.

04.04

Lo que se mueve solo, una cosa por página, y siempre apagado con «reducir movimiento» activado.

04.05

Cero degradados purpurinos, cero blobs animados, cero ilustraciones isométricas.

04.06

Si un patrón no aparece aquí, no existe en la marca.

Mockups

Mockups.

Cómo se ve la marca aplicada en producto. Hero de landing, dashboard cliente, chat móvil con Íñigo, social card 1:1. Todos construidos con primitivos de la librería.

01 · LANDING HERO

Aplicación dominante de la marca.

1:1 REAL · CUPO LIMITADO

DEJA DE
ENTRENAR PARA NADA.

Decenas de tíos antes que tú tenían tu mismo gimnasio y la misma sensación de no avanzar. Hoy están donde tú quieres estar.

01.01

Hero landing v3

Aplicación principal: badge, headline brutal, subheadline con números, CTA single-purpose. Esta es la versión productiva.

FF
COACHING
DASHBOARD
Adherencia92%Sem 04
Sesiones14+3 vs s.03
Peso−2.1kgRecomp
Próximas sesionesEsta semana
Push
L · 18:30
Pull
L · 18:30
Pierna
L · 18:30
Full body
L · 18:30
01.02

Dashboard cliente

Stats al pie + agenda semanal. Componentes primitivos (Stat, Tag, Card).

FFDM

¿Cómo lo veis hoy?

Íñigo · 9:14

Subo 2kg en press banca. Listo.

9:21

A por ello. Mantén la pausa abajo.

Íñigo · 9:22
Mensaje…
01.03

Chat móvil con Íñigo

WhatsApp / DM con cliente. La burbuja del cliente va en accent — su voz domina.

EN VIVO

De inseguro a
fuerte y confiado.

ffcoaching.es
01.04

Social card 1:1

IG feed, OG share. Misma firma que landing — grid-bg + radial-glow + em italic. Badge live arriba.

Templates

Templates.

Plantillas listas con copy real. Landing de captura, pricing card, post de blog, email transaccional. Cero Lorem ipsum.

01 · 4 SUPERFICIES

Copy real en cada plantilla.

01.01

LANDING · CAPTURA EMAIL

Empieza hoy gratis.

Llévate la guía que uso con mis clientes para empezar a mejorar tu físico con estructura. Sin coste.

SIN SPAM · SOLO TE ESCRIBO YO

Landing capture

Lead magnet · captura email arriba con promesa concreta + reassurance mono.

01.02

Pricing card · featured

Card destacada con scale + shadow-featured. Lista 6 features máximo + CTA full-width.

01.03
Entrenamiento4 MIN DE LECTURA

Por qué cambiar de rutina cada 4 semanas te frena.

La mayoría rota ejercicios cada mes "para no aburrir el cuerpo". El cuerpo no se aburre — el ego sí. Lo que necesitas es progresión medible en pocos movimientos: añadir 2,5 kg, una repetición más, dos segundos de pausa al inicio del concéntrico.

Cambiar es cómodo. Progresar duele. Y el cuerpo solo responde a lo segundo.

Post blog · long-form

Tag categoría + lectura mono + headline editorial. Body 14-16px con em itálica en frases clave.

01.04
DE: ÍÑIGO · FF COACHINGASUNTO

La guía que pediste. Y una cosa más.

Hola,

Aquí tienes la guía. Ábrela en plan: 20 minutos hoy, marca las dos cosas que vas a aplicar esta semana, cierra.

Tres acciones aplicadas mañana valen más que el libro entero leído sin actuar.

Si quieres que lo veamos juntos antes de empezar, reservas una llamada aquí. Sin compromiso.

— Íñigo

Email transaccional

Subject con em italic. Cuerpo plano sin imágenes — la voz lleva el peso. Link accent.

Voz y tono

Voz.

Cómo escribe la marca. Cinco atributos justificados, vocabulario sí/no, ejemplos de copy real con la firma em itálica azul.

01 · ATRIBUTOS

Cinco atributos justificados.

Si una pieza no encarna alguno de estos cinco, no suena a FF Coaching.

Directa01.01

Una idea por frase. Verbo activo. Sin rodeos, sin disclaimers, sin 'puede que'. El lector ya está cansado de gurús.

Sin humo01.02

Datos antes que adjetivos. Si dices 'transformación' la respaldas con un antes/después o un caso. Si no, no lo digas.

Masculina01.03

Habla a un adulto, no a un adolescente ni a un coach. Vocabulario llano, no broseo, no jerga gym.

Honesta01.04

Si algo no es para todos, lo dices. Si requiere disciplina, lo dices. No vendemos atajos.

Premium01.05

Tono tranquilo y seguro. La autoridad no necesita gritar. Cero exclamaciones.

02 · VOCABULARIO

Palabras que sí, palabras que no.

02.01 · SÍ

acompañamientoestructuradireccióndisciplinaoficiocompromisoclaridaddecisiónsalto de nivelconstruir

02.02 · NO

secretotrucohackfórmula mágicatransformación radical en 7 díasrutina definitivahaz esto y verássúper guíaimparablebestia

03 · COPY REAL

Ejemplos productivos.

Copy en uso en landing, emails y microcopy. Repite la firma em italic azul con criterio.

Headline

De inseguro a fuerte y confiado.

03.01
Subheadline

Vengo de estar flaco. Hoy ayudo a hombres que quieren más de sí mismos a construir el físico y la confianza que merecen.

03.02
CTA primario

Quiero empezar →

03.03
CTA secundario

Ver resultados reales

03.04
Microcopy de error · email inválido

Necesito un email válido para enviarte la guía.

03.05
Email · asunto

La guía que pediste. Y una cosa más.

03.06
Email · primera línea

Ábrela en plan: 20 minutos hoy, marca las dos cosas que vas a aplicar, cierra. Tres acciones aplicadas mañana valen más que el libro entero leído sin actuar.

03.07
Método operativo

Método.

Quién decide qué, dónde viven los assets, cómo se versiona la marca. Si está aquí, no se discute en cada PR.

01 · MATRIZ DE DECISIÓN

Quién decide qué.

Decide / Aprueba / Ejecuta. Si no está aquí, se pregunta al director creativo.

#AssetDecideApruebaEjecuta
01.01Tokens en globals.cssDirector creativoÍñigoFrontend
01.02Copy comercial (hero, CTA)ÍñigoDirector creativoCopy / Claude
01.03Componentes UIFrontendDirector creativoFrontend
01.04Assets sociales (PFP, banner)DiseñoÍñigoDiseño
01.05Cambios de logo (FFLogo)Director creativoÍñigoFrontend
01.06Pricing & ofertaÍñigo—Frontend

02 · UBICACIONES

Dónde viven los assets.

02.01
src/app/globals.css

Tokens canónicos (@theme inline)

02.02
src/components/ff-logo.tsx

Logo por código (3 sizes)

02.03
public/video-hero.mp4

Vídeo hero horizontal + vertical

02.04
public/retrato-*.jpg

Retratos Íñigo (BN + color)

02.05
src/app/brand-kit/components/ui/

Librería UI (32 componentes)

02.06
src/proxy.ts

Routing multi-host (Next 16)

03 · VERSIONADO + FLOW

Cómo cambia la marca.

03.01 · VERSIONADO

  • v1.X.0

    Añadir sección, añadir componente, ajustes menores no breaking.

  • v2.0.0

    Cambio de paleta o tipografía. Breaking. Documentar tabla antes/después.

  • vX.Y.Z

    Cada cambio en tokens bumpea versión y se documenta en CHANGELOG.md sin excepción.

03.02 · FLUJO DE CAMBIO

  1. 01

    Proponer cambio en issue o conversación corta. No abrir PR ciego.

  2. 02

    Si afecta tokens: actualizar globals.css primero. El resto se deriva.

  3. 03

    Validar contraste WCAG real (no aproximación) en cualquier nuevo par color/texto.

  4. 04

    Si afecta componentes: añadir entrada en sección 07 y 16 antes de mergear.

  5. 05

    Bumpear versión + entrada en CHANGELOG. Sin esto el merge no entra.

Ecosistema

Ecosistema.

Dónde vive la marca y qué pesa más en cada canal. La identidad no cambia; el énfasis sí.

01 · 6 CANALES

Reglas por superficie.

Tres reglas concretas por canal. Si un canal no aparece aquí, no existe en el ecosistema FF.

Web

ffcoaching.es

01.01
  • 01Headline directo + subheadline con em itálica azul como firma.
  • 02CTA dominante: v3 → Cal.com (link directo, no embed).
  • 03Lead magnet eliminado en v3 — cero distracciones.

Instagram

@inigoo00

01.02
  • 01Reels orientados a oficio, no a baile/tendencia.
  • 02Carrusel: portada display + slides en obsidiana.
  • 03Stories: highlight 'Acceso clientes' lleva a Skool.

YouTube

Long-form

01.03
  • 01Miniaturas: foto real + 3 palabras display + 1 em accent.
  • 02Sin clickbait. Sin flechas rojas.
  • 03Outro fijo: CTA llamada + tarjeta lateral guía.

Comunidad

Skool externo

01.04
  • 01Sustituye a la videoteca propia de la v1.
  • 02Directos en vivo cada viernes.
  • 03Branding mínimo (no replicar toda la web).

Email

Cal.com + transaccional

01.05
  • 01Asunto: una promesa concreta. Usar em itálica en una palabra.
  • 02Cuerpo en sans 16px font-light, máximo 6 párrafos cortos.
  • 03Firma: Íñigo (no FF Coaching). La relación es personal.

WhatsApp

+34 630 02 55 80

01.06
  • 01Primer mensaje siempre desde Íñigo, no automático.
  • 02Voz cercana, sin emojis profesionales.
  • 03CTA a llamada solo después de confirmar fit.
Do's & Don'ts

Reglas.

Lo que separa la marca aplicada con criterio del cover obvio del sector. Ocho a cada lado, todas específicas.

01 · CRITERIO OPERATIVO

8 + 8 reglas concretas.

01.01 · DO

08 PRINCIPIOS
  • 01

    Signal Blue al 1%

    Un acento por pantalla máximo. Si aparece más, se desangra.

  • 02

    Una base por página

    Negro en la home y en los opt-ins; off-white #FAFAFA en las landings de anuncios y las legales. Nunca las dos en la misma página.

  • 03

    Hero con video real o grid-bg

    Nunca stock photo. La autoridad se construye con material propio.

  • 04

    Eyebrows mono uppercase

    Tracking 3.5px, color accent. Aparecen al inicio de cada subsección.

  • 05

    Titulares con su fuente y su peso

    Bebas Neue a 0.92 de interlineado en Raw; Barlow Semi Condensed en 600/700 con tracking negativo en el claro.

  • 06

    Una firma por sistema

    La em itálica azul en el claro, el titular en contorno en Raw. Si una página no lleva la suya, no parece de la marca.

  • 07

    Un solo CTA con peso por pantalla

    Píldora rellena en el sistema claro, enlace subrayado en Raw. Sin terciarios: el ojo se confunde.

  • 08

    Iconos Lucide outline 1.5px

    Tamaño en múltiplos de 4 (12/16/20/24). Mismo stroke en todos.

01.02 · DON'T

08 LÍMITES
  • 01

    No segundo color de acento

    Rojo, naranja, verde. Cero. Solo Signal Blue para énfasis.

  • 02

    No mezclar las dos parejas de fuentes

    Bebas y Inter van juntas; Barlow y Barlow Semi Condensed, juntas. Ninguna página cruza una con otra, y no se añade una quinta.

  • 03

    No accent sobre fg en texto pequeño

    No pasa WCAG AA. Solo en CTAs grandes (≥18pt semibold).

  • 04

    No emojis

    Ni en producto ni en manual. Iconos vectoriales siempre.

  • 05

    No animaciones bouncy

    Easing cubic-bezier(0.22, 1, 0.36, 1), duración ≤300ms.

  • 06

    No degradados purpurinos

    Cero blobs animados, cero isométricos, cero glassmorphism saturado.

  • 07

    No copy de gurú

    'Transformación radical', 'fórmula', 'hack', 'secreto', 'bestia'. Fuera.

  • 08

    No párrafos largos en mayúsculas

    El texto de apoyo de Raw va espaciado y en mayúsculas, así que se queda en dos o tres líneas. Más que eso cansa y se deja de leer.

Descargas

Descargas.

Todos los assets oficiales servidos como archivos reales. Cero pendientes, cero links rotos.

01 · BRAND PACK

Todo en un solo ZIP.

La opción rápida: descarga el pack completo y tienes el sistema listo para arrancar otro proyecto, hacer handoff o archivar.

03 · INTEGRACIÓN

Cómo importar tokens en otro proyecto.

Tres líneas en tu globals.css y heredas paleta + tipografía + firma de marca. El resto lo decide cada proyecto destino.

15.03 · GLOBALS.CSS DESTINO

ARCHIVO COMPLETO
@import "tailwindcss";

:root {
  --bg:      #FAFAFA;
  --surface: #FFFFFF;
  --fg:      #09090B;
  --muted:   #71717A;
  --accent:  #3B82F6;
  /* … resto en brand-tokens.css */
}

@theme inline {
  --color-bg:      var(--bg);
  --color-surface: var(--surface);
  --color-fg:      var(--fg);
  --color-muted:   var(--muted);
  --color-accent:  var(--accent);
}

em {
  font-style: italic;
  color: var(--accent);
  font-weight: 300;
}
Librería UI

Librería.

Versión profunda de §07. Cada componente con preview, código copiable y nota de accesibilidad. Importable desde @/app/brand-kit/components/ui.

01 · INSTALACIÓN

Cómo importar en otro proyecto.

5 pasos. La librería UI no depende de shadcn ni de ningún registry — es código propio copiable.

16.01 · 5 PASOS

SHELL
1. Copiar src/app/globals.css (tokens + @theme inline)
2. Copiar src/lib/utils.ts (cn helper)
3. Copiar src/app/brand-kit/components/ui/ → components/brand/ui/
4. npm install clsx tailwind-merge lucide-react
5. import { Button } from "@/components/brand/ui";

02 · CATÁLOGO COMPLETO

15 entradas documentadas.

Cada componente con preview, código copiable y nota de accesibilidad.

02.01 · PRIMITIVO

Button
Primitivo

Button

<Button />

6 variantes × 4 tamaños. loading bloquea y publica aria-busy.

Button
AA
Keyboard. Enter / Space activan. Foco visible vía ring-3 accent/35. ARIA. aria-busy en loading, disabled bloquea interacción.

02.02 · PRIMITIVO

Badge · Tag
Primitivo

Badge · Tag

<Badge /> · <Tag />

Metadata. Badge admite tone, dot, pulse. Tag es etiqueta neutra.

Badge · Tag
En vivoPremiumErrorHipertrofia1:1
AA
Decorativos por defecto — añade aria-label si el valor no aparece en el texto adyacente.

02.03 · FORM

Input · Field
Form

Input · Field

<Field><Input /></Field>

Field vincula label, hint y error con aria-describedby + aria-invalid.

Input · Field

Solo te escribo yo.

AA
ARIA.label[htmlFor] ↔ input[id], errores como aria-describedby + aria-invalid="true".

02.04 · FORM

Textarea · Select
Form

Textarea · Select

<Textarea /> · <Select />

Mismos estados que Input. Select renderiza Chevron decorativo.

Textarea · Select
AA
Select usa el elemento nativo — keyboard y screen reader funcionan sin JS.

02.05 · FORM

Checkbox · Radio · Switch
Form

Checkbox · Radio · Switch

<Checkbox /> · <Radio /> · <Switch />

Wrapping label-as-container para clickable area amplia. Switch usa role='switch'.

Checkbox · Radio · Switch
AA
Click en la label dispara el control. Focus visible con ring-3. Switch publica role="switch" para SR.

02.06 · PRIMITIVO

Avatar · AvatarGroup
Primitivo

Avatar · AvatarGroup

<Avatar /> · <AvatarGroup max />

Iniciales como fallback. Group colapsa con contador +N.

Avatar · AvatarGroup
AA
Si la imagen es decorativa, alt="". Si identifica, alt con nombre real.

02.07 · PRIMITIVO

Stat · EmptyState
Primitivo

Stat · EmptyState

<Stat /> · <EmptyState />

Stat para métricas marketing. EmptyState para listas vacías.

Stat · EmptyState
Clientes43+Activos

Sin datos todavía

Sube tu primer registro.

AA
Stat es presentacional. EmptyState mantiene jerarquía h3 + p semántica.

02.08 · FEEDBACK

Alert
Feedback

Alert

<Alert tone />

4 tonos en línea. Body en sans light. Publica role='alert'.

Alert
AA
role="alert" — el screen reader interrumpe para anunciarlo.

02.09 · FEEDBACK

Toast + useToast
Feedback

Toast + useToast

useToast() · <ToastProvider />

Provider montado en layout. Hook push() encola y auto-cierra a 4s.

Toast + useToast
AA
Region role="region" aria-label. Cada toast role="status" — anunciado sin interrupción.

02.10 · FEEDBACK

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton
Feedback

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton

loading states

Granularidad de feedback según duración esperada.

Spinner · DotsLoader · Progress · ProgressCircle · Skeleton
CargandoCargando
74%
AA
Spinner y loaders publican role="status" + aria-live="polite".

02.11 · OVERLAY

Modal · Drawer
Overlay

Modal · Drawer

<Modal /> · <Drawer />

Portal + backdrop blur. Esc cierra. body overflow hidden mientras abierto.

Modal · Drawer
AA
role="dialog" aria-modal aria-labelledby. Focus al abrir, restaurado al cerrar.

02.12 · OVERLAY

Tooltip · Popover · Dropdown
Overlay

Tooltip · Popover · Dropdown

floating elements

Tooltip = hover info. Popover = contenido rico. Dropdown = menú de acciones.

Tooltip · Popover · Dropdown
AA
Tooltip ↔ aria-describedby. Dropdown ↔ aria-haspopup="menu" + aria-expanded + role="menu".

02.13 · NAVIGATION

Tabs
Navigation

Tabs

<Tabs><Tab /></Tabs>

Roving tabindex + arrow keys. Solo el tab activo es tabbable.

Tabs

Panel A

AA
role="tablist", role="tab", aria-selected, aria-controls. Flechas izq/der mueven foco.

02.14 · NAVIGATION

Breadcrumb · Pagination · Stepper
Navigation

Breadcrumb · Pagination · Stepper

navigation primitives

Pagination con elipsis si total > 7. Stepper para procesos lineales.

Breadcrumb · Pagination · Stepper
  1. Llamada
  2. Diagnóstico
  3. Plan
  4. Seguimiento
AA
Breadcrumb usa aria-label="Migas de pan" + aria-current="page". Pagination aria-current en activa.

02.15 · DISCLOSURE

Accordion
Disclosure

Accordion

<Accordion />

Accordion single o multiple. aria-expanded + aria-controls en cada item.

Accordion

Plan de entrenamiento, nutrición, revisiones semanales.

AA
aria-expanded + aria-controls en cada trigger. Panel con role="region" y aria-labelledby.