orbital-ds 0.7.0 → 0.9.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 (109) hide show
  1. package/AGENTS.md +145 -80
  2. package/README.md +87 -73
  3. package/components.manifest.json +1326 -1267
  4. package/contract.json +226 -168
  5. package/dist/hooks/use-ds-messages.d.ts +36 -0
  6. package/dist/hooks/use-ds-messages.js +12 -0
  7. package/dist/hooks/use-ds-motion.d.ts +17 -0
  8. package/dist/hooks/use-ds-motion.js +50 -0
  9. package/dist/lib/i18n.d.ts +46 -0
  10. package/dist/lib/i18n.js +109 -0
  11. package/dist/lib/motion.d.ts +74 -0
  12. package/dist/lib/motion.js +97 -0
  13. package/dist/styles.css +876 -528
  14. package/dist/themes/friendly.css +362 -318
  15. package/dist/themes/friendly.meta.json +75 -14
  16. package/dist/themes/friendly.scoped.css +362 -318
  17. package/dist/themes/qratia.meta.json +42 -12
  18. package/dist/themes/tactile.css +575 -429
  19. package/dist/themes/tactile.fonts.css +3 -2
  20. package/dist/themes/tactile.guide.md +82 -49
  21. package/dist/themes/tactile.meta.json +175 -16
  22. package/dist/themes/tactile.scoped.css +575 -429
  23. package/dist/themes/twitter.css +354 -298
  24. package/dist/themes/twitter.meta.json +83 -61
  25. package/dist/themes/twitter.scoped.css +354 -298
  26. package/dist/themes/zyro.css +443 -389
  27. package/dist/themes/zyro.meta.json +67 -14
  28. package/dist/themes/zyro.scoped.css +443 -389
  29. package/dist/ui/accordion.js +5 -5
  30. package/dist/ui/alert-dialog.js +3 -3
  31. package/dist/ui/alert.d.ts +1 -1
  32. package/dist/ui/alert.js +9 -3
  33. package/dist/ui/attachment.d.ts +1 -1
  34. package/dist/ui/attachment.js +4 -4
  35. package/dist/ui/avatar.js +6 -6
  36. package/dist/ui/ayuda.js +3 -2
  37. package/dist/ui/badge.d.ts +1 -1
  38. package/dist/ui/badge.js +9 -3
  39. package/dist/ui/banner.d.ts +14 -0
  40. package/dist/ui/banner.js +88 -0
  41. package/dist/ui/breadcrumb.js +7 -3
  42. package/dist/ui/bubble.js +6 -6
  43. package/dist/ui/button-group.js +4 -4
  44. package/dist/ui/button.d.ts +1 -1
  45. package/dist/ui/button.js +5 -5
  46. package/dist/ui/calendar.js +33 -6
  47. package/dist/ui/card.js +4 -4
  48. package/dist/ui/carousel.js +15 -8
  49. package/dist/ui/chart.js +7 -3
  50. package/dist/ui/checkbox.js +1 -1
  51. package/dist/ui/combobox.js +7 -7
  52. package/dist/ui/command.js +13 -11
  53. package/dist/ui/context-menu.js +8 -8
  54. package/dist/ui/dialog.js +10 -6
  55. package/dist/ui/drawer.js +9 -9
  56. package/dist/ui/dropdown-menu.js +8 -8
  57. package/dist/ui/empty.js +3 -3
  58. package/dist/ui/field.js +2 -2
  59. package/dist/ui/hover-card.js +1 -1
  60. package/dist/ui/i18n-provider.d.ts +11 -0
  61. package/dist/ui/i18n-provider.js +18 -0
  62. package/dist/ui/icon-tile.d.ts +1 -1
  63. package/dist/ui/input-group.d.ts +1 -1
  64. package/dist/ui/input-group.js +11 -9
  65. package/dist/ui/input-otp.js +3 -3
  66. package/dist/ui/input.js +1 -1
  67. package/dist/ui/item.d.ts +1 -1
  68. package/dist/ui/item.js +3 -3
  69. package/dist/ui/kbd.js +1 -1
  70. package/dist/ui/label.js +1 -1
  71. package/dist/ui/marker.d.ts +1 -1
  72. package/dist/ui/marker.js +2 -2
  73. package/dist/ui/menubar.js +9 -9
  74. package/dist/ui/message-scroller.js +5 -2
  75. package/dist/ui/message.js +2 -2
  76. package/dist/ui/motion-provider.d.ts +11 -0
  77. package/dist/ui/motion-provider.js +16 -0
  78. package/dist/ui/native-select.js +4 -4
  79. package/dist/ui/navigation-menu.js +7 -6
  80. package/dist/ui/pagination.js +19 -11
  81. package/dist/ui/popover.js +2 -2
  82. package/dist/ui/progress.js +2 -2
  83. package/dist/ui/questionnaire.js +20 -15
  84. package/dist/ui/radio-group.js +2 -2
  85. package/dist/ui/resizable.js +2 -2
  86. package/dist/ui/scroll-area.js +3 -3
  87. package/dist/ui/select.js +6 -6
  88. package/dist/ui/separator.js +1 -1
  89. package/dist/ui/sheet.js +6 -4
  90. package/dist/ui/sidebar.js +42 -30
  91. package/dist/ui/skeleton.js +1 -1
  92. package/dist/ui/slider.js +6 -6
  93. package/dist/ui/sonner.js +25 -8
  94. package/dist/ui/spinner.js +4 -1
  95. package/dist/ui/switch.js +2 -2
  96. package/dist/ui/table.js +3 -3
  97. package/dist/ui/tabs.js +5 -5
  98. package/dist/ui/textarea.js +1 -1
  99. package/dist/ui/toast.js +15 -12
  100. package/dist/ui/toggle-group.js +2 -2
  101. package/dist/ui/toggle.js +6 -4
  102. package/dist/ui/tooltip.js +2 -2
  103. package/docs/CONTRACT.md +183 -153
  104. package/package.json +160 -142
  105. package/scripts/brand-core.mjs +153 -0
  106. package/scripts/doctor.mjs +128 -7
  107. package/scripts/i18n.mjs +111 -0
  108. package/scripts/init.mjs +294 -57
  109. package/scripts/setup.mjs +99 -0
