@datametria/vue-components 1.2.0 → 2.0.1

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 (97) hide show
  1. package/README.md +548 -657
  2. package/dist/index.es.js +2353 -1364
  3. package/dist/index.umd.js +10 -10
  4. package/dist/vue-components.css +1 -1
  5. package/package.json +102 -98
  6. package/src/components/DatametriaAlert.vue +137 -137
  7. package/src/components/DatametriaAutocomplete.vue +184 -138
  8. package/src/components/DatametriaAvatar.vue +177 -33
  9. package/src/components/DatametriaBadge.vue +98 -98
  10. package/src/components/DatametriaBreadcrumb.vue +21 -21
  11. package/src/components/DatametriaButton.vue +177 -165
  12. package/src/components/DatametriaCard.vue +12 -12
  13. package/src/components/DatametriaCheckbox.vue +8 -8
  14. package/src/components/DatametriaChip.vue +145 -149
  15. package/src/components/DatametriaContainer.vue +4 -4
  16. package/src/components/DatametriaDatePicker.vue +686 -68
  17. package/src/components/DatametriaDivider.vue +13 -13
  18. package/src/components/DatametriaFileUpload.vue +272 -140
  19. package/src/components/DatametriaGrid.vue +3 -3
  20. package/src/components/DatametriaInput.vue +15 -15
  21. package/src/components/DatametriaMenu.vue +604 -619
  22. package/src/components/DatametriaModal.vue +16 -16
  23. package/src/components/DatametriaNavbar.vue +230 -252
  24. package/src/components/DatametriaPasswordInput.vue +430 -0
  25. package/src/components/DatametriaProgress.vue +18 -18
  26. package/src/components/DatametriaRadio.vue +20 -20
  27. package/src/components/DatametriaSelect.vue +15 -15
  28. package/src/components/DatametriaSkeleton.vue +243 -239
  29. package/src/components/DatametriaSlider.vue +395 -407
  30. package/src/components/DatametriaSortableTable.vue +585 -0
  31. package/src/components/DatametriaSpinner.vue +7 -7
  32. package/src/components/DatametriaSwitch.vue +16 -16
  33. package/src/components/DatametriaTable.vue +14 -14
  34. package/src/components/DatametriaTextarea.vue +28 -28
  35. package/src/components/DatametriaTimePicker.vue +285 -285
  36. package/src/components/DatametriaToast.vue +176 -176
  37. package/src/components/DatametriaTooltip.vue +408 -408
  38. package/src/components/__tests__/DatametriaAlert.test.js +35 -35
  39. package/src/components/__tests__/DatametriaAlert.test.ts +190 -0
  40. package/src/components/__tests__/DatametriaAutocomplete.test.ts +180 -0
  41. package/src/components/__tests__/DatametriaAvatar.test.ts +152 -0
  42. package/src/components/__tests__/DatametriaBadge.test.js +29 -29
  43. package/src/components/__tests__/DatametriaBadge.test.ts +167 -0
  44. package/src/components/__tests__/DatametriaBreadcrumb.test.ts +75 -0
  45. package/src/components/__tests__/DatametriaButton.test.js +30 -30
  46. package/src/components/__tests__/DatametriaButton.test.ts +283 -0
  47. package/src/components/__tests__/DatametriaCard.test.ts +201 -0
  48. package/src/components/__tests__/DatametriaCheckbox.test.ts +47 -0
  49. package/src/components/__tests__/DatametriaChip.test.js +38 -38
  50. package/src/components/__tests__/DatametriaContainer.test.ts +52 -0
  51. package/src/components/__tests__/DatametriaDatePicker.test.ts +234 -0
  52. package/src/components/__tests__/DatametriaDivider.test.ts +54 -0
  53. package/src/components/__tests__/DatametriaFileUpload.test.ts +291 -0
  54. package/src/components/__tests__/DatametriaGrid.test.ts +31 -0
  55. package/src/components/__tests__/DatametriaInput.test.ts +72 -0
  56. package/src/components/__tests__/DatametriaMenu.test.ts +366 -0
  57. package/src/components/__tests__/DatametriaModal.test.ts +86 -0
  58. package/src/components/__tests__/DatametriaNavbar.test.js +48 -48
  59. package/src/components/__tests__/DatametriaNavbar.test.ts +203 -0
  60. package/src/components/__tests__/DatametriaPasswordInput.test.js +305 -0
  61. package/src/components/__tests__/DatametriaProgress.test.ts +90 -0
  62. package/src/components/__tests__/DatametriaRadio.test.ts +77 -0
  63. package/src/components/__tests__/DatametriaSelect.test.ts +77 -0
  64. package/src/components/__tests__/DatametriaSlider.test.ts +261 -0
  65. package/src/components/__tests__/DatametriaSortableTable.test.js +168 -0
  66. package/src/components/__tests__/DatametriaSpinner.test.ts +156 -0
  67. package/src/components/__tests__/DatametriaSwitch.test.ts +64 -0
  68. package/src/components/__tests__/DatametriaTable.test.ts +97 -0
  69. package/src/components/__tests__/DatametriaTextarea.test.ts +66 -0
  70. package/src/components/__tests__/DatametriaToast.test.js +48 -48
  71. package/src/components/__tests__/DatametriaToast.test.ts +99 -0
  72. package/src/composables/useAccessibilityScale.ts +94 -94
  73. package/src/composables/useBreakpoints.ts +82 -82
  74. package/src/composables/useHapticFeedback.ts +439 -439
  75. package/src/composables/useRipple.ts +218 -218
  76. package/src/index.ts +68 -61
  77. package/src/stories/Variants.stories.js +95 -95
  78. package/src/styles/design-tokens.css +623 -623
  79. package/src/theme/ThemeProvider.vue +96 -0
  80. package/src/theme/__tests__/ThemeProvider.test.ts +208 -0
  81. package/src/theme/__tests__/constants.test.ts +31 -0
  82. package/src/theme/__tests__/presets.test.ts +166 -0
  83. package/src/theme/__tests__/tokens.test.ts +155 -0
  84. package/src/theme/__tests__/types.test.ts +153 -0
  85. package/src/theme/__tests__/useTheme.test.ts +146 -0
  86. package/src/theme/constants.ts +14 -0
  87. package/src/theme/index.ts +12 -0
  88. package/src/theme/presets/datametria.ts +94 -0
  89. package/src/theme/presets/default.ts +94 -0
  90. package/src/theme/presets/index.ts +8 -0
  91. package/src/theme/tokens/colors.ts +28 -0
  92. package/src/theme/tokens/index.ts +47 -0
  93. package/src/theme/tokens/spacing.ts +21 -0
  94. package/src/theme/tokens/typography.ts +35 -0
  95. package/src/theme/types.ts +111 -0
  96. package/src/theme/useTheme.ts +28 -0
  97. package/src/types/index.ts +19 -0
