Francisco López

Sistema de diseño

Design System

El esqueleto compartido por todas las páginas del sitio: rejilla, tokens de layout, ritmo vertical, jerarquía tipográfica y comportamiento en claro y oscuro. No define el contenido de ninguna sección — define cómo respira todo lo que va dentro. Es el criterio interno con el que se construye y se audita.

1360px
Ancho máximo del contenedor
4 Breakpoints
640 · 768 · 1024 · 1280
42rem
Medida de lectura (~91 car.)
AA→AAA
Objetivo de accesibilidad
(01)

Rejilla de página

Contenedor amplio para maquetación; medida de lectura estrecha para el texto corrido.

Rejilla base: 12 columnasMedianil: var(--gutter) · 16–24pxLa franja marca las 12 columnas — usa el botón «rejilla» de arriba para alternarla.

Contenedor

Máximo 1360px, centrado. Por encima de xl los márgenes crecen; nunca se estira el contenido.

Márgenes (page-x)

clamp(1.25rem, 5vw, 2.5rem) — 20px en móvil, hasta 40px en escritorio.

Medida de lectura

El texto corrido nunca supera 42rem (~91 car.) aunque el contenedor sea ancho. La medida clásica cómoda va de 45 a 75 caracteres, así que 91 queda por encima — decisión consciente de contenedor amplio, no descuido.

(02)

Tokens de layout

La aportación propia de esta página. No existen en ningún otro sitio del sistema y pasan al repositorio al montar la web.

:root { }Copia de un vistazo
--container:1360px;
--page-x:clamp(1.25rem, 5vw, 2.5rem);
--gutter:clamp(1rem, 2.2vw, 1.5rem);
--measure:42rem;
--section-y:clamp(4.5rem, 9vw, 9rem);

Fijos, no editables en producción

--section-y y --measure tienen valor fijo: clamp(4.5rem, 9vw, 9rem) y 42rem. Ya no hay panel de ajuste — el ritmo es el mismo en todo el sitio.

Definidos una sola vez

Viven en el :root del sitio junto a los tokens de color; cada página los consume. Cambiar un valor aquí lo cambia en todas partes.

(03)

Breakpoints

base0 – 639px
Móvil

Una columna, todo apilado. aside encima del contenido. Tipografía en el mínimo del clamp.

sm≥ 640px
Móvil grande

Botones y metadatos en fila; sigue una columna de contenido.

md≥ 768px
Tablet

Aparece la retícula aside + contenido a dos columnas. Márgenes crecen.

lg≥ 1024px
Escritorio

Rejilla de 12 col completa; aside puede quedar sticky; grids de 3 tarjetas.

xl≥ 1280px
Escritorio amplio

Contenedor tope 1360px, centrado. Los márgenes absorben el ancho extra.

Coinciden con la escala de Tailwind del repo. Este documento aplica además tipografía y espaciado fluidos con clamp(): entre breakpoints el tamaño interpola de forma continua, sin saltos bruscos.

(04)

Ritmo vertical y espaciado

Escala de base 4px (Tailwind). El aire entre secciones es la herramienta principal de jerarquía.

Escala de espaciado

2xs8px
xs12px
sm16px
md24px
lg32px
xl48px
2xl64px
3xl96px
4xl128px

Ritmo entre secciones

--section-y · clamp(72 → 144px)
  • Entre secciones mayores: --section-y — 72px móvil → 144px escritorio.
  • Título de sección → contenido: 40px (2.5rem).
  • Entre bloques dentro de sección: 24–32px. Divisor hairline opcional.
  • Cada sección abre con un divisor de 1px var(--border) a todo el ancho.
(05)

Jerarquía tipográfica

Bricolage Grotesque (600) para titulares · Inter para texto y UI. Tamaños fluidos: móvil = mínimo del clamp, escritorio = máximo.

Discovery
NivelDisplay
FuenteBricolage 600
Escritorio80px / 5rem
Móvil44px
Interlineado1.0
UsoSolo Hero
Hitos
NivelH1
FuenteBricolage 600
Escritorio52px / 3.25rem
Móvil32px
Interlineado1.05
UsoTítulo de sección
Cómo trabajo
NivelH2
FuenteBricolage 600
Escritorio32px / 2rem
Móvil24px
Interlineado1.15
UsoSubsección
TheTool — SaaS B2B
NivelH3
FuenteBricolage 600
Escritorio20px / 1.25rem
Móvil18px
Interlineado1.3
UsoTítulo de tarjeta / caso
Resultados
NivelH4
FuenteBricolage 600
Escritorio16px / 1rem
Móvil16px
Interlineado1.4
UsoEncabezado menor
Investigo, prototipo, construyo y mido.
NivelBody L
FuenteInter 400
Escritorio18px / 1.125rem
Móvil17px
Interlineado1.6
UsoSubheadline, intro
Senior Product Manager con más de 10 años en SaaS B2B y B2C.
NivelBody
FuenteInter 400
Escritorio16px / 1rem
Móvil16px
Interlineado1.65
UsoTexto corrido (máx 42rem)
Cofundador & PM · May 2016 – Oct 2021
NivelSmall / meta
FuenteInter 400–500
Escritorio14px
Móvil14px
Interlineado1.5
UsoFechas, pies, etiquetas
SENIOR PRODUCT MANAGER · UX · SAAS
NivelEyebrow
FuenteInter 600 · UPPER
Escritorio13px
Móvil13px
Interlineado1.4
UsoKicker sobre título
(06)

