extraído de amie.so Ver sitio ↗

Amie: el sistema es la sombra

El lienzo de Amie es #FAFAFA y las tarjetas son #FFFFFF. Dos por ciento de luminancia de diferencia. Con eso tendría que separar el fondo de las cosas, y no puede. Así que no lo intenta: deja que la sombra haga todo el trabajo.

Siete capas donde el desenfoque dobla (1, 3, 6, 12, 24) y el spread negativo dobla con él (−0.5, −1.5, −3, −6, −12). Cada capa recorta a la anterior y lo que queda es una caída de opacidad casi continua: el ojo lo lee como penumbra, no como CSS. La segunda firma es este rotulador, y hay un solo color de acción en todo el sitio.

light mode blue 3 marcadores 21 grises 138 tokens de color sombra de 7 capas line-height 28px
↓ Scroll
Captura del hero de Amie: titular negro con marcador amarillo sobre papel casi blanco, y el producto en una tarjeta con sombra
El papel#FAFAFA de lienzo, #FFFFFF de tarjeta. Cero gradientes, cero blobs, cero ilustración. Todo lo demás es sombra y tipografía.
El rotuladorUn span con fondo al 30%, radio 4px y padding 0 4px. Una vez por titular, sobre las palabras que llevan el argumento.
El marcoRadio 12px, la rampa de 7 capas, y el anillo en un ::after por encima del contenido para que el borde no se pierda bajo la captura.
01

Color

light · 1 acción · 21 grises
Acción (uno, y solo uno)
#11A8FF
Azul Amie · blue-500
el único color de acción. Ni pestañas, ni chips, ni links: solo el CTA
blanco encima: 2.60:1 · falla AA
sobre #FAFAFA: 2.49:1
#218FCD
Azul hover · blue-600
el hover real del botón, medido en vivo. Y la corrección de accesibilidad
blanco encima: 3.57:1 · AA solo texto grande
#CFEEFF
Azul suave · blue-100
fondo del marcador azul y superficie de info
tinta #2C76A0 encima: 4.12:1 · AA texto grande
#FD2B38
Rojo · red-500
declarado como --color-accent: el botón de grabar. Nunca en la landing
sobre #FAFAFA: 4.0:1 · AA texto grande
El marcador de rotulador (segunda firma · tres variantes reales)
AI Note Taker without a bot
background: rgba(255,215,0,.30)
color: #D48F00
border-radius: 4px · padding: 0 4px
contraste: 2.5:1 · solo a ≥40px
Ship it in just 7 days
background: #CFEEFF (blue-100)
color: #2C76A0 (blue-700)
border-radius: 4px · padding: 0 4px
contraste: 4.12:1 · AA texto grande
Within 47 seconds:
background: #EBEBEB (gray-100)
color: #737373 (gray-500)
border-radius: 4px · padding: 0 4px
contraste: 3.6:1 · AA texto grande

El oro va al 30% de opacidad para que el papel se vea a través: es un rotulador, no un rectángulo de color. Los otros dos van a opacidad plena porque ya son colores claros. Uso real: una vez por titular, sobre las 2-4 palabras que llevan el argumento. Los tres viven a 40-56px con peso 700, así que pasan AA como texto grande. A tamaño de cuerpo ninguno pasa: si necesitas el marcador a 16px, sube la tinta del oro a #A06B00 (4.6:1).

La rampa de gris (21 pasos declarados · 6 en uso real)
950 900 · ink 850 800 750 700 650 600 · body 550 500 450 400 350 · icon 300 250 200 150 100 75 50 · canvas

Amie declara los colores como tripletes RGB sin envolver (--color-gray-600: 92, 92, 92) para poder componer opacidades con Tailwind. Encima hay una capa de roles semánticos (--color-primary: var(--color-gray-900), --color-secondary: var(--color-gray-600), --color-tertiary: var(--color-gray-350)) y los componentes usan el rol, nunca la rampa. Por eso el sistema es invertible sin tocar un solo componente. Hay medios pasos raros (885, 870, 740) que solo tienen sentido en el modo oscuro del producto, donde separar #171717 de #191919 sí importa.