@@ -1,2 +1,3 @@
1
- /* Fuentes del tema tactile: Fraunces (titulares) + Figtree (cuerpo). Importar la PRIMERA del CSS de la app. */
2
- @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600..800&family=Figtree:wght@400;500;600;700&display=swap');
1
+ /* Fuentes del tema tactile: Fraunces (titulares, con los ejes SOFT y WONK que usa
2
+ * --ds-display-variation) + Figtree (cuerpo). Importar la PRIMERA del CSS de la app. */
3
+ @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght,SOFT,WONK@9..144,600..800,0..100,0..1&family=Figtree:wght@400..700&display=swap');
@@ -1,49 +1,82 @@
1
- # Tema `tactile` — guía de diseño
2
-
3
- ## Esencia
4
- Una interfaz que se **toca**: papel cálido, tinta oscura y un rotulador. Pensada para SaaS que quieren sentirse cercanos y con humor, sin el aspecto genérico de «app de IA» (degradado índigo, Inter, tarjetas idénticas, brillos).
5
-
6
- ## Gesto firma
7
- 1. **Tecla**: todo lo que se pulsa lleva contorno de tinta de 2px y una arista inferior de 5px que **baja al pulsar** (la pieza se hunde).
8
- 2. **Rotulador**: una banda mostaza translúcida bajo los títulos (`card-title`, `dialog-title`, `sheet-title`, título de página).
9
-
10
- ## Principios
11
- - Lo accionable se distingue de lo informativo por **materia**, no solo por color: lo pulsable tiene arista; lo demás, filete suave.
12
- - Sin sombras difusas: la profundidad la dan las aristas.
13
- - Un acento vivo (mostaza) y uno pequeño (pino). Nunca negro puro: tinta berenjena.
14
- - Formas con jerarquía: 8 · 12 · 14 · 16 (no un único radio para todo).
15
- - Carácter barato y reutilizable: baldosa de icono (`IconTile`) con tono, en vez de ilustraciones.
16
-
17
- ## Referencias y qué se tomó de cada una
18
- Dirección **original**; no copia ninguna. Se tomó un principio de cada una:
19
- - **Duolingo** (según fuentes de terceros): la arista inferior que baja al pulsar.
20
- - **Endorsal** (analizada en navegador): títulos con rotulador de color al 25%, iconos duotono, filas con arista inferior.
21
- - **SerpWatch** (analizada en navegador): lienzo no blanco y sombras teñidas; aquí se sustituyen por papel y aristas.
22
- - **Reglas anti-IA** (síntesis propia): evitar degradado morado-índigo, Inter por defecto, un único radio, brillos decorativos, bordes de color en un solo lado.
23
-
24
- ## Paleta
25
- Dos pieles. Valores de diseño, no medidos contra una referencia externa.
26
- - **Papel (claro)**: fondo `#F6F0E3`, tarjeta `#FFFCF4`, tinta `#2A2233`, primario mostaza `#F2B33D` con texto de tinta, pino `#17624F`, tomate `#B53A22`, cielo `#2F6FB0`.
27
- - **Noche**: fondo `#1D1824` con las mismas familias aclaradas.
28
- - Variante **índigo** (en estudio, no incluida en el paquete): tinta `#232450`, papel `#F4F5FB`, primario `#4B5BBF`, marcador naranja `#FBB232`.
29
-
30
- ## Tipografía
31
- - Titulares: **Fraunces** (serifa suave con carácter; evita la sans de moda).
32
- - Cuerpo: **Figtree** (legible, ligeramente humanista).
33
- - Fuentes en `tactile.fonts.css`: debe ser lo **primero** del CSS de la app.
34
-
35
- ## Formas y profundidad
36
- Radios 8 · 12 · 14 · 16. Arista inferior 5px (4px en controles pequeños) que baja a 2px al pulsar. Filetes de 2px.
37
-
38
- ## Qué evita
39
- Sombras difusas, brillos, degradados decorativos, iconos grises sin carácter, mismo radio en todo, bordes de color en un solo lado.
40
-
41
- ## Qué hace
42
- Teclas con arista, rotulador bajo títulos, baldosas de icono con tono, sidebar a ras con la fila activa como tecla pulsada.
43
-
44
- ## Accesibilidad
45
- Texto de tinta sobre mostaza: contraste ≈ 10:1. El foco usa un anillo propio de 3px. Las aristas no sustituyen al texto del estado.
46
-
47
- ## Estado de los valores
48
- - **Diseño propio**: todos los de este tema; ninguno proviene de una referencia medida.
49
- - **Pendiente**: validar la piel noche con captura en pantalla real y la variante índigo.
1
+ # Tema `tactile` — guía de diseño
2
+
3
+ ## Esencia
4
+ Una interfaz que se **toca**: papel cálido, tinta oscura y un rotulador. Pensada para SaaS que quieren sentirse cercanos y con humor, sin el aspecto genérico de «app de IA» (degradado índigo, Inter, tarjetas idénticas, brillos).
5
+
6
+ ## Gesto firma
7
+ 1. **Tecla**: todo lo que se pulsa lleva contorno de tinta y una arista inferior que **baja al pulsar** (la pieza se hunde).
8
+ 2. **Rotulador**: una franja translúcida del color principal bajo los títulos de componente (card, dialog, sheet, alert-dialog, drawer, empty) y el título de página.
9
+
10
+ ## Principios
11
+ - Lo accionable se distingue de lo informativo por **materia**, no solo por color: lo pulsable tiene arista; lo demás, filete suave.
12
+ - Sin sombras difusas: la profundidad la dan las aristas.
13
+ - Un acento vivo (mostaza) y uno pequeño (pino, para foco y enlace). Nunca negro puro: tinta berenjena.
14
+ - Formas con jerarquía: 8 · 12 · 14 · 16 (no un único radio para todo).
15
+ - **Familias completas**: si una pieza lleva el gesto, sus hermanas también (casilla y radio; todos los campos; todas las capas; todos los menús; pestañas, toggle y grupo de toggles; progreso y deslizador; todos los títulos). Lo exige `pnpm check:ds`.
16
+ - **Todo es variable**: la personalidad no escribe ni una medida, color, peso ni opacidad. Lo exige `pnpm check:ds` (el tema es `conformance: strict`).
17
+ - Carácter barato y reutilizable: baldosa de icono (`IconTile`) con tono, en vez de ilustraciones.
18
+
19
+ ## Tipografía
20
+ | Papel | Fuente | Ajuste |
21
+ |---|---|---|
22
+ | Titulares (h1–h4 y títulos de componente) | **Fraunces**, serifa variable | Ejes `SOFT 50` (suave) y `WONK 1` (letras con humor, solo a tamaño de titular): `--ds-display-variation`. Peso 700 en h1–h3 (`--ds-heading-weight`), 650 en títulos de componente (`--ds-title-weight`), interlineado 1.25, tracking -0.01em |
23
+ | Cuerpo y controles | **Figtree**, sans geométrica y humanista | Cuerpo de **15px** (`--ds-text-sm`), etiquetas de 13px (`--ds-text-xs`); teclas en 700 (`--ds-key-weight`), lateral en 600 (`--ds-nav-weight`) |
24
+ | Código | Monoespaciada del sistema | — |
25
+
26
+ Reglas:
27
+ - Fraunces **solo a 16px o más**: por debajo de 14px se vuelve delicada. El texto pequeño, siempre Figtree.
28
+ - La escala sube el cuerpo a 15px porque las teclas miden 44px: con 14px el texto quedaba pequeño para el control.
29
+ - Fuentes en `tactile.fonts.css` (Fraunces con los ejes `opsz, wght, SOFT, WONK`): debe ser lo **primero** del CSS de la app.
30
+
31
+ ## Variables del gesto (ajustables desde `brand.css`)
32
+ | Variable | Valor | Qué hace |
33
+ |---|---|---|
34
+ | `--ds-key-outline` | tinta (`--foreground`) | contorno de las teclas |
35
+ | `--ds-key-edge` | tinta al 26 % | arista de superficies (tarjetas, tooltip) |
36
+ | `--ds-key-border` | 2px | grosor del contorno |
37
+ | `--ds-key-edge-w` / `-sm` / `-pressed` | 5 / 4 / 2px | arista en reposo, en controles pequeños o densos, y al pulsar |
38
+ | `--ds-key-press` / `-sm` | 3 / 2px | cuánto se hunde al pulsar |
39
+ | `--ds-key-radius` / `-sm` | 14 / 12px | radio de la tecla y de la tecla pequeña |
40
+ | `--ds-rule-w` | 2px | filetes (tarjeta, tabla, acordeón, lateral) |
41
+ | `--ds-overlay-edge-w` | 6px | arista de diálogos y paneles |
42
+ | `--ds-marker` | principal al 62 % (45 % de noche) | rotulador; `transparent` lo apaga |
43
+ | `--ds-marker-thickness` / `--ds-marker-offset` | 0.45em / -0.32em | grosor de la franja y cuánto sube sobre la línea base |
44
+
45
+ Para un tactile «plano» basta con `--ds-key-edge-w: var(--ds-key-border)` y `--ds-key-press: 0px`.
46
+
47
+ ## Marca y color
48
+ - `--sidebar-primary`, `--brand`, `--chart-1` y el rotulador **derivan de `--primary`**: si una app cambia el principal, le siguen.
49
+ - El **foco (`--ring`) y el enlace son pino** a propósito: un anillo mostaza sobre papel no llega a 3:1. Si cambias `--primary`, revisa `--primary-foreground`, `--ring` y `--link`, o deja que `pnpm exec orbital-ds-init` los derive y compruebe.
50
+ - La marca de una app vive en su `brand.css`; nunca se edita el tema.
51
+
52
+ ## Paleta
53
+ Dos pieles. Valores de diseño, no medidos contra una referencia externa.
54
+ - **Papel (claro)**: fondo `#F6F0E3`, tarjeta `#FFFCF4`, papel hondo `#EDE3CD`, tinta `#2A2233`, primario mostaza `#F2B33D` con texto de tinta, pino `#17624F`, tomate `#B53A22`, cielo `#2F6FB0`, ciruela `#8B5A9E`.
55
+ - **Noche**: fondo `#1D1824`, tarjeta `#2C2636`, tinta clara `#F4EBDA`, mostaza `#F2B33D`, pino `#5CC9A8`, tomate `#FF8266`, cielo `#7DB3F0`.
56
+ - Variante **índigo** (en estudio, no incluida en el paquete): tinta `#232450`, papel `#F4F5FB`, primario `#4B5BBF`, marcador naranja `#FBB232`.
57
+
58
+ ## Formas y profundidad
59
+ Radios 8 · 12 · 14 · 16. Arista inferior de 5px (4px en controles pequeños y dentro de calendario, paginación, grupos de botones y campos con botón) que baja a 2px al pulsar. Filetes de 2px. Capas flotantes con contorno de tinta y arista de 4px; diálogos, de 6px.
60
+
61
+ ## Referencias y qué se tomó de cada una
62
+ Dirección **original**; no copia ninguna. Se tomó un principio de cada una:
63
+ - **Duolingo** (según fuentes de terceros): la arista inferior que baja al pulsar.
64
+ - **Endorsal** (analizada en navegador): títulos con rotulador de color al 25%, iconos duotono, filas con arista inferior.
65
+ - **SerpWatch** (analizada en navegador): lienzo no blanco y sombras teñidas; aquí se sustituyen por papel y aristas.
66
+ - **Reglas anti-IA** (síntesis propia): evitar degradado morado-índigo, Inter por defecto, un único radio, brillos decorativos, bordes de color en un solo lado.
67
+
68
+ ## Qué evita
69
+ Sombras difusas, brillos, degradados decorativos, iconos grises sin carácter, mismo radio en todo, piezas hermanas con aspecto distinto, valores escritos a mano.
70
+
71
+ ## Qué hace
72
+ Teclas con arista, rotulador bajo títulos, baldosas de icono con tono, sidebar a ras con la fila activa como tecla pulsada.
73
+
74
+ ## Accesibilidad
75
+ - Texto de tinta sobre mostaza: contraste ≈ 10:1. Todos los pares principales y los textos de estado pasan AA (lo comprueba `pnpm check:ds`, también en los colores derivados).
76
+ - El foco usa el anillo de la estructura (`--ds-ring-width`, 3px) en pino, visible sobre papel y sobre mostaza.
77
+ - El estado pulsado no depende del movimiento: la arista cambia de grosor. Con `prefers-reduced-motion` la estructura anula las transiciones y el cambio es instantáneo.
78
+ - Las aristas no sustituyen al texto del estado.
79
+
80
+ ## Estado de los valores
81
+ - **Diseño propio**: todos los de este tema; ninguno proviene de una referencia medida.
82
+ - **Pendiente**: validar en pantalla real la piel noche, la tecla menor en calendario y paginación, y la variante índigo.
@@ -1,16 +1,175 @@
1
- {
2
- "name": "tactile",
3
- "label": "Táctil",
4
- "essence": "Interfaz de papel y tinta que se toca: teclas con arista y rotulador bajo los títulos.",
5
- "signature": ["tecla con arista inferior que baja al pulsar", "rotulador bajo los títulos"],
6
- "fonts": { "display": "Fraunces", "body": "Figtree", "file": "tactile.fonts.css", "distributable": true },
7
- "palette": { "light": { "background": "#F6F0E3", "foreground": "#2A2233", "primary": "#F2B33D" }, "dark": { "background": "#1D1824" } },
8
- "radii": [8, 12, 14, 16],
9
- "references": [
10
- { "name": "Duolingo", "tookFromIt": "arista inferior que baja al pulsar", "source": "fuentes de terceros" },
11
- { "name": "Endorsal", "tookFromIt": "rotulador bajo títulos, iconos duotono", "source": "análisis en navegador" },
12
- { "name": "SerpWatch", "tookFromIt": "lienzo no blanco", "source": "análisis en navegador" }
13
- ],
14
- "status": { "verified": [], "approximate": [], "designed": ["todos los valores"], "pending": ["piel noche con captura real", "variante índigo"] },
15
- "guide": "tactile.guide.md"
16
- }
1
+ {
2
+ "name": "tactile",
3
+ "label": "Táctil",
4
+ "essence": "Interfaz de papel y tinta que se toca: teclas con arista y rotulador bajo los títulos.",
5
+ "conformance": "strict",
6
+ "signature": [
7
+ "tecla con arista inferior que baja al pulsar",
8
+ "rotulador bajo los títulos"
9
+ ],
10
+ "fonts": {
11
+ "display": "Fraunces",
12
+ "body": "Figtree",
13
+ "mono": "system",
14
+ "file": "tactile.fonts.css",
15
+ "distributable": true,
16
+ "axes": {
17
+ "display": "opsz, wght 600–800, SOFT 0–100, WONK 0–1",
18
+ "body": "wght 400–700"
19
+ },
20
+ "settings": {
21
+ "--ds-display-variation": "\"SOFT\" 50, \"WONK\" 1",
22
+ "--ds-heading-weight": 700,
23
+ "--ds-title-weight": 650,
24
+ "--ds-key-weight": 700,
25
+ "--ds-nav-weight": 600
26
+ },
27
+ "scale": {
28
+ "body": "15px (--ds-text-sm)",
29
+ "label": "13px (--ds-text-xs)"
30
+ },
31
+ "rules": [
32
+ "Fraunces solo a 16px o más",
33
+ "texto pequeño siempre en Figtree"
34
+ ]
35
+ },
36
+ "palette": {
37
+ "light": {
38
+ "background": "#F6F0E3",
39
+ "card": "#FFFCF4",
40
+ "paper": "#EDE3CD",
41
+ "foreground": "#2A2233",
42
+ "primary": "#F2B33D",
43
+ "pine": "#17624F",
44
+ "tomato": "#B53A22",
45
+ "sky": "#2F6FB0",
46
+ "plum": "#8B5A9E"
47
+ },
48
+ "dark": {
49
+ "background": "#1D1824",
50
+ "card": "#2C2636",
51
+ "foreground": "#F4EBDA",
52
+ "primary": "#F2B33D",
53
+ "pine": "#5CC9A8",
54
+ "tomato": "#FF8266",
55
+ "sky": "#7DB3F0"
56
+ },
57
+ "derived": [
58
+ "--sidebar-primary",
59
+ "--brand",
60
+ "--chart-1",
61
+ "--ds-marker",
62
+ "--accent"
63
+ ],
64
+ "brandNotes": "--ring y --link son pino a propósito: un foco mostaza sobre papel no llega a 3:1"
65
+ },
66
+ "radii": [
67
+ 8,
68
+ 12,
69
+ 14,
70
+ 16
71
+ ],
72
+ "references": [
73
+ {
74
+ "name": "Duolingo",
75
+ "tookFromIt": "arista inferior que baja al pulsar",
76
+ "source": "fuentes de terceros"
77
+ },
78
+ {
79
+ "name": "Endorsal",
80
+ "tookFromIt": "rotulador bajo títulos, iconos duotono",
81
+ "source": "análisis en navegador"
82
+ },
83
+ {
84
+ "name": "SerpWatch",
85
+ "tookFromIt": "lienzo no blanco",
86
+ "source": "análisis en navegador"
87
+ }
88
+ ],
89
+ "status": {
90
+ "verified": [],
91
+ "approximate": [],
92
+ "designed": [
93
+ "todos los valores"
94
+ ],
95
+ "pending": [
96
+ "piel noche con captura real",
97
+ "tecla menor en calendario y paginación",
98
+ "variante índigo"
99
+ ]
100
+ },
101
+ "guide": "tactile.guide.md",
102
+ "gestures": [
103
+ {
104
+ "id": "marker",
105
+ "token": "--ds-marker",
106
+ "off": "transparent",
107
+ "about": "rotulador bajo los títulos",
108
+ "related": [
109
+ "--ds-marker-thickness",
110
+ "--ds-marker-offset"
111
+ ]
112
+ },
113
+ {
114
+ "id": "key-outline",
115
+ "token": "--ds-key-outline",
116
+ "about": "contorno de las teclas"
117
+ },
118
+ {
119
+ "id": "key-edge",
120
+ "token": "--ds-key-edge",
121
+ "about": "arista de las superficies"
122
+ },
123
+ {
124
+ "id": "key-shape",
125
+ "token": "--ds-key-edge-w",
126
+ "flat": "var(--ds-key-border)",
127
+ "about": "arista inferior de las teclas",
128
+ "related": [
129
+ "--ds-key-border",
130
+ "--ds-key-edge-w-sm",
131
+ "--ds-key-edge-w-pressed",
132
+ "--ds-key-press",
133
+ "--ds-key-press-sm",
134
+ "--ds-key-radius",
135
+ "--ds-key-radius-sm",
136
+ "--ds-rule-w",
137
+ "--ds-overlay-edge-w"
138
+ ]
139
+ }
140
+ ],
141
+ "a11y": {
142
+ "level": "AA",
143
+ "exceptions": []
144
+ },
145
+ "families": [
146
+ "choice",
147
+ "field",
148
+ "modal",
149
+ "floating",
150
+ "title",
151
+ "toggle",
152
+ "track"
153
+ ],
154
+ "motion": {
155
+ "about": "seco y rápido, como una tecla; las piezas que aparecen rebotan un poco",
156
+ "durations": {
157
+ "fast": "80ms",
158
+ "base": "160ms",
159
+ "slow": "240ms"
160
+ },
161
+ "ease": {
162
+ "standard": "cubic-bezier(0.2, 0, 0, 1)",
163
+ "enter": "cubic-bezier(0.34, 1.4, 0.64, 1)",
164
+ "exit": "cubic-bezier(0.4, 0, 1, 1)"
165
+ },
166
+ "choreography": {
167
+ "motion-distance": "4px",
168
+ "motion-scale": "0.98",
169
+ "motion-blur": "0px",
170
+ "spring-bounce": "0.25",
171
+ "motion-stagger": "30ms",
172
+ "motion-press-scale": "1"
173
+ }
174
+ }
175
+ }