@eduardoalvarez/arrecife 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +21 -0
  3. package/README.md +520 -0
  4. package/assets/brand/face-annoyed.png +0 -0
  5. package/assets/brand/face-confused.png +0 -0
  6. package/assets/brand/face-hearts.png +0 -0
  7. package/assets/brand/face-laughing.png +0 -0
  8. package/assets/brand/face-shades.png +0 -0
  9. package/assets/brand/face-waiting.png +0 -0
  10. package/assets/brand/face-wink.png +0 -0
  11. package/assets/brand/fin-foam.png +0 -0
  12. package/assets/brand/fin.png +0 -0
  13. package/assets/brand/pose-desk.png +0 -0
  14. package/assets/brand/pose-laptop-coffee.png +0 -0
  15. package/assets/brand/pose-peek.png +0 -0
  16. package/assets/brand/pose-surf.png +0 -0
  17. package/dist/brand/index.cjs +228 -0
  18. package/dist/brand/index.d.cts +63 -0
  19. package/dist/brand/index.d.ts +63 -0
  20. package/dist/brand/index.js +3 -0
  21. package/dist/catalogo-Du5ID-Hi.d.cts +77 -0
  22. package/dist/catalogo-Du5ID-Hi.d.ts +77 -0
  23. package/dist/chunk-22OXRTAL.js +22 -0
  24. package/dist/chunk-DHF63QNM.js +231 -0
  25. package/dist/chunk-E3OMP2DL.js +36 -0
  26. package/dist/chunk-ZL5X6XO7.js +102 -0
  27. package/dist/index.cjs +3191 -0
  28. package/dist/index.d.cts +1024 -0
  29. package/dist/index.d.ts +1024 -0
  30. package/dist/index.js +2624 -0
  31. package/dist/og/index.cjs +322 -0
  32. package/dist/og/index.d.cts +164 -0
  33. package/dist/og/index.d.ts +164 -0
  34. package/dist/og/index.js +242 -0
  35. package/dist/shiki/index.cjs +127 -0
  36. package/dist/shiki/index.d.cts +16 -0
  37. package/dist/shiki/index.d.ts +16 -0
  38. package/dist/shiki/index.js +95 -0
  39. package/dist/tokens/index.cjs +263 -0
  40. package/dist/tokens/index.d.cts +623 -0
  41. package/dist/tokens/index.d.ts +623 -0
  42. package/dist/tokens/index.js +2 -0
  43. package/dist/tokens/theme.css +266 -0
  44. package/package.json +128 -0