Superficies y texto
#FAFAFA
Papel · gray-50
el lienzo. No es blanco. Área 2.2M
negro encima: 20.12:1 · AAA
#FFFFFF
Tarjeta
todo lo que es "una cosa". Área 999K · 2% de luminancia sobre el papel
esa diferencia de 2% obliga a que la sombra separe
#000000
Negro
los titulares. Un escalón por encima del propio rol primary (#171717)
sobre #FAFAFA: 20.12:1 · AAA
#5C5C5C
Cuerpo · gray-600
todos los párrafos. Rol --color-secondary (68 nodos)
sobre #FAFAFA: 6.41:1 · AA
#A0A0A0
Icono · gray-350
rol --color-tertiary. Solo glifos, nunca texto
sobre #FAFAFA: 2.51:1 · el sitio lo respeta
#000000 4%
Hairline
separadores. Negro con alpha, nunca un gris sólido
un #EBEBEB sólido se ve sucio sobre las dos superficies
02

Typography

Inter · rejilla de 28px
AaGg50Kk.
Inter Original: Inter -> HTML: Inter (ya es Google Fonts: sin sustitución)
700 · display 56pxAI Note Taker without a bot
600 · title 20pxSummaries & Action Items
400 · body 16px / lh 28Record meeting, follow up tasks logged.
La rejilla baseline oculta

Title · 20px / 600

Lead · 18px / 500

Body · 16px / 400. Los tres comparten line-height: 28px, así que puedes mezclarlos en la misma columna y las líneas base siguen alineando. No está declarado como rejilla, pero funciona como tal.

El line-height: 28px sobre 16px da 1.75. Es un valor de tipografía editorial, no de producto. La consecuencia es que un párrafo de Amie ocupa un 20% más de alto que el mismo párrafo en un SaaS normal, y se lee como un artículo. Amie escribe párrafos largos y quiere que los leas.

Averia Serif Libre: cargada en la home, sin usar en ningún nodo visible. Probablemente vive en el blog. Se documenta porque está en el sistema, y se reserva para lo que sería ahí: una nota manuscrita, un aparte, algo que no es interfaz.

RolSizeWeightLHTracking
display · h156px70064px−0.0125em
headline40px70054.4px−0.0125em
title20px60028px−0.025em
lead18px50028px−0.003px
body16px40028px−0.003px
ui14px50020px−0.003px
body sm14px40021px−0.003px
caption12px50015.84px−0.003px
display / headline (≥40px): −0.0125em
title (20px): −0.025em
todo lo demás: ~0

solo los titulares se comprimen.
el texto va a tracking natural de Inter.
es lo opuesto a un sistema que aprieta todo.


pesos: 700 h1/h4 · 600 títulos y botones
        500 UI · 400 párrafos
Original: Inter -> HTML: Inter (Google Fonts). No hace falta sustituir nada: las dos familias que Amie carga están en Google Fonts. Inter se sirve como variable (Inter var) vía la optimización de fuentes de Next.js, con su fallback métrico generado (Inter Fallback). Y Averia Serif Libre, una serif de trazo tembloroso dibujada como el "promedio" de muchas tipografías escaneadas a mano, está cargada pero sin uso visible en la home.

Esa es toda la tipografía del sitio: sin fuente propietaria, sin self-hosting, sin display de marca. Amie confía en que Inter, bien espaciada, es suficiente. Y con line-height 1.75 en el cuerpo, lo es. Mono: no detectada en el sitio.
03

Components

reconstruidos · pásales el ratón

La sombra (la firma)

blur: 1·3·6·12·24 · spread: −0.5·−1.5·−3·−6·−12
capa 1
El borde falso
0 0 0 1px rgba(0,0,0,.06)
sin blur. Es un borde,
no una sombra.
shadow-natural
3 capas
+ 0 1px 1px −0.5px
+ 0 3px 3px −1.5px
tarjetas y botón 2º.
shadow-natural-lg
7 capas
+ 6/−3 + 12/−6
+ 24/−12 + 24/+2
solo el marco.
1 capa gorda
✕ el borrón
0 20px 40px rgba(0,0,0,.1)
lo que hace todo el mundo.
compáralo.

Por qué funciona la rampa: la primera capa es un borde (0 0 0 1px, sin desenfoque), no una sombra. Después, cada capa desenfoca el doble y se encoge el doble con spread negativo. Como cada una está más recortada que la anterior, la que asoma por los bordes es siempre la más grande y la más tenue. La caída de opacidad resultante es continua, y el ojo la lee como penumbra, no como un rectángulo gris difuminado. Es un truco caro de hacer a mano y trivial de copiar. Cópialo.

El cuarto ejemplo es el contraejemplo: una sola capa de 0 20px 40px rgba(0,0,0,.1). Misma "cantidad" de sombra, y se ve como una mancha. Toda la diferencia está en el spread negativo.

Los CTAs

color sin sombra / sombra sin color

Los dos CTAs del hero tienen exactamente el mismo padding (12px 28px), el mismo radio (12px), la misma altura (49.6px) y el mismo peso (600). La única diferencia es: el primario tiene color y no tiene sombra; el secundario tiene sombra y no tiene color. Esa simetría es la razón por la que la pareja se ve tan bien junta, y es lo primero que se rompe si le pones sombra al azul.

El icono del secundario va en #A0A0A0 (gray-350), un escalón más claro que su texto (#5C5C5C). El icono acompaña, no compite. Los botones de nav bajan a 32px de alto y su radio baja de 12px a 8px: el radio escala con el control, en torno a 1:4.

Hover: solo background-color, 150ms, cubic-bezier(0.4, 0, 0.2, 1). Sin transform, sin scale, sin translate. El azul baja un escalón de la rampa (#11A8FF → #218FCD, medido en vivo). Un sistema que quiere desaparecer no debe moverse.

✕ el CTA real · 2.60:1
Blanco de 16px sobre #11A8FF. Muy por debajo del 4.5:1 de AA, y el texto no es lo bastante grande para salvarse por la excepción. El botón primario de Amie no es accesible.
✓ la corrección · 3.57:1 → 4.78:1
Usa blue-600 #218FCD de reposo y blue-700 #2C76A0 de hover (4.78:1 con blanco). El azul se ve casi igual y el sistema pasa AA. Pásale el ratón.

Las tarjetas

radio 12px · padding 20px · gap 8px · sin border

Start recording

Radio 12px (28 nodos, el más repetido). Padding 20px. Gap 8px, el gap más usado del sitio con diferencia (53 nodos).

Get organized

Sin borde. El borde es la primera capa de la sombra: 0 0 0 1px rgba(0,0,0,.06).

Automate workflows

Título 20px/600 y párrafo 16px/400, los dos con line-height 28px. Por eso dos tarjetas de distinto largo siguen alineando.

Las tarjetas de contenido de Amie no tienen hover. Las clicables (estas tres lo son) usan hover:bg-gray-50 o hover:border-gray-200: cambian de fondo, nunca elevan la sombra. Los iconos van en una caja de 36px con radio 8px y un anillo interior al 5%, con el fondo en el escalón 100 de su rampa y el glifo en el 500/700.

Email
Send email
Toteam@amie.so
Subjectproduct tier changes — important update
La ventana de email es la única superficie que usa un borde de verdad (1px solid rgba(0,0,0,.10)), porque necesita separar filas dentro de sí misma. Todo lo demás del sistema usa la capa 1 de la sombra o el anillo interior.

Controles

el azul no se gasta aquí
Pills · radio 9999px · altura 44px

Las pills no usan azul. El estado activo es gris oscuro (#737373) y el inactivo gris claro (#CDCDCD). Amie reserva el azul con tanta disciplina que ni siquiera lo gasta en un selector de pestañas.

El borde es un anillo interior (inset 0 0 0 1px rgba(0,0,0,.10)), así que el input no cambia de tamaño al enfocarse. El foco enciende el azul por dentro y añade un halo de 3px al 20%. (Derivado: la home no tiene formularios.)

04

Spacing & shape

8 dentro · 32 fuera
Escala de espaciado (base 4, uso muy concentrado)
2px · glifos
4px · listas densas · 25 nodos
6px · interior de chips
8px · el gap por defecto · 53 nodos
12px · gap de fila · 13 nodos
16px · gap de bloque
20px · padding de tarjeta · 13 nodos
24px
28px · el módulo de la baseline
32px · entre bloques · 18 nodos
40px
48px · padding del footer
la lectura corta:
8px por dentro · 32px por fuera

aire vertical en el texto (interlínea 1.75),
densidad en la interfaz (gap 8px).
amie separa "esto se lee" de "esto se usa"
y les da ritmos opuestos.


ancho de contenido: 976px
tarjeta de detalle: 600px
rejilla de features: md:grid-cols-3
Familia de radios (escalan con la altura del control)
4px marcador
6px tile
8px control 32
12px card
16px sección
9999 pill
12px: 28 nodos · 8px: 22 · 9999: 17
4px: 14 · 6px: 6 · 16px: 1

la regla implícita: el radio escala con la
altura del control, en torno a 1:4.
marcador de 20px → 4px de radio.
botón de 32px → 8px. botón de 50px → 12px.
Elevación
0 · lienzo #FAFAFA → nada
1 · anillo → inset 0 0 0 1px rgba(0,0,0,.05)
2 · tarjeta y botón 2º → shadow-natural (3)
4 · marco de producto → shadow-natural-lg (7)
— · botón primario → ninguna

el botón primario es el único elemento
elevado del sistema que va plano.
el color ES la elevación.
05

Principles

guardrails

    Do

  • Copia la rampa de sombra de 7 capas. Blur 1/3/6/12/24 con spread −0.5/−1.5/−3/−6/−12. Es lo único que hace que dos superficies separadas por 2% de luminancia se lean como planos distintos.
  • Empieza la sombra con un borde falso: 0 0 0 1px rgba(0,0,0,.06) como primera capa. Nunca uses border en una tarjeta.
  • Deja que el lienzo sea #FAFAFA y las tarjetas #FFFFFF. Nunca al revés.
  • Reserva el azul #11A8FF para una sola cosa: la acción principal. Ni pestañas, ni links, ni iconos.
  • Da al primario color sin sombra y al secundario sombra sin color, con el mismo padding, radio y altura.
  • Usa el marcador una vez por titular, sobre las palabras que llevan el argumento. Al 30% si el color es saturado.
  • Mantén line-height 28px en body, lead y title. Es una rejilla baseline gratis.
  • Escala el radio con el control: 4px para el marcador, 8px para 32px de alto, 12px para 50px.
  • Haz los hairlines con negro con alpha (rgba(0,0,0,.04)), nunca con un gris sólido.

    Don't

  • No pongas sombra al botón primario. Es el único elemento elevado que va plano, y romperlo desequilibra la pareja de CTAs.
  • No uses blanco de 16px sobre #11A8FF: da 2.60:1 y falla AA sin excepción posible. Usa #218FCD de reposo y #2C76A0 de hover.
  • No pongas el marcador a tamaño de cuerpo. A 16px la tinta #D48F00 sobre el oro al 30% no pasa AA. Sube la tinta a #A06B00.
  • No uses #A0A0A0 para texto. 2.51:1. Es color de glifo, y el sitio lo respeta.
  • No colapses el line-height 1.75 del cuerpo a 1.5 "para que quepa más". Es la voz del sitio.
  • No gastes el azul en pestañas o chips. Amie los pinta de gris a propósito.
  • No sustituyas la rampa de 7 capas por 0 20px 40px rgba(0,0,0,.1). Es la diferencia entre luz y borrón.
  • No añadas gradientes de fondo. El único gradiente real del sitio vive en una sola banda.
  • No uses border en las tarjetas. El borde es la capa 1 de la sombra.
06

Resources

copy & paste
:root {
  /* superficies: solo dos, y la diferencia es del 2% */
  --color-canvas: #FAFAFA;
  --color-surface: #FFFFFF;
  --color-surface-alt: #F2F2F2;
  --color-surface-sunk: #EBEBEB;

  /* texto */
  --color-ink-strong: #000000;   /* titulares */
  --color-ink: #171717;          /* gray-900 · rol "primary" */
  --color-foreground: #262626;
  --color-text-secondary: #5C5C5C;  /* gray-600 · TODOS los párrafos */
  --color-text-quiet: #737373;      /* gray-500 */
  --color-text-tertiary: #A0A0A0;   /* gray-350 · SOLO glifos */

  /* acción: uno, y solo uno */
  --color-primary: #11A8FF;         /* blue-500 */
  --color-primary-hover: #218FCD;   /* blue-600 */
  --color-primary-light: #41BAFF;   /* blue-400 */
  --color-primary-soft: #CFEEFF;    /* blue-100 */
  --color-primary-deep: #2C76A0;    /* blue-700 */

  /* el marcador */
  --color-marker-gold: rgba(255, 215, 0, 0.30);
  --color-marker-gold-ink: #D48F00;
  --color-marker-blue: #CFEEFF;
  --color-marker-blue-ink: #2C76A0;
  --color-marker-gray: #EBEBEB;
  --color-marker-gray-ink: #737373;

  /* la paleta (vive dentro del producto, no en la landing) */
  --color-accent: #FD2B38;
  --color-amie-pink: #F6A6A6;
  --color-green: #01CA45;
  --color-orange: #FE6600;
  --color-purple: #A050FF;
  --color-pink: #FF329A;
  --color-yellow: #F4AF00;

  /* estados (derivados) */
  --color-success: #01CA45;
  --color-success-bg: #CCF4DA;
  --color-info: #11A8FF;
  --color-info-bg: #CFEEFF;
  --color-error: #FD2B38;
  --color-error-bg: #FFD5D7;
  --color-warning: #F4AF00;
  --color-warning-bg: #FDEFCC;

  /* hairlines: negro con alpha, nunca un gris sólido */
  --color-hair: rgba(0, 0, 0, 0.04);
  --color-ring: rgba(0, 0, 0, 0.05);
  --color-hair-strong: rgba(0, 0, 0, 0.10);

  --font-display: "Inter";
  --font-body: "Inter";
  --font-quirk: "Averia Serif Libre";
  --font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;

  --radius-xs: 4px;    /* el marcador */
  --radius-sm: 6px;
  --radius-md: 8px;    /* controles de 32px */
  --radius-lg: 12px;   /* tarjetas y botones de 50px */
  --radius-xl: 16px;
  --radius-full: 9999px;

  /* ===== LA FIRMA ===== */
  --shadow-natural:
    0 0 0 1px rgba(0, 0, 0, 0.06),
    0 1px 1px -0.5px rgba(0, 0, 0, 0.06),
    0 3px 3px -1.5px rgba(0, 0, 0, 0.06);
  --shadow-natural-lg:
    0 0 0 1px rgba(0, 0, 0, 0.06),
    0 1px 1px -0.5px rgba(0, 0, 0, 0.06),
    0 3px 3px -1.5px rgba(0, 0, 0, 0.06),
    0 6px 6px -3px rgba(0, 0, 0, 0.06),
    0 12px 12px -6px rgba(0, 0, 0, 0.04),
    0 24px 24px -12px rgba(0, 0, 0, 0.04),
    0 24px 24px 2px rgba(0, 0, 0, 0.10);
  --shadow-ring: inset 0 0 0 1px rgba(0, 0, 0, 0.05);
  --shadow-ring-strong: inset 0 0 0 1px rgba(0, 0, 0, 0.10);

  --space-xxs: 4px;
  --space-sm: 8px;      /* el gap por defecto */
  --space-md: 12px;
  --space-base: 16px;
  --space-lg: 20px;     /* padding de tarjeta */
  --space-2xl: 28px;    /* el módulo de la baseline */
  --space-3xl: 32px;    /* entre bloques */
  --space-5xl: 48px;

  --leading-base: 28px; /* body(16), lead(18) y title(20) lo comparten */
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --duration: 150ms;
}
@theme {
  --color-canvas: #FAFAFA;
  --color-surface: #FFFFFF;

  --color-gray-950: #0F0F0F;
  --color-gray-900: #171717;
  --color-gray-800: #2E2E2E;
  --color-gray-700: #454545;
  --color-gray-600: #5C5C5C;
  --color-gray-500: #737373;
  --color-gray-350: #A0A0A0;
  --color-gray-200: #CDCDCD;
  --color-gray-100: #EBEBEB;
  --color-gray-75:  #F2F2F2;
  --color-gray-50:  #FAFAFA;

  --color-blue-700: #2C76A0;
  --color-blue-600: #218FCD;
  --color-blue-500: #11A8FF;
  --color-blue-400: #41BAFF;
  --color-blue-100: #CFEEFF;

  --color-primary: var(--color-gray-900);
  --color-secondary: var(--color-gray-600);
  --color-tertiary: var(--color-gray-350);
  --color-accent: #FD2B38;

  --color-success: #01CA45;
  --color-info: #11A8FF;
  --color-error: #FD2B38;
  --color-warning: #F4AF00;

  --font-display: "Inter", system-ui, sans-serif;
  --font-body: "Inter", system-ui, sans-serif;
  --font-quirk: "Averia Serif Libre", Georgia, serif;

  --radius-xs: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;

  --shadow-natural:
    0 0 0 1px rgb(0 0 0 / 0.06),
    0 1px 1px -0.5px rgb(0 0 0 / 0.06),
    0 3px 3px -1.5px rgb(0 0 0 / 0.06);
  --shadow-natural-lg:
    0 0 0 1px rgb(0 0 0 / 0.06),
    0 1px 1px -0.5px rgb(0 0 0 / 0.06),
    0 3px 3px -1.5px rgb(0 0 0 / 0.06),
    0 6px 6px -3px rgb(0 0 0 / 0.06),
    0 12px 12px -6px rgb(0 0 0 / 0.04),
    0 24px 24px -12px rgb(0 0 0 / 0.04),
    0 24px 24px 2px rgb(0 0 0 / 0.10);

  --spacing-sm: 8px;
  --spacing-lg: 20px;
  --spacing-3xl: 32px;

  --leading-base: 28px;
  --ease-amie: cubic-bezier(0.4, 0, 0.2, 1);
}

/* el marcador */
@utility mark-gold {
  background-color: rgb(255 215 0 / 0.30);
  color: #D48F00;
  border-radius: 4px;
  padding-inline: 4px;
}

/* los CTAs: color sin sombra / sombra sin color */
@utility btn-amie-primary {
  background-color: var(--color-blue-500);
  color: #FFFFFF;
  font-weight: 600;
  padding: 12px 28px;
  border-radius: 12px;
  box-shadow: none;
  transition: background-color var(--duration, 150ms) var(--ease-amie);
  &:hover { background-color: var(--color-blue-600); }
}
@utility btn-amie-secondary {
  background-color: #FFFFFF;
  color: var(--color-gray-600);
  font-weight: 600;
  padding: 12px 28px;
  border-radius: 12px;
  box-shadow: var(--shadow-natural);
  transition: background-color var(--duration, 150ms) var(--ease-amie);
  &:hover { background-color: var(--color-gray-50); }
}
{
  "colors": {
    "canvas": "#FAFAFA",
    "surface": "#FFFFFF",
    "surface-alt": "#F2F2F2",
    "surface-sunk": "#EBEBEB",
    "ink-strong": "#000000",
    "ink": "#171717",
    "foreground": "#262626",
    "text-secondary": "#5C5C5C",
    "text-quiet": "#737373",
    "text-tertiary": "#A0A0A0",
    "primary": "#11A8FF",
    "primary-hover": "#218FCD",
    "primary-light": "#41BAFF",
    "primary-soft": "#CFEEFF",
    "primary-deep": "#2C76A0",
    "secondary": "#FFD700",
    "secondary-ink": "#D48F00",
    "accent": "#FD2B38",
    "amie-pink": "#F6A6A6",
    "green": "#01CA45",
    "orange": "#FE6600",
    "purple": "#A050FF",
    "pink": "#FF329A",
    "yellow": "#F4AF00",
    "success": "#01CA45",
    "success-bg": "#CCF4DA",
    "info": "#11A8FF",
    "info-bg": "#CFEEFF",
    "error": "#FD2B38",
    "error-bg": "#FFD5D7",
    "warning": "#F4AF00",
    "warning-bg": "#FDEFCC",
    "hair": "rgba(0, 0, 0, 0.04)",
    "ring": "rgba(0, 0, 0, 0.05)",
    "hair-strong": "rgba(0, 0, 0, 0.10)"
  },
  "grayscale": {
    "950": "#0F0F0F", "900": "#171717", "885": "#191919", "870": "#1B1B1B",
    "850": "#222222", "800": "#2E2E2E", "750": "#3A3A3A", "740": "#313131",
    "700": "#454545", "650": "#515151", "600": "#5C5C5C", "550": "#686868",
    "500": "#737373", "450": "#828282", "400": "#919191", "350": "#A0A0A0",
    "300": "#AFAFAF", "250": "#BEBEBE", "200": "#CDCDCD", "150": "#DCDCDC",
    "100": "#EBEBEB", "75": "#F2F2F2", "50": "#FAFAFA"
  },
  "gradient": {
    "band": {
      "value": "linear-gradient(to right top, #CFEEFF, #41BAFF)",
      "note": "el único gradiente visible del sitio"
    }
  },
  "typography": {
    "display": {
      "fontFamily": "Inter",
      "fontSize": "56px",
      "fontWeight": 700,
      "lineHeight": "64px",
      "letterSpacing": "-0.0125em"
    },
    "headline": {
      "fontFamily": "Inter",
      "fontSize": "40px",
      "fontWeight": 700,
      "lineHeight": "54.4px",
      "letterSpacing": "-0.0125em"
    },
    "title": {
      "fontFamily": "Inter",
      "fontSize": "20px",
      "fontWeight": 600,
      "lineHeight": "28px",
      "letterSpacing": "-0.025em"
    },
    "lead": {
      "fontFamily": "Inter",
      "fontSize": "18px",
      "fontWeight": 500,
      "lineHeight": "28px",
      "letterSpacing": "-0.003px"
    },
    "body": {
      "fontFamily": "Inter",
      "fontSize": "16px",
      "fontWeight": 400,
      "lineHeight": "28px",
      "letterSpacing": "-0.003px"
    },
    "ui": {
      "fontFamily": "Inter",
      "fontSize": "14px",
      "fontWeight": 500,
      "lineHeight": "20px",
      "letterSpacing": "-0.003px"
    },
    "caption": {
      "fontFamily": "Inter",
      "fontSize": "12px",
      "fontWeight": 500,
      "lineHeight": "15.84px",
      "letterSpacing": "-0.003px"
    }
  },
  "rounded": {
    "xs": "4px",
    "sm": "6px",
    "md": "8px",
    "lg": "12px",
    "xl": "16px",
    "full": "9999px"
  },
  "shadow": {
    "natural": "0 0 0 1px rgba(0,0,0,0.06), 0 1px 1px -0.5px rgba(0,0,0,0.06), 0 3px 3px -1.5px rgba(0,0,0,0.06)",
    "natural-lg": "0 0 0 1px rgba(0,0,0,0.06), 0 1px 1px -0.5px rgba(0,0,0,0.06), 0 3px 3px -1.5px rgba(0,0,0,0.06), 0 6px 6px -3px rgba(0,0,0,0.06), 0 12px 12px -6px rgba(0,0,0,0.04), 0 24px 24px -12px rgba(0,0,0,0.04), 0 24px 24px 2px rgba(0,0,0,0.10)",
    "ring": "inset 0 0 0 1px rgba(0,0,0,0.05)",
    "ring-strong": "inset 0 0 0 1px rgba(0,0,0,0.10)",
    "sm": "0 1px 2px 0 rgba(0,0,0,0.05)"
  },
  "spacing": {
    "micro": "2px",
    "xxs": "4px",
    "xs": "6px",
    "sm": "8px",
    "md": "12px",
    "base": "16px",
    "lg": "20px",
    "xl": "24px",
    "2xl": "28px",
    "3xl": "32px",
    "4xl": "40px",
    "5xl": "48px"
  },
  "components": {
    "button-primary": {
      "backgroundColor": "{colors.primary}",
      "textColor": "#FFFFFF",
      "rounded": "{rounded.lg}",
      "padding": "12px 28px",
      "height": "49.6px",
      "boxShadow": "none",
      "hover": "background-color: {colors.primary-hover}"
    },
    "button-secondary": {
      "backgroundColor": "{colors.surface}",
      "textColor": "{colors.text-secondary}",
      "rounded": "{rounded.lg}",
      "padding": "12px 28px",
      "height": "49.6px",
      "gap": "8px",
      "boxShadow": "{shadow.natural}",
      "hover": "background-color: {colors.canvas}"
    },
    "card": {
      "backgroundColor": "{colors.surface}",
      "rounded": "{rounded.lg}",
      "padding": "20px",
      "gap": "8px",
      "boxShadow": "{shadow.natural}",
      "border": "none"
    },
    "marker": {
      "backgroundColor": "rgba(255, 215, 0, 0.30)",
      "textColor": "{colors.secondary-ink}",
      "rounded": "{rounded.xs}",
      "padding": "0 4px"
    },
    "pill": {
      "backgroundColor": "{colors.text-quiet}",
      "textColor": "#FFFFFF",
      "rounded": "{rounded.full}",
      "padding": "12px 24px",
      "height": "44px"
    }
  },
  "motion": {
    "ease": "cubic-bezier(0.4, 0, 0.2, 1)",
    "duration": "150ms",
    "properties": ["color", "background-color"]
  }
}
---
version: "1.0"
name: "Amie"
description: "Sistema visual de Amie: calendario y note-taker de IA construido sobre un casi-blanco
(#FAFAFA) que nunca llega a ser blanco, y un azul cielo (#11A8FF) que es el único color de acción.
Su firma no es el color: es la SOMBRA. Una rampa de siete capas con spread negativo que dobla en
cada escalón (1->3->6->12->24), que produce una elevación tan suave que parece luz real y no CSS.
Segunda firma: el marcador de rotulador, un span con fondo de color al 30% y radio 4px que resalta
media frase dentro de un titular de 56px. Escala de grises de 21 pasos, radios de 4/8/12, hairlines
de negro al 4%, y una única Inter variable. Light mode, silencioso, de precisión."
---

# DESIGN.md - Amie

## 1. Tema Visual y Atmósfera

Amie es un calendario que graba tus reuniones y las convierte en notas. Podría haberse vestido de
dashboard. En cambio se viste de papel.

El lienzo es #FAFAFA, y ese detalle importa: NO es blanco. Es gray-50, el primer escalón de una
rampa de 21 grises, y sobre él las tarjetas sí son #FFFFFF. Esa diferencia de dos puntos de
luminancia es toda la profundidad que el sistema necesita. Nada más.

Bueno, casi nada más. Porque la firma real de Amie no es un color: es la sombra.

  box-shadow:
    0 0 0 1px         rgba(0,0,0,0.06),
    0 1px 1px  -0.5px rgba(0,0,0,0.06),
    0 3px 3px  -1.5px rgba(0,0,0,0.06),
    0 6px 6px    -3px rgba(0,0,0,0.06),
    0 12px 12px  -6px rgba(0,0,0,0.04),
    0 24px 24px -12px rgba(0,0,0,0.04),
    0 24px 24px   2px rgba(0,0,0,0.10);

Siete capas. El desenfoque dobla (1, 3, 6, 12, 24) y el spread negativo dobla con él (-0.5, -1.5,
-3, -6, -12). Cada capa recorta a la anterior por los lados, y lo que queda es una caída de opacidad
casi continua en lugar de un borrón gris. El ojo lo lee como LUZ, no como box-shadow. La versión de
tres capas es la que llevan todas las tarjetas y el botón secundario; la de siete, solo el marco.

La segunda firma es un truco de papelería: el marcador de rotulador. Media frase dentro de un
titular de 56px va envuelta en un span con fondo al 30%, radio 4px y padding 0 4px.
"AI Note Taker [without a bot]". Tres variantes reales: oro, azul y gris.

El azul #11A8FF es el único color de acción. Ningún otro elemento clicable tiene color.

Palabras clave: silencioso, preciso, de papel, tipográfico, sin ruido, íntimo
Modo preferido: claro (la rampa invertible está preparada, pero no activa en la home)

## 2. Paleta de Colores

primary          #11A8FF   blue-500 · EL único color de acción
primary-hover    #218FCD   blue-600 · medido en vivo
primary-soft     #CFEEFF   blue-100 · fondo del marcador azul
primary-deep     #2C76A0   blue-700 · tinta del marcador azul
canvas           #FAFAFA   gray-50 · NO es blanco
surface          #FFFFFF   las tarjetas
ink-strong       #000000   titulares (un escalón por encima del rol "primary")
ink              #171717   gray-900 · rol --color-primary
text-secondary   #5C5C5C   gray-600 · TODOS los párrafos · 6.41:1 AA
text-tertiary    #A0A0A0   gray-350 · 2.51:1 · SOLO glifos, nunca texto
accent           #FD2B38   red-500 · declarado como --color-accent

CONTRASTE CRÍTICO: blanco sobre #11A8FF da 2.60:1. FALLA AA sin excepción posible.
El botón primario de Amie NO es accesible. Corrección: usa blue-600 (#218FCD) de
reposo y blue-700 (#2C76A0, 4.78:1) de hover.

El :root declara los colores como TRIPLETES RGB (--color-gray-600: 92, 92, 92) para
componer opacidades con Tailwind. 21 pasos de gris + 13 rampas de 9 = 138 tokens.
Encima hay roles semánticos (--color-primary, --secondary, --tertiary, --accent,
--background, --separator) y los componentes usan EL ROL, nunca la rampa.

## 3. Tipografía

Original: Inter -> HTML: Inter. NO HACE FALTA SUSTITUIR NADA: las dos familias que
Amie carga (Inter y Averia Serif Libre) están en Google Fonts. Averia está cargada
pero sin uso visible en la home.

display 56/700/64px/-0.0125em · headline 40/700/54.4 · title 20/600/28/-0.025em
lead 18/500/28 · body 16/400/28 · ui 14/500/20 · caption 12/500/15.84

LA REJILLA BASELINE: body(16), lead(18) y title(20) comparten line-height: 28px.
Puedes mezclarlos en la misma columna y las líneas base siguen alineando.
El body a 1.75 de interlínea es un valor editorial, no de producto.

Pesos: 700 (h1/h4) · 600 (títulos y botones) · 500 (UI) · 400 (párrafos).
Tracking: solo los titulares se comprimen. El texto va a tracking natural de Inter.

## 4. Componentes

BOTÓN PRIMARIO:   bg #11A8FF · blanco · px 28 py 12 · radius 12 · SIN SOMBRA
                  hover: bg #218FCD · transition 150ms cubic-bezier(.4,0,.2,1)
BOTÓN SECUNDARIO: bg #FFF · texto #5C5C5C · px 28 py 12 · radius 12 · CON shadow-natural
                  hover: bg #FAFAFA · icono en #A0A0A0
  Los dos tienen el mismo padding, radio, altura y peso. La única diferencia:
  COLOR SIN SOMBRA / SOMBRA SIN COLOR. Esa simetría es el sistema.

NAV:    32px de alto, radius 8px. El radio escala con el control (1:4).
CARD:   #FFF · radius 12 · padding 20 · gap 8 · shadow-natural · SIN border
        (el borde es la capa 1 de la sombra)
MARCO:  radius 12 · shadow-natural-lg (7 capas) + anillo en un ::after por encima
MARCADOR: bg de color al 30% · radius 4 · padding 0 4px · una vez por titular
PILLS:  gris, NO azul. Activo #737373, inactivo #CDCDCD. Amie reserva el azul.
INPUT:  anillo interior (inset 0 0 0 1px), no border: no cambia de tamaño al enfocar.

## 5. Espaciado

Base 4, uso concentrado: 8px por dentro (53 nodos), 32px por fuera (18 nodos).
Padding de tarjeta 20px. Contenido a 976px. Tarjeta de detalle 600px.
Aire vertical en el texto (1.75), densidad en la interfaz (gap 8).

## 6. Elevación

0 · lienzo -> nada
1 · anillo -> inset 0 0 0 1px rgba(0,0,0,.05)
2 · tarjeta y botón 2º -> shadow-natural (3 capas)
4 · marco -> shadow-natural-lg (7 capas)
— · botón primario -> NINGUNA (el color ES la elevación)

Radios: 12px (28 nodos) · 8px (22) · 9999 (17) · 4px (14) · 6px (6) · 16px (1).
La regla implícita: el radio escala con la altura del control, en torno a 1:4.

## 7. Lo que Sí y lo que No

SÍ: la rampa de 7 capas · el borde falso como capa 1 · lienzo #FAFAFA + tarjeta #FFF ·
    un solo color de acción · color-sin-sombra / sombra-sin-color · el marcador una vez
    por titular · line-height 28px · el radio escala con el control · hairlines de negro con alpha.

NO: sombra al botón primario · blanco 16px sobre #11A8FF · el marcador a 16px ·
    #A0A0A0 como texto · colapsar el 1.75 · azul en pestañas · una sola capa de sombra ·
    gradientes de fondo · border en las tarjetas.

## 8. Motion

easing: cubic-bezier(0.4, 0, 0.2, 1)   duración: 150ms
Amie SOLO anima color. No hay transform, no hay translateY, no hay scale en la interfaz.
Con prefers-reduced-motion no hay nada que desactivar, porque no hay nada que se mueva.
Ese es el mejor cumplido que se le puede hacer a un sistema de motion.

## Anexo: Stack técnico detectado

- Next.js + Tailwind. Las utilidades hover:bg-blue-600, shadow-natural, ring-1 ring-inset
  ring-black/10, tracking-[-0.0125em] y rounded-xl aparecen literalmente en el DOM.
- Inter var vía next/font con fallback métrico. Averia Serif Libre cargada sin uso.
- 138 tokens de color como tripletes RGB + una capa de roles semánticos.
- Tokens del producto filtrados a la landing: --nav-width: 74px, --inbox-width: 200px,
  --grid-row-height: 60px, --grid-timezone-width: 42px.
- Un solo gradiente visible: linear-gradient(to right top, #CFEEFF, #41BAFF).
- La tinta del marcador de oro se declara en color(display-p3 .792 .573 .188); #D48F00 es
  su mapeo a sRGB.
- (no detectado): modo oscuro activo, formularios, banners de estado, tipografía mono,
  motion de layout.