@@ -1,623 +1,623 @@
1
- :root {
2
- --dm-primary: #0072CE;
3
- --dm-secondary: #4B0078;
4
- --dm-success: #10b981;
5
- --dm-error: #ef4444;
6
- --dm-warning: #f59e0b;
7
- --dm-info: #06b6d4;
8
-
9
- --dm-gray-50: #f9fafb;
10
- --dm-gray-100: #f3f4f6;
11
- --dm-gray-700: #374151;
12
- --dm-gray-900: #111827;
13
-
14
- /* Gradientes corporativos */
15
- --gradient-primary: linear-gradient(135deg, #0072CE 0%, #005ba3 100%);
16
- --gradient-secondary: linear-gradient(135deg, #4B0078 0%, #3a005c 100%);
17
- --gradient-success: linear-gradient(135deg, #10b981 0%, #059669 100%);
18
- --gradient-warning: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
19
-
20
- /* Bordas temáticas */
21
- --border-success: #10b981;
22
- --border-warning: #f59e0b;
23
- --border-info: #06b6d4;
24
- --border-feature: #8b5cf6;
25
- --border-error: #ef4444;
26
-
27
- --dm-space-2: 0.5rem;
28
- --dm-space-3: 0.75rem;
29
- --dm-space-4: 1rem;
30
-
31
- --dm-text-sm: 0.875rem;
32
- --dm-text-base: 1rem;
33
- --dm-text-lg: 1.125rem;
34
-
35
- /* Fluid typography */
36
- --dm-text-xs-fluid: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);
37
- --dm-text-sm-fluid: clamp(0.875rem, 0.8rem + 0.375vw, 1rem);
38
- --dm-text-base-fluid: clamp(1rem, 0.9rem + 0.5vw, 1.125rem);
39
- --dm-text-lg-fluid: clamp(1.125rem, 1rem + 0.625vw, 1.25rem);
40
- --dm-text-xl-fluid: clamp(1.25rem, 1.1rem + 0.75vw, 1.5rem);
41
- --dm-text-2xl-fluid: clamp(1.5rem, 1.3rem + 1vw, 1.875rem);
42
- --dm-text-3xl-fluid: clamp(1.875rem, 1.6rem + 1.375vw, 2.25rem);
43
-
44
- --dm-radius: 0.375rem;
45
- --dm-transition: 200ms ease-in-out;
46
- --dm-focus-ring: 0 0 0 3px rgba(0, 114, 206, 0.1);
47
-
48
- /* Accessibility Scale (default 1.0, range 0.8-2.0) */
49
- --user-scale: 1.0;
50
-
51
- /* Scaled typography */
52
- --dm-text-sm-scaled: calc(var(--dm-text-sm) * var(--user-scale));
53
- --dm-text-base-scaled: calc(var(--dm-text-base) * var(--user-scale));
54
- --dm-text-lg-scaled: calc(var(--dm-text-lg) * var(--user-scale));
55
-
56
- /* Scaled spacing */
57
- --dm-space-2-scaled: calc(var(--dm-space-2) * var(--user-scale));
58
- --dm-space-3-scaled: calc(var(--dm-space-3) * var(--user-scale));
59
- --dm-space-4-scaled: calc(var(--dm-space-4) * var(--user-scale));
60
-
61
- /* Shimmer animation */
62
- --shimmer-bg: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.4) 50%, transparent 100%);
63
- --shimmer-duration: 1.5s;
64
-
65
- /* Enhanced transitions */
66
- --transition-fast: 150ms ease-out;
67
- --transition-normal: 200ms ease-in-out;
68
- --transition-slow: 300ms ease-in-out;
69
- --transition-bounce: 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
70
- --transition-smooth: 250ms cubic-bezier(0.4, 0, 0.2, 1);
71
-
72
- /* Responsive breakpoints */
73
- --breakpoint-xs: 475px;
74
- --breakpoint-sm: 640px;
75
- --breakpoint-md: 768px;
76
- --breakpoint-lg: 1024px;
77
- --breakpoint-xl: 1280px;
78
- --breakpoint-2xl: 1536px;
79
-
80
- /* Fluid spacing system */
81
- --space-xs-fluid: clamp(0.25rem, 0.2rem + 0.25vw, 0.375rem);
82
- --space-sm-fluid: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
83
- --space-md-fluid: clamp(1rem, 0.8rem + 1vw, 1.5rem);
84
- --space-lg-fluid: clamp(1.5rem, 1.2rem + 1.5vw, 2.25rem);
85
- --space-xl-fluid: clamp(2rem, 1.6rem + 2vw, 3rem);
86
- --space-2xl-fluid: clamp(2.5rem, 2rem + 2.5vw, 3.75rem);
87
-
88
- /* Fluid border radius */
89
- --radius-sm-fluid: clamp(0.125rem, 0.1rem + 0.125vw, 0.25rem);
90
- --radius-md-fluid: clamp(0.375rem, 0.3rem + 0.375vw, 0.5rem);
91
- --radius-lg-fluid: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
92
- --radius-xl-fluid: clamp(0.75rem, 0.6rem + 0.75vw, 1rem);
93
-
94
- /* Container max-widths */
95
- --container-xs: 475px;
96
- --container-sm: 640px;
97
- --container-md: 768px;
98
- --container-lg: 1024px;
99
- --container-xl: 1280px;
100
- --container-2xl: 1536px;
101
-
102
- /* Grid system */
103
- --grid-cols-1: repeat(1, minmax(0, 1fr));
104
- --grid-cols-2: repeat(2, minmax(0, 1fr));
105
- --grid-cols-3: repeat(3, minmax(0, 1fr));
106
- --grid-cols-4: repeat(4, minmax(0, 1fr));
107
- --grid-cols-6: repeat(6, minmax(0, 1fr));
108
- --grid-cols-12: repeat(12, minmax(0, 1fr));
109
-
110
- /* Responsive grid gaps */
111
- --gap-xs: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
112
- --gap-sm: clamp(0.75rem, 0.6rem + 0.75vw, 1rem);
113
- --gap-md: clamp(1rem, 0.8rem + 1vw, 1.5rem);
114
- --gap-lg: clamp(1.5rem, 1.2rem + 1.5vw, 2rem);
115
- --gap-xl: clamp(2rem, 1.6rem + 2vw, 2.5rem);
116
- }
117
- }
118
-
119
- /* Dark Mode Variables */
120
- [data-theme="dark"] {
121
- --dm-primary: #3b82f6;
122
- --dm-secondary: #8b5cf6;
123
- --dm-success: #22c55e;
124
- --dm-error: #f87171;
125
- --dm-warning: #fbbf24;
126
- --dm-info: #38bdf8;
127
-
128
- --dm-bg-primary: #111827;
129
- --dm-bg-secondary: #1f2937;
130
- --dm-text-primary: #f9fafb;
131
- --dm-text-secondary: #d1d5db;
132
-
133
- --dm-gray-50: #1f2937;
134
- --dm-gray-100: #374151;
135
- --dm-gray-700: #d1d5db;
136
- --dm-gray-900: #f9fafb;
137
-
138
- /* Dark mode gradients */
139
- --gradient-primary: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
140
- --gradient-secondary: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
141
- --gradient-success: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
142
- --gradient-warning: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);
143
-
144
- /* Dark mode borders */
145
- --border-success: #22c55e;
146
- --border-warning: #fbbf24;
147
- --border-info: #38bdf8;
148
- --border-feature: #a78bfa;
149
- --border-error: #f87171;
150
-
151
- /* Dark mode shimmer */
152
- --shimmer-bg: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.1) 50%, transparent 100%);
153
- }
154
-
155
- /* Shimmer Animation */
156
- @keyframes shimmer {
157
- 0% {
158
- background-position: -200% 0;
159
- }
160
- 100% {
161
- background-position: 200% 0;
162
- }
163
- }
164
-
165
- .shimmer {
166
- background: var(--dm-gray-200, #e5e7eb);
167
- background-image: var(--shimmer-bg);
168
- background-size: 200% 100%;
169
- background-repeat: no-repeat;
170
- animation: shimmer var(--shimmer-duration) ease-in-out infinite;
171
- }
172
-
173
- [data-theme="dark"] .shimmer {
174
- background: var(--dm-gray-700, #374151);
175
- }
176
-
177
- /* Enhanced transition utilities */
178
- .transition-fast {
179
- transition: all var(--transition-fast);
180
- }
181
-
182
- .transition-normal {
183
- transition: all var(--transition-normal);
184
- }
185
-
186
- .transition-slow {
187
- transition: all var(--transition-slow);
188
- }
189
-
190
- .transition-bounce {
191
- transition: all var(--transition-bounce);
192
- }
193
-
194
- .transition-smooth {
195
- transition: all var(--transition-smooth);
196
- }
197
-
198
- /* Fade transitions */
199
- .fade-enter-active,
200
- .fade-leave-active {
201
- transition: opacity var(--transition-normal);
202
- }
203
-
204
- .fade-enter-from,
205
- .fade-leave-to {
206
- opacity: 0;
207
- }
208
-
209
- /* Slide transitions */
210
- .slide-up-enter-active,
211
- .slide-up-leave-active {
212
- transition: all var(--transition-smooth);
213
- }
214
-
215
- .slide-up-enter-from {
216
- opacity: 0;
217
- transform: translateY(20px);
218
- }
219
-
220
- .slide-up-leave-to {
221
- opacity: 0;
222
- transform: translateY(-20px);
223
- }
224
-
225
- .slide-down-enter-active,
226
- .slide-down-leave-active {
227
- transition: all var(--transition-smooth);
228
- }
229
-
230
- .slide-down-enter-from {
231
- opacity: 0;
232
- transform: translateY(-20px);
233
- }
234
-
235
- .slide-down-leave-to {
236
- opacity: 0;
237
- transform: translateY(20px);
238
- }
239
-
240
- /* Scale transitions */
241
- .scale-enter-active,
242
- .scale-leave-active {
243
- transition: all var(--transition-bounce);
244
- }
245
-
246
- .scale-enter-from,
247
- .scale-leave-to {
248
- opacity: 0;
249
- transform: scale(0.9);
250
- }
251
-
252
- /* Respect user motion preferences */
253
- @media (prefers-reduced-motion: reduce) {
254
- .shimmer {
255
- animation: none;
256
- }
257
-
258
- .transition-fast,
259
- .transition-normal,
260
- .transition-slow,
261
- .transition-bounce,
262
- .transition-smooth {
263
- transition: none;
264
- }
265
-
266
- .fade-enter-active,
267
- .fade-leave-active,
268
- .slide-up-enter-active,
269
- .slide-up-leave-active,
270
- .slide-down-enter-active,
271
- .slide-down-leave-active,
272
- .scale-enter-active,
273
- .scale-leave-active {
274
- transition: none;
275
- }
276
- }
277
-
278
- /* Responsive breakpoints */
279
- @media (min-width: 475px) {
280
- .xs\:block { display: block; }
281
- .xs\:hidden { display: none; }
282
- .xs\:text-sm { font-size: var(--dm-text-sm); }
283
- .xs\:text-base { font-size: var(--dm-text-base); }
284
- }
285
-
286
- @media (min-width: 640px) {
287
- .sm\:block { display: block; }
288
- .sm\:hidden { display: none; }
289
- .sm\:text-sm { font-size: var(--dm-text-sm); }
290
- .sm\:text-base { font-size: var(--dm-text-base); }
291
- .sm\:text-lg { font-size: var(--dm-text-lg); }
292
- }
293
-
294
- @media (min-width: 768px) {
295
- .md\:block { display: block; }
296
- .md\:hidden { display: none; }
297
- .md\:text-sm { font-size: var(--dm-text-sm); }
298
- .md\:text-base { font-size: var(--dm-text-base); }
299
- .md\:text-lg { font-size: var(--dm-text-lg); }
300
- .md\:text-xl { font-size: 1.25rem; }
301
- }
302
-
303
- @media (min-width: 1024px) {
304
- .lg\:block { display: block; }
305
- .lg\:hidden { display: none; }
306
- .lg\:text-sm { font-size: var(--dm-text-sm); }
307
- .lg\:text-base { font-size: var(--dm-text-base); }
308
- .lg\:text-lg { font-size: var(--dm-text-lg); }
309
- .lg\:text-xl { font-size: 1.25rem; }
310
- .lg\:text-2xl { font-size: 1.5rem; }
311
- }
312
-
313
- @media (min-width: 1280px) {
314
- .xl\:block { display: block; }
315
- .xl\:hidden { display: none; }
316
- .xl\:text-lg { font-size: var(--dm-text-lg); }
317
- .xl\:text-xl { font-size: 1.25rem; }
318
- .xl\:text-2xl { font-size: 1.5rem; }
319
- .xl\:text-3xl { font-size: 1.875rem; }
320
- }
321
-
322
- @media (min-width: 1536px) {
323
- .\32xl\:block { display: block; }
324
- .\32xl\:hidden { display: none; }
325
- .\32xl\:text-xl { font-size: 1.25rem; }
326
- .\32xl\:text-2xl { font-size: 1.5rem; }
327
- .\32xl\:text-3xl { font-size: 1.875rem; }
328
- .\32xl\:text-4xl { font-size: 2.25rem; }
329
- }
330
-
331
- /* Container queries */
332
- .container-query {
333
- container-type: inline-size;
334
- }
335
-
336
- @container (min-width: 320px) {
337
- .cq-xs\:block { display: block; }
338
- .cq-xs\:hidden { display: none; }
339
- .cq-xs\:text-sm { font-size: var(--dm-text-sm); }
340
- }
341
-
342
- @container (min-width: 480px) {
343
- .cq-sm\:block { display: block; }
344
- .cq-sm\:hidden { display: none; }
345
- .cq-sm\:text-base { font-size: var(--dm-text-base); }
346
- }
347
-
348
- @container (min-width: 640px) {
349
- .cq-md\:block { display: block; }
350
- .cq-md\:hidden { display: none; }
351
- .cq-md\:text-lg { font-size: var(--dm-text-lg); }
352
- }
353
-
354
- @container (min-width: 768px) {
355
- .cq-lg\:block { display: block; }
356
- .cq-lg\:hidden { display: none; }
357
- .cq-lg\:text-xl { font-size: 1.25rem; }
358
- }
359
-
360
- /* Aspect ratio utilities */
361
- .aspect-square {
362
- aspect-ratio: 1 / 1;
363
- }
364
-
365
- .aspect-video {
366
- aspect-ratio: 16 / 9;
367
- }
368
-
369
- .aspect-photo {
370
- aspect-ratio: 4 / 3;
371
- }
372
-
373
- .aspect-portrait {
374
- aspect-ratio: 3 / 4;
375
- }
376
-
377
- .aspect-wide {
378
- aspect-ratio: 21 / 9;
379
- }
380
-
381
- .aspect-golden {
382
- aspect-ratio: 1.618 / 1;
383
- }
384
-
385
- /* Fallback for browsers without aspect-ratio support */
386
- @supports not (aspect-ratio: 1 / 1) {
387
- .aspect-square::before {
388
- content: '';
389
- display: block;
390
- padding-top: 100%;
391
- }
392
-
393
- .aspect-video::before {
394
- content: '';
395
- display: block;
396
- padding-top: 56.25%; /* 9/16 * 100% */
397
- }
398
-
399
- .aspect-photo::before {
400
- content: '';
401
- display: block;
402
- padding-top: 75%; /* 3/4 * 100% */
403
- }
404
-
405
- .aspect-portrait::before {
406
- content: '';
407
- display: block;
408
- padding-top: 133.33%; /* 4/3 * 100% */
409
- }
410
-
411
- .aspect-wide::before {
412
- content: '';
413
- display: block;
414
- padding-top: 42.86%; /* 9/21 * 100% */
415
- }
416
-
417
- .aspect-golden::before {
418
- content: '';
419
- display: block;
420
- padding-top: 61.8%; /* 1/1.618 * 100% */
421
- }
422
- }
423
-
424
- /* Enhanced responsive utilities */
425
- .container {
426
- width: 100%;
427
- margin-left: auto;
428
- margin-right: auto;
429
- padding-left: var(--space-sm-fluid);
430
- padding-right: var(--space-sm-fluid);
431
- }
432
-
433
- @media (min-width: 475px) {
434
- .container { max-width: var(--container-xs); }
435
- }
436
-
437
- @media (min-width: 640px) {
438
- .container { max-width: var(--container-sm); }
439
- }
440
-
441
- @media (min-width: 768px) {
442
- .container { max-width: var(--container-md); }
443
- }
444
-
445
- @media (min-width: 1024px) {
446
- .container { max-width: var(--container-lg); }
447
- }
448
-
449
- @media (min-width: 1280px) {
450
- .container { max-width: var(--container-xl); }
451
- }
452
-
453
- @media (min-width: 1536px) {
454
- .container { max-width: var(--container-2xl); }
455
- }
456
-
457
- /* Responsive grid system */
458
- .grid {
459
- display: grid;
460
- gap: var(--gap-md);
461
- }
462
-
463
- .grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
464
- .grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
465
- .grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
466
- .grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
467
- .grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
468
- .grid-cols-12 { grid-template-columns: var(--grid-cols-12); }
469
-
470
- /* Responsive grid columns */
471
- @media (min-width: 640px) {
472
- .sm\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
473
- .sm\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
474
- .sm\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
475
- .sm\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
476
- }
477
-
478
- @media (min-width: 768px) {
479
- .md\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
480
- .md\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
481
- .md\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
482
- .md\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
483
- .md\:grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
484
- }
485
-
486
- @media (min-width: 1024px) {
487
- .lg\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
488
- .lg\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
489
- .lg\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
490
- .lg\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
491
- .lg\:grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
492
- .lg\:grid-cols-12 { grid-template-columns: var(--grid-cols-12); }
493
- }
494
-
495
- /* Fluid spacing utilities */
496
- .space-xs { margin: var(--space-xs-fluid); }
497
- .space-sm { margin: var(--space-sm-fluid); }
498
- .space-md { margin: var(--space-md-fluid); }
499
- .space-lg { margin: var(--space-lg-fluid); }
500
- .space-xl { margin: var(--space-xl-fluid); }
501
- .space-2xl { margin: var(--space-2xl-fluid); }
502
-
503
- .p-xs { padding: var(--space-xs-fluid); }
504
- .p-sm { padding: var(--space-sm-fluid); }
505
- .p-md { padding: var(--space-md-fluid); }
506
- .p-lg { padding: var(--space-lg-fluid); }
507
- .p-xl { padding: var(--space-xl-fluid); }
508
- .p-2xl { padding: var(--space-2xl-fluid); }
509
-
510
- .gap-xs { gap: var(--gap-xs); }
511
- .gap-sm { gap: var(--gap-sm); }
512
- .gap-md { gap: var(--gap-md); }
513
- .gap-lg { gap: var(--gap-lg); }
514
- .gap-xl { gap: var(--gap-xl); }
515
-
516
- /* Fluid border radius utilities */
517
- .rounded-sm { border-radius: var(--radius-sm-fluid); }
518
- .rounded-md { border-radius: var(--radius-md-fluid); }
519
- .rounded-lg { border-radius: var(--radius-lg-fluid); }
520
- .rounded-xl { border-radius: var(--radius-xl-fluid); }
521
-
522
- /* Responsive text alignment */
523
- .text-left { text-align: left; }
524
- .text-center { text-align: center; }
525
- .text-right { text-align: right; }
526
-
527
- @media (min-width: 640px) {
528
- .sm\:text-left { text-align: left; }
529
- .sm\:text-center { text-align: center; }
530
- .sm\:text-right { text-align: right; }
531
- }
532
-
533
- @media (min-width: 768px) {
534
- .md\:text-left { text-align: left; }
535
- .md\:text-center { text-align: center; }
536
- .md\:text-right { text-align: right; }
537
- }
538
-
539
- @media (min-width: 1024px) {
540
- .lg\:text-left { text-align: left; }
541
- .lg\:text-center { text-align: center; }
542
- .lg\:text-right { text-align: right; }
543
- }
544
-
545
- /* Responsive flexbox utilities */
546
- .flex { display: flex; }
547
- .flex-col { flex-direction: column; }
548
- .flex-row { flex-direction: row; }
549
- .flex-wrap { flex-wrap: wrap; }
550
- .flex-nowrap { flex-wrap: nowrap; }
551
-
552
- .justify-start { justify-content: flex-start; }
553
- .justify-center { justify-content: center; }
554
- .justify-end { justify-content: flex-end; }
555
- .justify-between { justify-content: space-between; }
556
- .justify-around { justify-content: space-around; }
557
- .justify-evenly { justify-content: space-evenly; }
558
-
559
- .items-start { align-items: flex-start; }
560
- .items-center { align-items: center; }
561
- .items-end { align-items: flex-end; }
562
- .items-stretch { align-items: stretch; }
563
-
564
- @media (min-width: 640px) {
565
- .sm\:flex { display: flex; }
566
- .sm\:flex-col { flex-direction: column; }
567
- .sm\:flex-row { flex-direction: row; }
568
- .sm\:justify-start { justify-content: flex-start; }
569
- .sm\:justify-center { justify-content: center; }
570
- .sm\:justify-end { justify-content: flex-end; }
571
- .sm\:justify-between { justify-content: space-between; }
572
- }
573
-
574
- @media (min-width: 768px) {
575
- .md\:flex { display: flex; }
576
- .md\:flex-col { flex-direction: column; }
577
- .md\:flex-row { flex-direction: row; }
578
- .md\:justify-start { justify-content: flex-start; }
579
- .md\:justify-center { justify-content: center; }
580
- .md\:justify-end { justify-content: flex-end; }
581
- .md\:justify-between { justify-content: space-between; }
582
- }
583
-
584
- @media (min-width: 1024px) {
585
- .lg\:flex { display: flex; }
586
- .lg\:flex-col { flex-direction: column; }
587
- .lg\:flex-row { flex-direction: row; }
588
- .lg\:justify-start { justify-content: flex-start; }
589
- .lg\:justify-center { justify-content: center; }
590
- .lg\:justify-end { justify-content: flex-end; }
591
- .lg\:justify-between { justify-content: space-between; }
592
- }
593
-
594
- /* Mobile-first responsive adjustments */
595
- @media (max-width: 640px) {
596
- :root {
597
- --dm-text-sm: 0.8rem;
598
- --dm-text-base: 0.9rem;
599
- --dm-space-2: 0.375rem;
600
- --dm-space-3: 0.625rem;
601
- --dm-space-4: 0.875rem;
602
- }
603
-
604
- .container {
605
- padding-left: 1rem;
606
- padding-right: 1rem;
607
- }
608
- }
609
-
610
- @media (max-width: 475px) {
611
- :root {
612
- --dm-text-sm: 0.75rem;
613
- --dm-text-base: 0.875rem;
614
- --dm-space-2: 0.25rem;
615
- --dm-space-3: 0.5rem;
616
- --dm-space-4: 0.75rem;
617
- }
618
-
619
- .container {
620
- padding-left: 0.75rem;
621
- padding-right: 0.75rem;
622
- }
623
- }
1
+ :root {
2
+ --dm-primary: #0072CE;
3
+ --dm-secondary: #4B0078;
4
+ --dm-success: #10b981;
5
+ --dm-error: #ef4444;
6
+ --dm-warning: #f59e0b;
7
+ --dm-info: #06b6d4;
8
+
9
+ --dm-gray-50: #f9fafb;
10
+ --dm-gray-100: #f3f4f6;
11
+ --dm-gray-700: #374151;
12
+ --dm-gray-900: #111827;
13
+
14
+ /* Gradientes corporativos */
15
+ --gradient-primary: linear-gradient(135deg, #0072CE 0%, #005ba3 100%);
16
+ --gradient-secondary: linear-gradient(135deg, #4B0078 0%, #3a005c 100%);
17
+ --gradient-success: linear-gradient(135deg, #10b981 0%, #059669 100%);
18
+ --gradient-warning: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
19
+
20
+ /* Bordas temáticas */
21
+ --border-success: #10b981;
22
+ --border-warning: #f59e0b;
23
+ --border-info: #06b6d4;
24
+ --border-feature: #8b5cf6;
25
+ --border-error: #ef4444;
26
+
27
+ --dm-space-2: 0.5rem;
28
+ --dm-space-3: 0.75rem;
29
+ --dm-space-4: 1rem;
30
+
31
+ --dm-text-sm: 0.875rem;
32
+ --dm-text-base: 1rem;
33
+ --dm-text-lg: 1.125rem;
34
+
35
+ /* Fluid typography */
36
+ --dm-text-xs-fluid: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem);
37
+ --dm-text-sm-fluid: clamp(0.875rem, 0.8rem + 0.375vw, 1rem);
38
+ --dm-text-base-fluid: clamp(1rem, 0.9rem + 0.5vw, 1.125rem);
39
+ --dm-text-lg-fluid: clamp(1.125rem, 1rem + 0.625vw, 1.25rem);
40
+ --dm-text-xl-fluid: clamp(1.25rem, 1.1rem + 0.75vw, 1.5rem);
41
+ --dm-text-2xl-fluid: clamp(1.5rem, 1.3rem + 1vw, 1.875rem);
42
+ --dm-text-3xl-fluid: clamp(1.875rem, 1.6rem + 1.375vw, 2.25rem);
43
+
44
+ --dm-radius: 0.375rem;
45
+ --dm-transition: 200ms ease-in-out;
46
+ --dm-focus-ring: 0 0 0 3px rgba(0, 114, 206, 0.1);
47
+
48
+ /* Accessibility Scale (default 1.0, range 0.8-2.0) */
49
+ --user-scale: 1.0;
50
+
51
+ /* Scaled typography */
52
+ --dm-text-sm-scaled: calc(var(--dm-text-sm) * var(--user-scale));
53
+ --dm-text-base-scaled: calc(var(--dm-text-base) * var(--user-scale));
54
+ --dm-text-lg-scaled: calc(var(--dm-text-lg) * var(--user-scale));
55
+
56
+ /* Scaled spacing */
57
+ --dm-space-2-scaled: calc(var(--dm-space-2) * var(--user-scale));
58
+ --dm-space-3-scaled: calc(var(--dm-space-3) * var(--user-scale));
59
+ --dm-space-4-scaled: calc(var(--dm-space-4) * var(--user-scale));
60
+
61
+ /* Shimmer animation */
62
+ --shimmer-bg: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.4) 50%, transparent 100%);
63
+ --shimmer-duration: 1.5s;
64
+
65
+ /* Enhanced transitions */
66
+ --transition-fast: 150ms ease-out;
67
+ --transition-normal: 200ms ease-in-out;
68
+ --transition-slow: 300ms ease-in-out;
69
+ --transition-bounce: 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
70
+ --transition-smooth: 250ms cubic-bezier(0.4, 0, 0.2, 1);
71
+
72
+ /* Responsive breakpoints */
73
+ --breakpoint-xs: 475px;
74
+ --breakpoint-sm: 640px;
75
+ --breakpoint-md: 768px;
76
+ --breakpoint-lg: 1024px;
77
+ --breakpoint-xl: 1280px;
78
+ --breakpoint-2xl: 1536px;
79
+
80
+ /* Fluid spacing system */
81
+ --space-xs-fluid: clamp(0.25rem, 0.2rem + 0.25vw, 0.375rem);
82
+ --space-sm-fluid: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
83
+ --space-md-fluid: clamp(1rem, 0.8rem + 1vw, 1.5rem);
84
+ --space-lg-fluid: clamp(1.5rem, 1.2rem + 1.5vw, 2.25rem);
85
+ --space-xl-fluid: clamp(2rem, 1.6rem + 2vw, 3rem);
86
+ --space-2xl-fluid: clamp(2.5rem, 2rem + 2.5vw, 3.75rem);
87
+
88
+ /* Fluid border radius */
89
+ --radius-sm-fluid: clamp(0.125rem, 0.1rem + 0.125vw, 0.25rem);
90
+ --radius-md-fluid: clamp(0.375rem, 0.3rem + 0.375vw, 0.5rem);
91
+ --radius-lg-fluid: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
92
+ --radius-xl-fluid: clamp(0.75rem, 0.6rem + 0.75vw, 1rem);
93
+
94
+ /* Container max-widths */
95
+ --container-xs: 475px;
96
+ --container-sm: 640px;
97
+ --container-md: 768px;
98
+ --container-lg: 1024px;
99
+ --container-xl: 1280px;
100
+ --container-2xl: 1536px;
101
+
102
+ /* Grid system */
103
+ --grid-cols-1: repeat(1, minmax(0, 1fr));
104
+ --grid-cols-2: repeat(2, minmax(0, 1fr));
105
+ --grid-cols-3: repeat(3, minmax(0, 1fr));
106
+ --grid-cols-4: repeat(4, minmax(0, 1fr));
107
+ --grid-cols-6: repeat(6, minmax(0, 1fr));
108
+ --grid-cols-12: repeat(12, minmax(0, 1fr));
109
+
110
+ /* Responsive grid gaps */
111
+ --gap-xs: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
112
+ --gap-sm: clamp(0.75rem, 0.6rem + 0.75vw, 1rem);
113
+ --gap-md: clamp(1rem, 0.8rem + 1vw, 1.5rem);
114
+ --gap-lg: clamp(1.5rem, 1.2rem + 1.5vw, 2rem);
115
+ --gap-xl: clamp(2rem, 1.6rem + 2vw, 2.5rem);
116
+ }
117
+ }
118
+
119
+ /* Dark Mode Variables */
120
+ [data-theme="dark"] {
121
+ --dm-primary: #3b82f6;
122
+ --dm-secondary: #8b5cf6;
123
+ --dm-success: #22c55e;
124
+ --dm-error: #f87171;
125
+ --dm-warning: #fbbf24;
126
+ --dm-info: #38bdf8;
127
+
128
+ --dm-bg-primary: #111827;
129
+ --dm-bg-secondary: #1f2937;
130
+ --dm-text-primary: #f9fafb;
131
+ --dm-text-secondary: #d1d5db;
132
+
133
+ --dm-gray-50: #1f2937;
134
+ --dm-gray-100: #374151;
135
+ --dm-gray-700: #d1d5db;
136
+ --dm-gray-900: #f9fafb;
137
+
138
+ /* Dark mode gradients */
139
+ --gradient-primary: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
140
+ --gradient-secondary: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);
141
+ --gradient-success: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);
142
+ --gradient-warning: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);
143
+
144
+ /* Dark mode borders */
145
+ --border-success: #22c55e;
146
+ --border-warning: #fbbf24;
147
+ --border-info: #38bdf8;
148
+ --border-feature: #a78bfa;
149
+ --border-error: #f87171;
150
+
151
+ /* Dark mode shimmer */
152
+ --shimmer-bg: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.1) 50%, transparent 100%);
153
+ }
154
+
155
+ /* Shimmer Animation */
156
+ @keyframes shimmer {
157
+ 0% {
158
+ background-position: -200% 0;
159
+ }
160
+ 100% {
161
+ background-position: 200% 0;
162
+ }
163
+ }
164
+
165
+ .shimmer {
166
+ background: var(--dm-gray-200, #e5e7eb);
167
+ background-image: var(--shimmer-bg);
168
+ background-size: 200% 100%;
169
+ background-repeat: no-repeat;
170
+ animation: shimmer var(--shimmer-duration) ease-in-out infinite;
171
+ }
172
+
173
+ [data-theme="dark"] .shimmer {
174
+ background: var(--dm-gray-700, #374151);
175
+ }
176
+
177
+ /* Enhanced transition utilities */
178
+ .transition-fast {
179
+ transition: all var(--transition-fast);
180
+ }
181
+
182
+ .transition-normal {
183
+ transition: all var(--transition-normal);
184
+ }
185
+
186
+ .transition-slow {
187
+ transition: all var(--transition-slow);
188
+ }
189
+
190
+ .transition-bounce {
191
+ transition: all var(--transition-bounce);
192
+ }
193
+
194
+ .transition-smooth {
195
+ transition: all var(--transition-smooth);
196
+ }
197
+
198
+ /* Fade transitions */
199
+ .fade-enter-active,
200
+ .fade-leave-active {
201
+ transition: opacity var(--transition-normal);
202
+ }
203
+
204
+ .fade-enter-from,
205
+ .fade-leave-to {
206
+ opacity: 0;
207
+ }
208
+
209
+ /* Slide transitions */
210
+ .slide-up-enter-active,
211
+ .slide-up-leave-active {
212
+ transition: all var(--transition-smooth);
213
+ }
214
+
215
+ .slide-up-enter-from {
216
+ opacity: 0;
217
+ transform: translateY(20px);
218
+ }
219
+
220
+ .slide-up-leave-to {
221
+ opacity: 0;
222
+ transform: translateY(-20px);
223
+ }
224
+
225
+ .slide-down-enter-active,
226
+ .slide-down-leave-active {
227
+ transition: all var(--transition-smooth);
228
+ }
229
+
230
+ .slide-down-enter-from {
231
+ opacity: 0;
232
+ transform: translateY(-20px);
233
+ }
234
+
235
+ .slide-down-leave-to {
236
+ opacity: 0;
237
+ transform: translateY(20px);
238
+ }
239
+
240
+ /* Scale transitions */
241
+ .scale-enter-active,
242
+ .scale-leave-active {
243
+ transition: all var(--transition-bounce);
244
+ }
245
+
246
+ .scale-enter-from,
247
+ .scale-leave-to {
248
+ opacity: 0;
249
+ transform: scale(0.9);
250
+ }
251
+
252
+ /* Respect user motion preferences */
253
+ @media (prefers-reduced-motion: reduce) {
254
+ .shimmer {
255
+ animation: none;
256
+ }
257
+
258
+ .transition-fast,
259
+ .transition-normal,
260
+ .transition-slow,
261
+ .transition-bounce,
262
+ .transition-smooth {
263
+ transition: none;
264
+ }
265
+
266
+ .fade-enter-active,
267
+ .fade-leave-active,
268
+ .slide-up-enter-active,
269
+ .slide-up-leave-active,
270
+ .slide-down-enter-active,
271
+ .slide-down-leave-active,
272
+ .scale-enter-active,
273
+ .scale-leave-active {
274
+ transition: none;
275
+ }
276
+ }
277
+
278
+ /* Responsive breakpoints */
279
+ @media (min-width: 475px) {
280
+ .xs\:block { display: block; }
281
+ .xs\:hidden { display: none; }
282
+ .xs\:text-sm { font-size: var(--dm-text-sm); }
283
+ .xs\:text-base { font-size: var(--dm-text-base); }
284
+ }
285
+
286
+ @media (min-width: 640px) {
287
+ .sm\:block { display: block; }
288
+ .sm\:hidden { display: none; }
289
+ .sm\:text-sm { font-size: var(--dm-text-sm); }
290
+ .sm\:text-base { font-size: var(--dm-text-base); }
291
+ .sm\:text-lg { font-size: var(--dm-text-lg); }
292
+ }
293
+
294
+ @media (min-width: 768px) {
295
+ .md\:block { display: block; }
296
+ .md\:hidden { display: none; }
297
+ .md\:text-sm { font-size: var(--dm-text-sm); }
298
+ .md\:text-base { font-size: var(--dm-text-base); }
299
+ .md\:text-lg { font-size: var(--dm-text-lg); }
300
+ .md\:text-xl { font-size: 1.25rem; }
301
+ }
302
+
303
+ @media (min-width: 1024px) {
304
+ .lg\:block { display: block; }
305
+ .lg\:hidden { display: none; }
306
+ .lg\:text-sm { font-size: var(--dm-text-sm); }
307
+ .lg\:text-base { font-size: var(--dm-text-base); }
308
+ .lg\:text-lg { font-size: var(--dm-text-lg); }
309
+ .lg\:text-xl { font-size: 1.25rem; }
310
+ .lg\:text-2xl { font-size: 1.5rem; }
311
+ }
312
+
313
+ @media (min-width: 1280px) {
314
+ .xl\:block { display: block; }
315
+ .xl\:hidden { display: none; }
316
+ .xl\:text-lg { font-size: var(--dm-text-lg); }
317
+ .xl\:text-xl { font-size: 1.25rem; }
318
+ .xl\:text-2xl { font-size: 1.5rem; }
319
+ .xl\:text-3xl { font-size: 1.875rem; }
320
+ }
321
+
322
+ @media (min-width: 1536px) {
323
+ .\32xl\:block { display: block; }
324
+ .\32xl\:hidden { display: none; }
325
+ .\32xl\:text-xl { font-size: 1.25rem; }
326
+ .\32xl\:text-2xl { font-size: 1.5rem; }
327
+ .\32xl\:text-3xl { font-size: 1.875rem; }
328
+ .\32xl\:text-4xl { font-size: 2.25rem; }
329
+ }
330
+
331
+ /* Container queries */
332
+ .container-query {
333
+ container-type: inline-size;
334
+ }
335
+
336
+ @container (min-width: 320px) {
337
+ .cq-xs\:block { display: block; }
338
+ .cq-xs\:hidden { display: none; }
339
+ .cq-xs\:text-sm { font-size: var(--dm-text-sm); }
340
+ }
341
+
342
+ @container (min-width: 480px) {
343
+ .cq-sm\:block { display: block; }
344
+ .cq-sm\:hidden { display: none; }
345
+ .cq-sm\:text-base { font-size: var(--dm-text-base); }
346
+ }
347
+
348
+ @container (min-width: 640px) {
349
+ .cq-md\:block { display: block; }
350
+ .cq-md\:hidden { display: none; }
351
+ .cq-md\:text-lg { font-size: var(--dm-text-lg); }
352
+ }
353
+
354
+ @container (min-width: 768px) {
355
+ .cq-lg\:block { display: block; }
356
+ .cq-lg\:hidden { display: none; }
357
+ .cq-lg\:text-xl { font-size: 1.25rem; }
358
+ }
359
+
360
+ /* Aspect ratio utilities */
361
+ .aspect-square {
362
+ aspect-ratio: 1 / 1;
363
+ }
364
+
365
+ .aspect-video {
366
+ aspect-ratio: 16 / 9;
367
+ }
368
+
369
+ .aspect-photo {
370
+ aspect-ratio: 4 / 3;
371
+ }
372
+
373
+ .aspect-portrait {
374
+ aspect-ratio: 3 / 4;
375
+ }
376
+
377
+ .aspect-wide {
378
+ aspect-ratio: 21 / 9;
379
+ }
380
+
381
+ .aspect-golden {
382
+ aspect-ratio: 1.618 / 1;
383
+ }
384
+
385
+ /* Fallback for browsers without aspect-ratio support */
386
+ @supports not (aspect-ratio: 1 / 1) {
387
+ .aspect-square::before {
388
+ content: '';
389
+ display: block;
390
+ padding-top: 100%;
391
+ }
392
+
393
+ .aspect-video::before {
394
+ content: '';
395
+ display: block;
396
+ padding-top: 56.25%; /* 9/16 * 100% */
397
+ }
398
+
399
+ .aspect-photo::before {
400
+ content: '';
401
+ display: block;
402
+ padding-top: 75%; /* 3/4 * 100% */
403
+ }
404
+
405
+ .aspect-portrait::before {
406
+ content: '';
407
+ display: block;
408
+ padding-top: 133.33%; /* 4/3 * 100% */
409
+ }
410
+
411
+ .aspect-wide::before {
412
+ content: '';
413
+ display: block;
414
+ padding-top: 42.86%; /* 9/21 * 100% */
415
+ }
416
+
417
+ .aspect-golden::before {
418
+ content: '';
419
+ display: block;
420
+ padding-top: 61.8%; /* 1/1.618 * 100% */
421
+ }
422
+ }
423
+
424
+ /* Enhanced responsive utilities */
425
+ .container {
426
+ width: 100%;
427
+ margin-left: auto;
428
+ margin-right: auto;
429
+ padding-left: var(--space-sm-fluid);
430
+ padding-right: var(--space-sm-fluid);
431
+ }
432
+
433
+ @media (min-width: 475px) {
434
+ .container { max-width: var(--container-xs); }
435
+ }
436
+
437
+ @media (min-width: 640px) {
438
+ .container { max-width: var(--container-sm); }
439
+ }
440
+
441
+ @media (min-width: 768px) {
442
+ .container { max-width: var(--container-md); }
443
+ }
444
+
445
+ @media (min-width: 1024px) {
446
+ .container { max-width: var(--container-lg); }
447
+ }
448
+
449
+ @media (min-width: 1280px) {
450
+ .container { max-width: var(--container-xl); }
451
+ }
452
+
453
+ @media (min-width: 1536px) {
454
+ .container { max-width: var(--container-2xl); }
455
+ }
456
+
457
+ /* Responsive grid system */
458
+ .grid {
459
+ display: grid;
460
+ gap: var(--gap-md);
461
+ }
462
+
463
+ .grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
464
+ .grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
465
+ .grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
466
+ .grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
467
+ .grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
468
+ .grid-cols-12 { grid-template-columns: var(--grid-cols-12); }
469
+
470
+ /* Responsive grid columns */
471
+ @media (min-width: 640px) {
472
+ .sm\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
473
+ .sm\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
474
+ .sm\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
475
+ .sm\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
476
+ }
477
+
478
+ @media (min-width: 768px) {
479
+ .md\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
480
+ .md\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
481
+ .md\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
482
+ .md\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
483
+ .md\:grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
484
+ }
485
+
486
+ @media (min-width: 1024px) {
487
+ .lg\:grid-cols-1 { grid-template-columns: var(--grid-cols-1); }
488
+ .lg\:grid-cols-2 { grid-template-columns: var(--grid-cols-2); }
489
+ .lg\:grid-cols-3 { grid-template-columns: var(--grid-cols-3); }
490
+ .lg\:grid-cols-4 { grid-template-columns: var(--grid-cols-4); }
491
+ .lg\:grid-cols-6 { grid-template-columns: var(--grid-cols-6); }
492
+ .lg\:grid-cols-12 { grid-template-columns: var(--grid-cols-12); }
493
+ }
494
+
495
+ /* Fluid spacing utilities */
496
+ .space-xs { margin: var(--space-xs-fluid); }
497
+ .space-sm { margin: var(--space-sm-fluid); }
498
+ .space-md { margin: var(--space-md-fluid); }
499
+ .space-lg { margin: var(--space-lg-fluid); }
500
+ .space-xl { margin: var(--space-xl-fluid); }
501
+ .space-2xl { margin: var(--space-2xl-fluid); }
502
+
503
+ .p-xs { padding: var(--space-xs-fluid); }
504
+ .p-sm { padding: var(--space-sm-fluid); }
505
+ .p-md { padding: var(--space-md-fluid); }
506
+ .p-lg { padding: var(--space-lg-fluid); }
507
+ .p-xl { padding: var(--space-xl-fluid); }
508
+ .p-2xl { padding: var(--space-2xl-fluid); }
509
+
510
+ .gap-xs { gap: var(--gap-xs); }
511
+ .gap-sm { gap: var(--gap-sm); }
512
+ .gap-md { gap: var(--gap-md); }
513
+ .gap-lg { gap: var(--gap-lg); }
514
+ .gap-xl { gap: var(--gap-xl); }
515
+
516
+ /* Fluid border radius utilities */
517
+ .rounded-sm { border-radius: var(--radius-sm-fluid); }
518
+ .rounded-md { border-radius: var(--radius-md-fluid); }
519
+ .rounded-lg { border-radius: var(--radius-lg-fluid); }
520
+ .rounded-xl { border-radius: var(--radius-xl-fluid); }
521
+
522
+ /* Responsive text alignment */
523
+ .text-left { text-align: left; }
524
+ .text-center { text-align: center; }
525
+ .text-right { text-align: right; }
526
+
527
+ @media (min-width: 640px) {
528
+ .sm\:text-left { text-align: left; }
529
+ .sm\:text-center { text-align: center; }
530
+ .sm\:text-right { text-align: right; }
531
+ }
532
+
533
+ @media (min-width: 768px) {
534
+ .md\:text-left { text-align: left; }
535
+ .md\:text-center { text-align: center; }
536
+ .md\:text-right { text-align: right; }
537
+ }
538
+
539
+ @media (min-width: 1024px) {
540
+ .lg\:text-left { text-align: left; }
541
+ .lg\:text-center { text-align: center; }
542
+ .lg\:text-right { text-align: right; }
543
+ }
544
+
545
+ /* Responsive flexbox utilities */
546
+ .flex { display: flex; }
547
+ .flex-col { flex-direction: column; }
548
+ .flex-row { flex-direction: row; }
549
+ .flex-wrap { flex-wrap: wrap; }
550
+ .flex-nowrap { flex-wrap: nowrap; }
551
+
552
+ .justify-start { justify-content: flex-start; }
553
+ .justify-center { justify-content: center; }
554
+ .justify-end { justify-content: flex-end; }
555
+ .justify-between { justify-content: space-between; }
556
+ .justify-around { justify-content: space-around; }
557
+ .justify-evenly { justify-content: space-evenly; }
558
+
559
+ .items-start { align-items: flex-start; }
560
+ .items-center { align-items: center; }
561
+ .items-end { align-items: flex-end; }
562
+ .items-stretch { align-items: stretch; }
563
+
564
+ @media (min-width: 640px) {
565
+ .sm\:flex { display: flex; }
566
+ .sm\:flex-col { flex-direction: column; }
567
+ .sm\:flex-row { flex-direction: row; }
568
+ .sm\:justify-start { justify-content: flex-start; }
569
+ .sm\:justify-center { justify-content: center; }
570
+ .sm\:justify-end { justify-content: flex-end; }
571
+ .sm\:justify-between { justify-content: space-between; }
572
+ }
573
+
574
+ @media (min-width: 768px) {
575
+ .md\:flex { display: flex; }
576
+ .md\:flex-col { flex-direction: column; }
577
+ .md\:flex-row { flex-direction: row; }
578
+ .md\:justify-start { justify-content: flex-start; }
579
+ .md\:justify-center { justify-content: center; }
580
+ .md\:justify-end { justify-content: flex-end; }
581
+ .md\:justify-between { justify-content: space-between; }
582
+ }
583
+
584
+ @media (min-width: 1024px) {
585
+ .lg\:flex { display: flex; }
586
+ .lg\:flex-col { flex-direction: column; }
587
+ .lg\:flex-row { flex-direction: row; }
588
+ .lg\:justify-start { justify-content: flex-start; }
589
+ .lg\:justify-center { justify-content: center; }
590
+ .lg\:justify-end { justify-content: flex-end; }
591
+ .lg\:justify-between { justify-content: space-between; }
592
+ }
593
+
594
+ /* Mobile-first responsive adjustments */
595
+ @media (max-width: 640px) {
596
+ :root {
597
+ --dm-text-sm: 0.8rem;
598
+ --dm-text-base: 0.9rem;
599
+ --dm-space-2: 0.375rem;
600
+ --dm-space-3: 0.625rem;
601
+ --dm-space-4: 0.875rem;
602
+ }
603
+
604
+ .container {
605
+ padding-left: 1rem;
606
+ padding-right: 1rem;
607
+ }
608
+ }
609
+
610
+ @media (max-width: 475px) {
611
+ :root {
612
+ --dm-text-sm: 0.75rem;
613
+ --dm-text-base: 0.875rem;
614
+ --dm-space-2: 0.25rem;
615
+ --dm-space-3: 0.5rem;
616
+ --dm-space-4: 0.75rem;
617
+ }
618
+
619
+ .container {
620
+ padding-left: 0.75rem;
621
+ padding-right: 0.75rem;
622
+ }
623
+ }