@@ -0,0 +1,623 @@
1
+ /**
2
+ * Arrecife — fuente única de la identidad visual.
3
+ *
4
+ * LA RESTRICCIÓN QUE MANDA SOBRE TODO LO DEMÁS: este archivo no importa nada.
5
+ * Ni React, ni componentes, ni CSS de terceros. Lo consumen los cinco proyectos,
6
+ * un generador de OG con Satori y un sitio Astro que no monta React. Si un token
7
+ * termina dependiendo de un componente, la librería dejó de ser portable.
8
+ * `scripts/check-tokens-purity.mjs` lo verifica en cada build.
9
+ *
10
+ * Los contrastes están MEDIDOS, no estimados. No cambies un hex para que
11
+ * «combine mejor»: #0F8F80 (3.57:1) y #B4632A (3.95:1) ya se corrigieron por no
12
+ * pasar AA sobre papel. Si los ves en algún lado, están mal.
13
+ *
14
+ * Segunda corrección, por la misma razón. El documento medía todo contra
15
+ * `background`, pero `surfaceRaised` es el peor caso en los DOS modos: en claro
16
+ * es más oscuro que el fondo de página, en oscuro es más claro. Es donde viven
17
+ * menús y tabs activos, así que es donde de verdad hay que poder leer.
18
+ *
19
+ * textMuted claro #6B7480 → #626A75 4.24 → 4.90 sobre background
20
+ * warning claro #9A6A12 → #8D6111 4.23 → 4.88 sobre background
21
+ * error oscuro #E05252 → #E15757 4.35 → 4.51 sobre surface
22
+ *
23
+ * Los tres conservan tono y saturación exactos: solo baja o sube la luminosidad
24
+ * entre 1 y 4 puntos. `accent` y `warm` claros se quedan como están: pasan sobre
25
+ * background y sobre surface, y no son color de texto sobre surfaceRaised.
26
+ */
27
+ /**
28
+ * Modo oscuro (primario). Contrastes medidos sobre `background` #091319.
29
+ */
30
+ declare const dark: {
31
+ readonly background: "#091319";
32
+ readonly surface: "#10202B";
33
+ readonly surfaceRaised: "#17303E";
34
+ readonly border: "#22414F";
35
+ readonly hairline: "#1E3441";
36
+ readonly hairlineHover: "#2C4D5D";
37
+ readonly textPrimary: "#EDF4F3";
38
+ readonly textSecondary: "#A7BCC4";
39
+ readonly textMuted: "#71919C";
40
+ readonly accent: "#35D6C0";
41
+ readonly accentHover: "#5FE3D1";
42
+ readonly accentOn: "#06171A";
43
+ readonly warm: "#F2A65A";
44
+ readonly warmHover: "#F7BB7D";
45
+ readonly warmOn: "#2A1605";
46
+ readonly success: "#4FB477";
47
+ readonly warning: "#E8A33D";
48
+ readonly error: "#E15757";
49
+ };
50
+ /**
51
+ * Modo claro. Contrastes medidos sobre `background` #F6F2EA.
52
+ * `background` es blanco CÁLIDO: nunca #FFF como fondo de página.
53
+ */
54
+ declare const light: {
55
+ readonly background: "#F6F2EA";
56
+ readonly surface: "#FFFFFF";
57
+ readonly surfaceRaised: "#EFE9DE";
58
+ readonly border: "#E6DFD2";
59
+ readonly hairline: "#EBE6DC";
60
+ readonly hairlineHover: "#D3C8B2";
61
+ readonly textPrimary: "#0B1524";
62
+ readonly textSecondary: "#3D4B58";
63
+ readonly textMuted: "#626A75";
64
+ readonly accent: "#0D7C6F";
65
+ readonly accentHover: "#0C7466";
66
+ readonly accentOn: "#FFFFFF";
67
+ readonly warm: "#A65B27";
68
+ readonly warmHover: "#96511F";
69
+ readonly warmOn: "#FFF7EE";
70
+ readonly success: "#0F6B52";
71
+ readonly warning: "#8D6111";
72
+ readonly error: "#C0392B";
73
+ };
74
+ declare const colors: {
75
+ readonly dark: {
76
+ readonly background: "#091319";
77
+ readonly surface: "#10202B";
78
+ readonly surfaceRaised: "#17303E";
79
+ readonly border: "#22414F";
80
+ readonly hairline: "#1E3441";
81
+ readonly hairlineHover: "#2C4D5D";
82
+ readonly textPrimary: "#EDF4F3";
83
+ readonly textSecondary: "#A7BCC4";
84
+ readonly textMuted: "#71919C";
85
+ readonly accent: "#35D6C0";
86
+ readonly accentHover: "#5FE3D1";
87
+ readonly accentOn: "#06171A";
88
+ readonly warm: "#F2A65A";
89
+ readonly warmHover: "#F7BB7D";
90
+ readonly warmOn: "#2A1605";
91
+ readonly success: "#4FB477";
92
+ readonly warning: "#E8A33D";
93
+ readonly error: "#E15757";
94
+ };
95
+ readonly light: {
96
+ readonly background: "#F6F2EA";
97
+ readonly surface: "#FFFFFF";
98
+ readonly surfaceRaised: "#EFE9DE";
99
+ readonly border: "#E6DFD2";
100
+ readonly hairline: "#EBE6DC";
101
+ readonly hairlineHover: "#D3C8B2";
102
+ readonly textPrimary: "#0B1524";
103
+ readonly textSecondary: "#3D4B58";
104
+ readonly textMuted: "#626A75";
105
+ readonly accent: "#0D7C6F";
106
+ readonly accentHover: "#0C7466";
107
+ readonly accentOn: "#FFFFFF";
108
+ readonly warm: "#A65B27";
109
+ readonly warmHover: "#96511F";
110
+ readonly warmOn: "#FFF7EE";
111
+ readonly success: "#0F6B52";
112
+ readonly warning: "#8D6111";
113
+ readonly error: "#C0392B";
114
+ };
115
+ };
116
+ /** Marca — iguales en los dos modos. */
117
+ declare const brand: {
118
+ /** Cuerpo de la mascota. 4.22:1 → SOLO relleno, NUNCA texto. */
119
+ readonly body: "#3E7CB1";
120
+ /** Patrón de manchas. */
121
+ readonly spots: "#C2D7E7";
122
+ /** Casco · contorno y fondo de bloques de código. */
123
+ readonly hull: "#0B1524";
124
+ };
125
+ declare const fonts: {
126
+ /** SOLO titulares y números grandes. Nunca cuerpo. */
127
+ readonly display: "\"Bricolage Grotesque\", ui-sans-serif, system-ui, sans-serif";
128
+ /** Cuerpo e interfaz. */
129
+ readonly sans: "\"Geist\", ui-sans-serif, system-ui, sans-serif";
130
+ /** Código, rutas, etiquetas, metadatos, firma CLI. */
131
+ readonly mono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace";
132
+ };
133
+ declare const typeScale: {
134
+ readonly display: {
135
+ readonly family: "display";
136
+ readonly size: 76;
137
+ readonly lineHeight: 0.96;
138
+ readonly weight: 800;
139
+ readonly tracking: "-0.035em";
140
+ };
141
+ /** Métricas grandes. Números, no prosa: interlineado 1 y sin descendentes. */
142
+ readonly stat: {
143
+ readonly family: "display";
144
+ readonly size: 46;
145
+ readonly lineHeight: 1;
146
+ readonly weight: 800;
147
+ readonly tracking: "-0.035em";
148
+ };
149
+ readonly h1: {
150
+ readonly family: "display";
151
+ readonly size: 44;
152
+ readonly lineHeight: 1.05;
153
+ readonly weight: 700;
154
+ readonly tracking: "-0.03em";
155
+ };
156
+ readonly h2: {
157
+ readonly family: "display";
158
+ readonly size: 30;
159
+ readonly lineHeight: 1.1;
160
+ readonly weight: 600;
161
+ readonly tracking: "-0.02em";
162
+ };
163
+ readonly h3: {
164
+ readonly family: "display";
165
+ readonly size: 25;
166
+ readonly lineHeight: 1.15;
167
+ readonly weight: 600;
168
+ readonly tracking: "-0.02em";
169
+ };
170
+ readonly body: {
171
+ readonly family: "sans";
172
+ readonly size: 18;
173
+ readonly lineHeight: 1.75;
174
+ readonly weight: 400;
175
+ };
176
+ /**
177
+ * 17px. El botón grande y la bajada de las páginas internas.
178
+ *
179
+ * Entra como escalón propio porque el documento lo usa DOS veces y en piezas
180
+ * distintas: «lg 15px 30px r12» con texto de 17, y «h1 44/700 · bajada 17px ·
181
+ * párrafo de contexto 15px». Un solo uso no habría justificado partir la
182
+ * distancia entre `ui` (15) y `body` (18); dos sí.
183
+ */
184
+ readonly lead: {
185
+ readonly family: "sans";
186
+ readonly size: 17;
187
+ readonly lineHeight: 1.5;
188
+ readonly weight: 400;
189
+ };
190
+ readonly ui: {
191
+ readonly family: "sans";
192
+ readonly size: 15;
193
+ readonly lineHeight: 1.6;
194
+ readonly weight: 400;
195
+ };
196
+ readonly label: {
197
+ readonly family: "sans";
198
+ readonly size: 13;
199
+ readonly lineHeight: 1.5;
200
+ readonly weight: 500;
201
+ };
202
+ /**
203
+ * La escala de las etiquetas de estado: sans 12.5/500, cuadrada.
204
+ *
205
+ * Es medio píxel por debajo de `label`, y esta vez el medio píxel sí importa:
206
+ * una etiqueta de estado va dentro de una tabla o al lado de un título, y a 13
207
+ * competía con el texto que acompaña. El documento la da en 12.5 y se ve.
208
+ */
209
+ readonly tag: {
210
+ readonly family: "sans";
211
+ readonly size: 12.5;
212
+ readonly lineHeight: 1.4;
213
+ readonly weight: 500;
214
+ };
215
+ /**
216
+ * La escala de categoría y métrica: mono 11.5.
217
+ *
218
+ * Rompe el suelo de `limits.minScreenPx`, y es a propósito. Ese suelo protege
219
+ * al TEXTO —lo que se lee en una frase—, y una píldora de una palabra no es
220
+ * texto corrido: es una marca. El contraste sigue medido y pasa AA (plancton
221
+ * 5.57:1 sobre abismo), que es la parte que no se negocia.
222
+ *
223
+ * A 13 las tres familias de etiqueta salían del tamaño de un botón pequeño y
224
+ * pesaban más que el título que acompañan. Ver `docs/decisiones.md`.
225
+ */
226
+ readonly chip: {
227
+ readonly family: "mono";
228
+ readonly size: 11.5;
229
+ readonly lineHeight: 1.4;
230
+ readonly weight: 400;
231
+ };
232
+ /**
233
+ * Mono SIN transformar: fechas, rutas, versiones, nombres de archivo, la firma
234
+ * del footer y las métricas de etiqueta. Es la mayoría del mono del sistema.
235
+ *
236
+ * Existe porque `eyebrow` lleva `uppercase` de fábrica y no es una preferencia
237
+ * que se pueda apagar: es la escala del eyebrow. Un `18 ago 2026` en versalitas
238
+ * o un `pose-laptop-coffee.png` en mayúsculas están mal, y sin este escalón la
239
+ * única salida era un `normal-case` en cada sitio de uso.
240
+ *
241
+ * El documento dice 12.5. Son 13 por la misma razón por la que `textMuted` se
242
+ * corrigió: `limits.minScreenPx` es 13 y plancton «nunca bajo 13px». Esta
243
+ * escala es justo donde se escriben las metas en muted, así que ponerla en
244
+ * 12.5 habría dejado ilegible su uso más común por medio píxel.
245
+ */
246
+ readonly meta: {
247
+ readonly family: "mono";
248
+ readonly size: 13;
249
+ readonly lineHeight: 1.6;
250
+ readonly weight: 400;
251
+ };
252
+ readonly eyebrow: {
253
+ readonly family: "mono";
254
+ readonly size: 12;
255
+ readonly tracking: "0.12em";
256
+ readonly transform: "uppercase";
257
+ };
258
+ };
259
+ /** Límites duros de legibilidad. */
260
+ declare const limits: {
261
+ /** Mínimo absoluto en pantalla. */
262
+ readonly minScreenPx: 13;
263
+ /** Mínimo absoluto impreso. */
264
+ readonly minPrintPt: 12;
265
+ /** Medida máxima de cuerpo. */
266
+ readonly measure: "68ch";
267
+ };
268
+ declare const radius: {
269
+ readonly chip: 6;
270
+ readonly control: 10;
271
+ readonly card: 14;
272
+ readonly panel: 16;
273
+ readonly pill: 999;
274
+ };
275
+ /**
276
+ * Controles, del documento: `sm 8/14 · md 12/22 · lg 15/30 · icono 42×42`.
277
+ *
278
+ * Solo el padding horizontal y el cuadrado del botón de icono. El alto sale de
279
+ * la escala tipográfica, y el radio es uno solo para los tres tamaños: ver
280
+ * `docs/decisiones.md`.
281
+ *
282
+ * No están en `spacing` porque no son ritmo de página: 14, 22 y 30 no componen
283
+ * con 8/12/16/26/40 y no deben ofrecerse como márgenes.
284
+ */
285
+ declare const control: {
286
+ readonly sm: 14;
287
+ readonly md: 22;
288
+ readonly lg: 30;
289
+ /** Botón de icono: cuadrado, sin texto. */
290
+ readonly icon: 42;
291
+ };
292
+ declare const spacing: {
293
+ readonly xs: 8;
294
+ readonly sm: 12;
295
+ readonly md: 16;
296
+ readonly lg: 26;
297
+ readonly xl: 40;
298
+ readonly section: 96;
299
+ };
300
+ declare const size: {
301
+ /** Alto de la barra de navegación. */
302
+ readonly nav: 64;
303
+ /** Ancho de columna de lectura. */
304
+ readonly content: 760;
305
+ /** Ancho máximo de página. */
306
+ readonly wide: 1180;
307
+ };
308
+ /**
309
+ * La paleta del resaltado de sintaxis.
310
+ *
311
+ * Del documento, literal: «keywords arena, strings bioluz, comments plancton,
312
+ * identifiers espuma», sobre casco. CUATRO colores a propósito — el sistema se
313
+ * comunica con color y borde, no con ruido cromático, así que funciones,
314
+ * variables y tipos caen todos en espuma.
315
+ *
316
+ * El bloque de código es una isla de tema oscuro en los dos modos (ver
317
+ * `CodeBlock`), así que esta paleta NO tiene par claro: siempre va sobre casco.
318
+ *
319
+ * Contrastes MEDIDOS sobre `brand.hull` #0B1524, todos AA:
320
+ *
321
+ * identificador espuma 16.42:1
322
+ * literal bioluz 10.05:1
323
+ * palabraClave arena 9.05:1
324
+ * comentario plancton 5.43:1
325
+ * invalido error 4.97:1
326
+ *
327
+ * `brand.body` (#3E7CB1) NO entra: el sistema lo restringe a relleno, nunca a
328
+ * texto, y aquí mide 4.2:1.
329
+ *
330
+ * Los literales numéricos y booleanos van con las cadenas en bioluz. El
331
+ * documento no los asigna, y agruparlos con las cadenas —los tres son
332
+ * literales— es más coherente que estrenar un quinto color fuera de la paleta.
333
+ */
334
+ declare const sintaxis: {
335
+ /** El casco. Es el fondo del bloque en los dos modos. */
336
+ readonly fondo: "#0B1524";
337
+ /** Identificadores, funciones, tipos, variables. */
338
+ readonly identificador: "#EDF4F3";
339
+ /** Cadenas, números, booleanos, null. */
340
+ readonly literal: "#35D6C0";
341
+ /** Palabras clave, control de flujo, `import`, `this`. */
342
+ readonly palabraClave: "#F2A65A";
343
+ /** Comentarios y puntuación. */
344
+ readonly comentario: "#71919C";
345
+ /** `markup.deleted`, `invalid`. */
346
+ readonly invalido: "#E15757";
347
+ };
348
+ declare const gradient: {
349
+ readonly dark: {
350
+ readonly hero: "linear-gradient(160deg, #091319 60%, #0D2129 100%)";
351
+ readonly seccion: "linear-gradient(150deg, #10202B 0%, #0D2129 100%)";
352
+ /** El de la plantilla OG de artículo. 145°, del documento. */
353
+ readonly og: "linear-gradient(145deg, #091319 55%, #0D2129 100%)";
354
+ };
355
+ readonly light: {
356
+ readonly hero: "linear-gradient(160deg, #F6F2EA 60%, #EFE9DE 100%)";
357
+ readonly seccion: "linear-gradient(150deg, #FFFFFF 0%, #EFE9DE 100%)";
358
+ readonly og: "linear-gradient(145deg, #F6F2EA 55%, #EFE9DE 100%)";
359
+ };
360
+ };
361
+ /** Un solo nivel. No hay escala de elevación. */
362
+ declare const shadow: {
363
+ readonly standard: "0 1px 2px rgba(0, 0, 0, 0.35)";
364
+ };
365
+ /**
366
+ * 150ms ease-out — solo color y borde.
367
+ * El sistema no anima posición ni escala: los estados se comunican con borde
368
+ * y color, no con movimiento.
369
+ */
370
+ declare const motion: {
371
+ readonly duration: "150ms";
372
+ readonly easing: "ease-out";
373
+ readonly properties: "color, background-color, border-color, fill, stroke";
374
+ };
375
+ declare const tagline: {
376
+ /** Hero. */
377
+ readonly largo: "Ayudo a equipos de ingeniería a escalar con criterio";
378
+ /** Header, una línea. */
379
+ readonly corto: "Ayudo a equipos a escalar con criterio";
380
+ /** LinkedIn. */
381
+ readonly en: "Helping engineering teams scale with judgment";
382
+ };
383
+ /**
384
+ * El wordmark siempre dice «Eduardo Álvarez». La mascota se llama Tiburoncín
385
+ * y nunca aparece escrita dentro del logo.
386
+ */
387
+ declare const naming: {
388
+ readonly wordmark: "Eduardo Álvarez";
389
+ readonly mascot: "Tiburoncín";
390
+ /** El dominio, para la firma CLI del footer: `$ cd ~/eduardoalvarez.dev/2026`. */
391
+ readonly domain: "eduardoalvarez.dev";
392
+ };
393
+ type ColorMode = keyof typeof colors;
394
+ type ColorToken = keyof typeof dark;
395
+ type BrandToken = keyof typeof brand;
396
+ type FontToken = keyof typeof fonts;
397
+ type TypeScaleToken = keyof typeof typeScale;
398
+ type RadiusToken = keyof typeof radius;
399
+ type ControlToken = keyof typeof control;
400
+ type GradientToken = keyof typeof gradient.dark;
401
+ type SintaxisToken = keyof typeof sintaxis;
402
+ type SpacingToken = keyof typeof spacing;
403
+ type SizeToken = keyof typeof size;
404
+
405
+ /**
406
+ * Punto de entrada de `@eduardoalvarez/arrecife/tokens`.
407
+ *
408
+ * Igual que `tokens.ts`: no importa nada fuera de este directorio. Es el único
409
+ * subpaquete que pueden consumir los cinco proyectos, Satori y Astro sin React.
410
+ */
411
+
412
+ /** Todos los tokens en un solo objeto, para plantillas Satori y generadores. */
413
+ declare const tokens: {
414
+ readonly colors: {
415
+ readonly dark: {
416
+ readonly background: "#091319";
417
+ readonly surface: "#10202B";
418
+ readonly surfaceRaised: "#17303E";
419
+ readonly border: "#22414F";
420
+ readonly hairline: "#1E3441";
421
+ readonly hairlineHover: "#2C4D5D";
422
+ readonly textPrimary: "#EDF4F3";
423
+ readonly textSecondary: "#A7BCC4";
424
+ readonly textMuted: "#71919C";
425
+ readonly accent: "#35D6C0";
426
+ readonly accentHover: "#5FE3D1";
427
+ readonly accentOn: "#06171A";
428
+ readonly warm: "#F2A65A";
429
+ readonly warmHover: "#F7BB7D";
430
+ readonly warmOn: "#2A1605";
431
+ readonly success: "#4FB477";
432
+ readonly warning: "#E8A33D";
433
+ readonly error: "#E15757";
434
+ };
435
+ readonly light: {
436
+ readonly background: "#F6F2EA";
437
+ readonly surface: "#FFFFFF";
438
+ readonly surfaceRaised: "#EFE9DE";
439
+ readonly border: "#E6DFD2";
440
+ readonly hairline: "#EBE6DC";
441
+ readonly hairlineHover: "#D3C8B2";
442
+ readonly textPrimary: "#0B1524";
443
+ readonly textSecondary: "#3D4B58";
444
+ readonly textMuted: "#626A75";
445
+ readonly accent: "#0D7C6F";
446
+ readonly accentHover: "#0C7466";
447
+ readonly accentOn: "#FFFFFF";
448
+ readonly warm: "#A65B27";
449
+ readonly warmHover: "#96511F";
450
+ readonly warmOn: "#FFF7EE";
451
+ readonly success: "#0F6B52";
452
+ readonly warning: "#8D6111";
453
+ readonly error: "#C0392B";
454
+ };
455
+ };
456
+ readonly brand: {
457
+ readonly body: "#3E7CB1";
458
+ readonly spots: "#C2D7E7";
459
+ readonly hull: "#0B1524";
460
+ };
461
+ readonly fonts: {
462
+ readonly display: "\"Bricolage Grotesque\", ui-sans-serif, system-ui, sans-serif";
463
+ readonly sans: "\"Geist\", ui-sans-serif, system-ui, sans-serif";
464
+ readonly mono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, monospace";
465
+ };
466
+ readonly typeScale: {
467
+ readonly display: {
468
+ readonly family: "display";
469
+ readonly size: 76;
470
+ readonly lineHeight: 0.96;
471
+ readonly weight: 800;
472
+ readonly tracking: "-0.035em";
473
+ };
474
+ readonly stat: {
475
+ readonly family: "display";
476
+ readonly size: 46;
477
+ readonly lineHeight: 1;
478
+ readonly weight: 800;
479
+ readonly tracking: "-0.035em";
480
+ };
481
+ readonly h1: {
482
+ readonly family: "display";
483
+ readonly size: 44;
484
+ readonly lineHeight: 1.05;
485
+ readonly weight: 700;
486
+ readonly tracking: "-0.03em";
487
+ };
488
+ readonly h2: {
489
+ readonly family: "display";
490
+ readonly size: 30;
491
+ readonly lineHeight: 1.1;
492
+ readonly weight: 600;
493
+ readonly tracking: "-0.02em";
494
+ };
495
+ readonly h3: {
496
+ readonly family: "display";
497
+ readonly size: 25;
498
+ readonly lineHeight: 1.15;
499
+ readonly weight: 600;
500
+ readonly tracking: "-0.02em";
501
+ };
502
+ readonly body: {
503
+ readonly family: "sans";
504
+ readonly size: 18;
505
+ readonly lineHeight: 1.75;
506
+ readonly weight: 400;
507
+ };
508
+ readonly lead: {
509
+ readonly family: "sans";
510
+ readonly size: 17;
511
+ readonly lineHeight: 1.5;
512
+ readonly weight: 400;
513
+ };
514
+ readonly ui: {
515
+ readonly family: "sans";
516
+ readonly size: 15;
517
+ readonly lineHeight: 1.6;
518
+ readonly weight: 400;
519
+ };
520
+ readonly label: {
521
+ readonly family: "sans";
522
+ readonly size: 13;
523
+ readonly lineHeight: 1.5;
524
+ readonly weight: 500;
525
+ };
526
+ readonly tag: {
527
+ readonly family: "sans";
528
+ readonly size: 12.5;
529
+ readonly lineHeight: 1.4;
530
+ readonly weight: 500;
531
+ };
532
+ readonly chip: {
533
+ readonly family: "mono";
534
+ readonly size: 11.5;
535
+ readonly lineHeight: 1.4;
536
+ readonly weight: 400;
537
+ };
538
+ readonly meta: {
539
+ readonly family: "mono";
540
+ readonly size: 13;
541
+ readonly lineHeight: 1.6;
542
+ readonly weight: 400;
543
+ };
544
+ readonly eyebrow: {
545
+ readonly family: "mono";
546
+ readonly size: 12;
547
+ readonly tracking: "0.12em";
548
+ readonly transform: "uppercase";
549
+ };
550
+ };
551
+ readonly limits: {
552
+ readonly minScreenPx: 13;
553
+ readonly minPrintPt: 12;
554
+ readonly measure: "68ch";
555
+ };
556
+ readonly radius: {
557
+ readonly chip: 6;
558
+ readonly control: 10;
559
+ readonly card: 14;
560
+ readonly panel: 16;
561
+ readonly pill: 999;
562
+ };
563
+ readonly control: {
564
+ readonly sm: 14;
565
+ readonly md: 22;
566
+ readonly lg: 30;
567
+ readonly icon: 42;
568
+ };
569
+ readonly spacing: {
570
+ readonly xs: 8;
571
+ readonly sm: 12;
572
+ readonly md: 16;
573
+ readonly lg: 26;
574
+ readonly xl: 40;
575
+ readonly section: 96;
576
+ };
577
+ readonly size: {
578
+ readonly nav: 64;
579
+ readonly content: 760;
580
+ readonly wide: 1180;
581
+ };
582
+ readonly gradient: {
583
+ readonly dark: {
584
+ readonly hero: "linear-gradient(160deg, #091319 60%, #0D2129 100%)";
585
+ readonly seccion: "linear-gradient(150deg, #10202B 0%, #0D2129 100%)";
586
+ readonly og: "linear-gradient(145deg, #091319 55%, #0D2129 100%)";
587
+ };
588
+ readonly light: {
589
+ readonly hero: "linear-gradient(160deg, #F6F2EA 60%, #EFE9DE 100%)";
590
+ readonly seccion: "linear-gradient(150deg, #FFFFFF 0%, #EFE9DE 100%)";
591
+ readonly og: "linear-gradient(145deg, #F6F2EA 55%, #EFE9DE 100%)";
592
+ };
593
+ };
594
+ readonly sintaxis: {
595
+ readonly fondo: "#0B1524";
596
+ readonly identificador: "#EDF4F3";
597
+ readonly literal: "#35D6C0";
598
+ readonly palabraClave: "#F2A65A";
599
+ readonly comentario: "#71919C";
600
+ readonly invalido: "#E15757";
601
+ };
602
+ readonly shadow: {
603
+ readonly standard: "0 1px 2px rgba(0, 0, 0, 0.35)";
604
+ };
605
+ readonly motion: {
606
+ readonly duration: "150ms";
607
+ readonly easing: "ease-out";
608
+ readonly properties: "color, background-color, border-color, fill, stroke";
609
+ };
610
+ readonly tagline: {
611
+ readonly largo: "Ayudo a equipos de ingeniería a escalar con criterio";
612
+ readonly corto: "Ayudo a equipos a escalar con criterio";
613
+ readonly en: "Helping engineering teams scale with judgment";
614
+ };
615
+ readonly naming: {
616
+ readonly wordmark: "Eduardo Álvarez";
617
+ readonly mascot: "Tiburoncín";
618
+ readonly domain: "eduardoalvarez.dev";
619
+ };
620
+ };
621
+ type Tokens = typeof tokens;
622
+
623
+ export { type BrandToken, type ColorMode, type ColorToken, type ControlToken, type FontToken, type GradientToken, type RadiusToken, type SintaxisToken, type SizeToken, type SpacingToken, type Tokens, type TypeScaleToken, brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, shadow, sintaxis, size, spacing, tagline, tokens, typeScale };
@@ -0,0 +1,2 @@
1
+ export { tokens } from '../chunk-22OXRTAL.js';
2
+ export { brand, colors, control, dark, fonts, gradient, light, limits, motion, naming, radius, shadow, sintaxis, size, spacing, tagline, typeScale } from '../chunk-DHF63QNM.js';