Claro y oscuro

Mismo esqueleto, misma jerarquía de superficies: fondo → tarjeta → borde. Sin sombras pesadas — la profundidad la dan los hairlines y el contraste de superficie. El claro es papel cálido; el oscuro, azul profundo.

Modo claroDel discovery al dato.
Descargar CV
bg #F7F3EC · card #FCFAF6 · border #E7E4DD
Modo oscuroDel discovery al dato.
Descargar CV
bg #191D21 · card #21262B · border #2C333B

Regla de color

  • primary es el único color de acción. secondary / muted / accent permanecen neutros.
  • Enlaces, en dos reglas: primary para enlaces de contenido; foreground / muted-foreground para la navegación de chrome (nav, breadcrumb, footer).
  • Los tonos de marca decoran o firman el logo — con una excepción: brand-purple-accent es un tono de marca usado como texto sobre fondos invertidos (AA-large, ≥3:1). Splits y pasteles, nunca como texto.

Usa el conmutador de la cabecera para ver esta misma página en ambos modos.

(07)

Movimiento

150msMicrointeracciones: hover, foco, botones.
250msCambios de estado: acordeones, tabs.
600msScroll-reveal de entrada de sección.
easingcubic-bezier(.4, 0, .2, 1) — estándar.
  • Reveal = fundido + subida de 12px, escalonado ~60ms entre hijos.
  • Movimiento sobrio: nunca compite con el contenido.
  • prefers-reduced-motion: se desactivan transformaciones y auto-scroll. El contenido aparece siempre, aunque falle el JS.
Demo de scroll-reveal

Transición del nav — compartida por todo el sitio

  • Símbolo 48 → 28px y barra 80 → 64px, de forma continua con el scroll.
  • Las capas de color del split se extinguen antes de que el símbolo baje de 48px — nunca pasa por un estado de mala registración.
  • El wordmark se desvanece en opacidad sin recortar glifos: el hueco solo se colapsa cuando ya es invisible.
  • prefers-reduced-motion: salto entre estados, sin interpolar.
Francisco Lópezal cargar · 80px
con scroll · 64px · flat

Es la transición que ves ahora mismo en la cabecera de esta página.

(08)

Accesibilidad

La lista con la que se cierra cada página del sitio. AA como suelo no negociable; AAA siempre que se alcance sin coste visual.

Contraste medido

MediciónClaroOscuro
Texto principalforeground sobre background13,79:1AAA15,32:1AAA
primary como textoenlaces y acento7,01:1AAA8,36:1AAA
Texto sobre botónprimary-foreground sobre primary7,44:1AAA8,36:1AAA
muted-foregroundmuted sobre background7,12:1AAA7,08:1AAA
brand-purple-accentSolo texto grande (≥3:1) sobre fondo invertido3,96:13,48:1

Con este cambio, todos los pares de texto del sistema alcanzan AAA en claro y oscuro — ya no queda ninguno en AA. La única excepción intencionada es brand-purple-accent, que cumple solo como texto grande (≥3:1) sobre fondos invertidos, nunca como cuerpo.

Checklist de cierre

  1. 01

    Contraste medido, con cifra, en ambos temas. AA es el suelo no negociable; AAA siempre que se alcance sin coste visual.

  2. 02

    Foco visible: anillo de 2px con var(--ring) y offset de 2px en todo elemento interactivo. Nunca outline:none sin sustituto.

  3. 03

    Objetivos táctiles de 44×44px como mínimo, también en controles pequeños como el breadcrumb o el toggle de tema.

  4. 04

    Un solo h1 por página y jerarquía h2–h4 sin saltos. El orden de lectura es el orden del DOM.

  5. 05

    Breadcrumb en toda página interna, con <nav aria-label>, lista ordenada y aria-current="page" en el nivel actual.

  6. 06

    Nada codificado solo por color: todo estado o categoría que se distinga por color lleva además texto o forma.

  7. 07

    prefers-reduced-motion respetado en toda animación.

  8. 08

    Alternativas textuales: alt y etiquetas donde informan, aria-hidden en lo decorativo.

Aquí · Design System

El criterio interno y las mediciones. Para quien construye o audita el sitio.

Página de AccesibilidadPróximamente

La declaración pública: el nivel que cumple el sitio y cómo reportar un problema. Para un visitante. No vive aquí.

(09)

Esqueleto navegable

Maqueta esquemática de la home con placeholders — sin contenido definido. Solo demuestra el ritmo vertical y la retícula que comparten Hero, Hitos, Cómo trabajo y el resto de secciones.

Se muestra la versión móvil. La comparativa entre Escritorio, Tablet y Móvil está disponible en pantallas anchas.

(01)Hero
(02)Hitos
(03)Cómo trabajo
(04)Más allá del PM
(05)Trayectoria
(06)Formación
(07)Toolkit
(08)Contacto

Elige qué categorías permites. Las necesarias no se pueden desactivar.