domma-js 0.3.1-alpha → 0.7.0-alpha

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 (39) hide show
  1. package/README.md +33 -30
  2. package/assets/types/config.d.ts +127 -0
  3. package/assets/types/dates.d.ts +209 -0
  4. package/assets/types/dom.d.ts +448 -0
  5. package/assets/types/elements.d.ts +606 -0
  6. package/assets/types/http.d.ts +97 -0
  7. package/assets/types/icons.d.ts +147 -0
  8. package/assets/types/index.d.ts +197 -0
  9. package/assets/types/models.d.ts +188 -0
  10. package/assets/types/storage.d.ts +93 -0
  11. package/assets/types/tables.d.ts +327 -0
  12. package/assets/types/theme.d.ts +136 -0
  13. package/assets/types/utils.d.ts +675 -0
  14. package/bin/domma-cli.js +144 -0
  15. package/package.json +12 -5
  16. package/public/dist/bundles/domma-complete.css +2316 -170
  17. package/public/dist/bundles/domma-data-focused.css +2686 -321
  18. package/public/dist/bundles/domma-essentials.css +2686 -321
  19. package/public/dist/bundles/domma-full.css +2686 -321
  20. package/public/dist/bundles/domma-grayve.css +13839 -0
  21. package/public/dist/bundles/domma-minimal.css +1591 -9
  22. package/public/dist/domma-syntax.min.js +8 -0
  23. package/public/dist/domma.css +1586 -4
  24. package/public/dist/domma.esm.js +4 -4
  25. package/public/dist/domma.min.js +4 -4
  26. package/public/dist/elements.css +368 -17
  27. package/public/dist/grid.css +3 -3
  28. package/public/dist/syntax.css +3 -3
  29. package/public/dist/themes/domma-themes.css +216 -3
  30. package/public/dist/themes/grayve.css +213 -0
  31. package/templates/kickstart/about/index.html +241 -0
  32. package/templates/kickstart/assets/logo/placeholder.svg +6 -0
  33. package/templates/kickstart/blog/index.html +227 -0
  34. package/templates/kickstart/contact/index.html +218 -0
  35. package/templates/kickstart/css/custom.css +121 -0
  36. package/templates/kickstart/docs/index.html +310 -0
  37. package/templates/kickstart/domma.config.json +47 -0
  38. package/templates/kickstart/index.html +170 -0
  39. package/templates/kickstart/js/app.js +161 -0
@@ -1,21 +1,240 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.3.0-alpha.0
2
+ * Domma Data-Focused CSS Bundle v0.5.0-alpha
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-01-02T14:32:25.774Z
5
+ * Built: 2026-01-08T09:15:50.446Z
6
6
  */
7
7
 
8
+ /* ============================================
9
+ GRAYVE THEME
10
+ Bootswatch Slate theme adaptation
11
+ ============================================ */
12
+
13
+ .dm-theme-grayve {
14
+ color-scheme: dark; /* Slate is typically a dark theme */
15
+
16
+ /* Tailwind-based color palette - adapting for grayve */
17
+ /* Slate (using bootswatch values) */
18
+ --dm-slate-50: #F8F9FA; /* Off-white */
19
+ --dm-slate-100: #E9ECEF;
20
+ --dm-slate-200: #DEE2E6;
21
+ --dm-slate-300: #CED4DA;
22
+ --dm-slate-400: #ADB5BD;
23
+ --dm-slate-500: #6C757D; /* Medium Gray */
24
+ --dm-slate-600: #495057;
25
+ --dm-slate-700: #343A40;
26
+ --dm-slate-800: #212529;
27
+ --dm-slate-900: #1a1e21; /* Dark Gray */
28
+ --dm-slate-950: #141619; /* Very Dark Gray */
29
+
30
+ /* Blues (for primary/info, etc.) */
31
+ --dm-blue-50: #e0f7fa;
32
+ --dm-blue-100: #b2ebf2;
33
+ --dm-blue-200: #80deea;
34
+ --dm-blue-300: #4dd0e1;
35
+ --dm-blue-400: #26c6da;
36
+ --dm-blue-500: #00bcd4; /* Bootswatch primary might be close to this or lighter */
37
+ --dm-blue-600: #00acc1;
38
+ --dm-blue-700: #0097a7;
39
+ --dm-blue-800: #00838f;
40
+ --dm-blue-900: #006064;
41
+ --dm-blue-950: #004d40;
42
+
43
+ /* Green (Success) */
44
+ --dm-green-500: #28a745;
45
+ --dm-green-400: #49cc61;
46
+ --dm-green-300: #6fd180;
47
+ --dm-green-600: #218838;
48
+
49
+ /* Red (Danger) */
50
+ --dm-red-500: #dc3545;
51
+ --dm-red-400: #e35a67;
52
+ --dm-red-300: #eb808a;
53
+ --dm-red-600: #c82333;
54
+
55
+ /* Amber (Warning) */
56
+ --dm-amber-500: #ffc107;
57
+ --dm-amber-400: #ffcd38;
58
+ --dm-amber-300: #ffd865;
59
+ --dm-amber-600: #e0a800;
60
+
61
+ /* Sky (Info - often similar to primary but distinct) */
62
+ --dm-sky-500: #17a2b8;
63
+ --dm-sky-400: #26d2e9;
64
+ --dm-sky-300: #51daec;
65
+ --dm-sky-600: #138496;
66
+
67
+ /* Semantic colors */
68
+ --dm-background: var(--dm-slate-900);
69
+ --dm-background-alt: var(--dm-slate-800);
70
+ --dm-surface: var(--dm-slate-800);
71
+ --dm-surface-raised: var(--dm-slate-700);
72
+ --dm-surface-overlay: rgba(0, 0, 0, 0.7);
73
+
74
+ /* Text */
75
+ --dm-text: var(--dm-slate-200);
76
+ --dm-text-secondary: var(--dm-slate-400);
77
+ --dm-text-muted: var(--dm-slate-500);
78
+ --dm-text-disabled: var(--dm-slate-600);
79
+ --dm-text-inverse: var(--dm-slate-900);
80
+
81
+ /* Borders */
82
+ --dm-border: var(--dm-slate-700);
83
+ --dm-border-light: var(--dm-slate-800);
84
+ --dm-border-dark: var(--dm-slate-600);
85
+ --dm-border-focus: var(--dm-blue-500); /* Use a vibrant blue for focus */
86
+ --dm-focus-ring: rgba(0, 188, 212, 0.3); /* Based on dm-blue-500 */
87
+ --dm-focus-ring-danger: rgba(220, 53, 69, 0.3); /* Based on dm-red-500 */
88
+
89
+ /* Interactive States */
90
+ --dm-hover-bg: rgba(255, 255, 255, 0.07);
91
+ --dm-active-bg: rgba(255, 255, 255, 0.1);
92
+ --dm-selected-bg: var(--dm-blue-600);
93
+ --dm-disabled-opacity: 0.4;
94
+
95
+ /* Brand Colors */
96
+ --dm-primary: var(--dm-blue-500);
97
+ --dm-primary-dark: var(--dm-blue-700);
98
+ --dm-primary-light: var(--dm-blue-300);
99
+ --dm-primary-hover: var(--dm-blue-400);
100
+ --dm-primary-active: var(--dm-blue-600);
101
+
102
+ --dm-secondary: var(--dm-slate-500);
103
+ --dm-secondary-hover: var(--dm-slate-400);
104
+ --dm-secondary-active: var(--dm-slate-300);
105
+
106
+ /* Status Colors */
107
+ --dm-success: var(--dm-green-500);
108
+ --dm-success-hover: var(--dm-green-400);
109
+ --dm-success-active: var(--dm-green-600);
110
+ --dm-success-light: rgba(40, 167, 69, 0.2);
111
+ --dm-success-dark: var(--dm-green-600);
112
+
113
+ --dm-danger: var(--dm-red-500);
114
+ --dm-danger-hover: var(--dm-red-400);
115
+ --dm-danger-active: var(--dm-red-600);
116
+ --dm-danger-light: rgba(220, 53, 69, 0.2);
117
+ --dm-danger-dark: var(--dm-red-600);
118
+
119
+ --dm-warning: var(--dm-amber-400);
120
+ --dm-warning-hover: var(--dm-amber-300);
121
+ --dm-warning-active: var(--dm-amber-500);
122
+ --dm-warning-text: var(--dm-amber-900);
123
+ --dm-warning-light: rgba(255, 193, 7, 0.2);
124
+ --dm-warning-dark: var(--dm-amber-600);
125
+
126
+ --dm-info: var(--dm-sky-500);
127
+ --dm-info-hover: var(--dm-sky-400);
128
+ --dm-info-active: var(--dm-sky-600);
129
+ --dm-info-light: rgba(23, 162, 184, 0.2);
130
+ --dm-info-dark: var(--dm-sky-600);
131
+
132
+ /* Background Tints */
133
+ --dm-primary-bg: rgba(0, 188, 212, 0.15);
134
+ --dm-secondary-bg: rgba(108, 117, 125, 0.15);
135
+ --dm-success-bg: rgba(40, 167, 69, 0.15);
136
+ --dm-danger-bg: rgba(220, 53, 69, 0.15);
137
+ --dm-warning-bg: rgba(255, 193, 7, 0.15);
138
+ --dm-info-bg: rgba(23, 162, 184, 0.15);
139
+
140
+ /* Semantic Surface Colors */
141
+ --dm-surface-secondary: var(--dm-slate-900);
142
+ --dm-card-bg: var(--dm-slate-800);
143
+ --dm-card-border: var(--dm-slate-700);
144
+
145
+ /* Legacy color names (kept for backwards compatibility) */
146
+ --dm-light: var(--dm-slate-200);
147
+ --dm-dark: var(--dm-slate-800);
148
+ --dm-white: #ffffff;
149
+ --dm-black: #000000;
150
+
151
+ /* Grays (mapped to Slate) */
152
+ --dm-gray-50: var(--dm-slate-50);
153
+ --dm-gray-100: var(--dm-slate-100);
154
+ --dm-gray-200: var(--dm-slate-200);
155
+ --dm-gray-300: var(--dm-slate-300);
156
+ --dm-gray-400: var(--dm-slate-400);
157
+ --dm-gray-500: var(--dm-slate-500);
158
+ --dm-gray-600: var(--dm-slate-600);
159
+ --dm-gray-700: var(--dm-slate-700);
160
+ --dm-gray-800: var(--dm-slate-800);
161
+ --dm-gray-900: var(--dm-slate-900);
162
+ --dm-gray-950: var(--dm-slate-950);
163
+
164
+ /* Component-specific variables */
165
+ --dm-input-bg: var(--dm-surface);
166
+ --dm-input-border: var(--dm-border-dark);
167
+ --dm-input-text: var(--dm-text);
168
+ --dm-input-placeholder: var(--dm-text-muted);
169
+ --dm-input-focus-border: var(--dm-primary);
170
+ --dm-input-disabled-bg: var(--dm-slate-800);
171
+
172
+ --dm-table-border: var(--dm-border);
173
+ --dm-table-hover-bg: var(--dm-hover-bg);
174
+ --dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
175
+
176
+ --dm-navbar-bg: var(--dm-surface);
177
+ --dm-navbar-text: var(--dm-text);
178
+ --dm-navbar-border: var(--dm-border);
179
+
180
+ --dm-dropdown-bg: var(--dm-surface-raised);
181
+ --dm-dropdown-border: var(--dm-border);
182
+ --dm-dropdown-item-hover: var(--dm-hover-bg);
183
+ --dm-dropdown-item-active: var(--dm-selected-bg);
184
+
185
+ --dm-sidebar-bg: var(--dm-surface);
186
+ --dm-sidebar-border: var(--dm-border);
187
+ --dm-sidebar-item-hover: var(--dm-hover-bg);
188
+ --dm-sidebar-item-active: var(--dm-selected-bg);
189
+
190
+ --dm-autocomplete-bg: var(--dm-surface);
191
+ --dm-autocomplete-border: var(--dm-border);
192
+ --dm-autocomplete-shadow: var(--dm-shadow-md);
193
+ --dm-autocomplete-item-hover: var(--dm-hover-bg);
194
+ --dm-autocomplete-item-active: var(--dm-selected-bg);
195
+ --dm-autocomplete-highlight: var(--dm-primary-light);
196
+
197
+ --dm-pillbox-bg: var(--dm-surface);
198
+ --dm-pillbox-border: var(--dm-border);
199
+ --dm-pill-bg: var(--dm-gray-700); /* Darker pill background for dark theme */
200
+ --dm-pill-color: var(--dm-text);
201
+ --dm-pill-hover-bg: var(--dm-gray-600);
202
+
203
+ --dm-tab-border: var(--dm-border);
204
+ --dm-tab-hover-bg: var(--dm-hover-bg);
205
+ --dm-tab-active-border: var(--dm-primary);
206
+ --dm-tab-active-text: var(--dm-primary);
207
+
208
+ --dm-accordion-border: var(--dm-border);
209
+ --dm-accordion-header-hover: var(--dm-hover-bg);
210
+ }
211
+
212
+ /* Syntax highlighting tokens for grayve (assuming similar to dark theme) */
213
+ .dm-theme-grayve .code-block .syntax-keyword {
214
+ color: #c792ea; /* Purple */
215
+ font-weight: 500;
216
+ }
217
+
218
+ .dm-theme-grayve .code-block .syntax-string,
219
+ .dm-theme-grayve .code-block .syntax-template-string {
220
+ color: #c3e88d; /* Green */
221
+ }
222
+
223
+ .dm-theme-grayve .code-block .syntax-function {
224
+ color: #82aaff; /* Light Blue */
225
+ }
226
+
8
227
  /* ============================================
9
228
  DOMMA BASE CSS
10
229
  Base styles, typography, utilities
11
230
  ============================================ */
12
231
 
13
232
  /*!
14
- * Domma Core CSS v0.3.0-alpha.0
233
+ * Domma Core CSS v0.5.0-alpha
15
234
  * Dynamic Object Manipulation & Modeling API
16
235
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-01-02T14:32:25.385Z
18
- * Commit: bc8e519
236
+ * Built: 2026-01-08T09:15:50.022Z
237
+ * Commit: ad86642
19
238
  */
20
239
 
21
240
  /**
@@ -277,6 +496,44 @@
277
496
  --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
278
497
  --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
279
498
 
499
+ /* Glow effects - STRONG AND VIBRANT */
500
+ --dm-glow-sm: 0 0 15px rgba(59, 130, 246, 0.8),
501
+ 0 0 30px rgba(59, 130, 246, 0.6);
502
+ --dm-glow: 0 0 20px rgba(59, 130, 246, 0.9),
503
+ 0 0 40px rgba(59, 130, 246, 0.7),
504
+ 0 0 60px rgba(59, 130, 246, 0.5);
505
+ --dm-glow-md: 0 0 25px rgba(59, 130, 246, 1),
506
+ 0 0 50px rgba(59, 130, 246, 0.8),
507
+ 0 0 75px rgba(59, 130, 246, 0.6);
508
+ --dm-glow-lg: 0 0 30px rgba(59, 130, 246, 1),
509
+ 0 0 60px rgba(59, 130, 246, 0.9),
510
+ 0 0 90px rgba(59, 130, 246, 0.7),
511
+ 0 0 120px rgba(59, 130, 246, 0.5);
512
+ --dm-glow-xl: 0 0 40px rgba(59, 130, 246, 1),
513
+ 0 0 80px rgba(59, 130, 246, 0.9),
514
+ 0 0 120px rgba(59, 130, 246, 0.7),
515
+ 0 0 160px rgba(59, 130, 246, 0.5);
516
+
517
+ /* Colour-specific glows - INTENSE */
518
+ --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 1),
519
+ 0 0 40px rgba(59, 130, 246, 0.8),
520
+ 0 0 60px rgba(59, 130, 246, 0.6);
521
+ --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 1),
522
+ 0 0 40px rgba(139, 92, 246, 0.8),
523
+ 0 0 60px rgba(139, 92, 246, 0.6);
524
+ --dm-glow-success: 0 0 20px rgba(34, 197, 94, 1),
525
+ 0 0 40px rgba(34, 197, 94, 0.8),
526
+ 0 0 60px rgba(34, 197, 94, 0.6);
527
+ --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 1),
528
+ 0 0 40px rgba(245, 158, 11, 0.8),
529
+ 0 0 60px rgba(245, 158, 11, 0.6);
530
+ --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 1),
531
+ 0 0 40px rgba(239, 68, 68, 0.8),
532
+ 0 0 60px rgba(239, 68, 68, 0.6);
533
+ --dm-glow-info: 0 0 20px rgba(14, 165, 233, 1),
534
+ 0 0 40px rgba(14, 165, 233, 0.8),
535
+ 0 0 60px rgba(14, 165, 233, 0.6);
536
+
280
537
  /* ================================================
281
538
  TRANSPARENCY & OPACITY
282
539
  ================================================ */
@@ -1488,6 +1745,505 @@ code, pre {
1488
1745
  transition: text-shadow 0.3s ease;
1489
1746
  }
1490
1747
 
1748
+ .glow-secondary-hover:hover {
1749
+ text-shadow: var(--dm-glow-secondary);
1750
+ transition: text-shadow 0.3s ease;
1751
+ }
1752
+
1753
+ .glow-info-hover:hover {
1754
+ text-shadow: var(--dm-glow-info);
1755
+ transition: text-shadow 0.3s ease;
1756
+ }
1757
+
1758
+ /* ============================================
1759
+ FIREWORKS EFFECTS
1760
+ Realistic particle-based fireworks animations
1761
+ ============================================ */
1762
+
1763
+ /* Firework CSS Variables */
1764
+ :root {
1765
+ --dm-fw-launch-height: 200px;
1766
+ --dm-fw-explosion-size: 150px;
1767
+ --dm-fw-particle-size: 2px;
1768
+ --dm-fw-duration: 3s;
1769
+ --dm-fw-delay: 0s;
1770
+
1771
+ /* Default firework colours - bright, vibrant colours */
1772
+ --dm-fw-color-1: #ffeb3b; /* Bright Yellow */
1773
+ --dm-fw-color-2: #ff4444; /* Bright Red */
1774
+ --dm-fw-color-3: #44ffdd; /* Cyan */
1775
+ --dm-fw-color-4: #4488ff; /* Bright Blue */
1776
+ --dm-fw-color-5: #ff8844; /* Orange */
1777
+ --dm-fw-color-6: #ff44ff; /* Magenta */
1778
+ --dm-fw-color-7: #44ff88; /* Lime */
1779
+ --dm-fw-color-8: #ffff88; /* Light Yellow */
1780
+ }
1781
+
1782
+ /* Base firework container */
1783
+ .firework {
1784
+ position: relative;
1785
+ display: inline-block;
1786
+ pointer-events: none;
1787
+ width: var(--dm-fw-explosion-size);
1788
+ height: calc(var(--dm-fw-launch-height) + var(--dm-fw-explosion-size));
1789
+ overflow: visible;
1790
+ }
1791
+
1792
+ /* Rocket trail that launches upward */
1793
+ .firework-launch {
1794
+ position: absolute;
1795
+ bottom: 0;
1796
+ left: 50%;
1797
+ width: 3px;
1798
+ height: 8px;
1799
+ background: linear-gradient(to top, transparent, #ffa500, #fff);
1800
+ transform: translateX(-50%);
1801
+ animation: dm-fw-launch 1s ease-out forwards;
1802
+ }
1803
+
1804
+ .firework-launch::after {
1805
+ content: '';
1806
+ position: absolute;
1807
+ bottom: -10px;
1808
+ left: 50%;
1809
+ width: 2px;
1810
+ height: 20px;
1811
+ background: linear-gradient(to top, transparent, rgba(255, 165, 0, 0.3));
1812
+ transform: translateX(-50%);
1813
+ filter: blur(2px);
1814
+ }
1815
+
1816
+ /* Explosion particles */
1817
+ .firework-particles {
1818
+ position: absolute;
1819
+ top: 0;
1820
+ left: 50%;
1821
+ width: var(--dm-fw-explosion-size);
1822
+ height: var(--dm-fw-explosion-size);
1823
+ transform: translateX(-50%);
1824
+ opacity: 0;
1825
+ animation-delay: 1s; /* Wait for launch */
1826
+ }
1827
+
1828
+ /* Main burst - creates many particles using box-shadow */
1829
+ .firework-burst .firework-particles::before {
1830
+ content: '';
1831
+ position: absolute;
1832
+ top: 50%;
1833
+ left: 50%;
1834
+ width: var(--dm-fw-particle-size);
1835
+ height: var(--dm-fw-particle-size);
1836
+ background: var(--dm-fw-color-1);
1837
+ border-radius: 50%;
1838
+ transform: translate(-50%, -50%);
1839
+ animation: dm-fw-explode 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1840
+ box-shadow: /* Ring 1 - 8 particles at 30° intervals */ 0 0 3px var(--dm-fw-color-1),
1841
+ 0 -20px 0 0 var(--dm-fw-color-1),
1842
+ 14px -14px 0 0 var(--dm-fw-color-2),
1843
+ 20px 0 0 0 var(--dm-fw-color-3),
1844
+ 14px 14px 0 0 var(--dm-fw-color-4),
1845
+ 0 20px 0 0 var(--dm-fw-color-5),
1846
+ -14px 14px 0 0 var(--dm-fw-color-6),
1847
+ -20px 0 0 0 var(--dm-fw-color-7),
1848
+ -14px -14px 0 0 var(--dm-fw-color-8),
1849
+ /* Ring 2 - 12 particles */ 0 -35px 0 0 var(--dm-fw-color-2),
1850
+ 17px -30px 0 0 var(--dm-fw-color-3),
1851
+ 30px -17px 0 0 var(--dm-fw-color-4),
1852
+ 35px 0 0 0 var(--dm-fw-color-5),
1853
+ 30px 17px 0 0 var(--dm-fw-color-6),
1854
+ 17px 30px 0 0 var(--dm-fw-color-7),
1855
+ 0 35px 0 0 var(--dm-fw-color-8),
1856
+ -17px 30px 0 0 var(--dm-fw-color-1),
1857
+ -30px 17px 0 0 var(--dm-fw-color-2),
1858
+ -35px 0 0 0 var(--dm-fw-color-3),
1859
+ -30px -17px 0 0 var(--dm-fw-color-4),
1860
+ -17px -30px 0 0 var(--dm-fw-color-5),
1861
+ /* Ring 3 - 16 particles */ 0 -50px 0 0 var(--dm-fw-color-6),
1862
+ 19px -46px 0 0 var(--dm-fw-color-7),
1863
+ 35px -35px 0 0 var(--dm-fw-color-8),
1864
+ 46px -19px 0 0 var(--dm-fw-color-1),
1865
+ 50px 0 0 0 var(--dm-fw-color-2),
1866
+ 46px 19px 0 0 var(--dm-fw-color-3),
1867
+ 35px 35px 0 0 var(--dm-fw-color-4),
1868
+ 19px 46px 0 0 var(--dm-fw-color-5),
1869
+ 0 50px 0 0 var(--dm-fw-color-6),
1870
+ -19px 46px 0 0 var(--dm-fw-color-7),
1871
+ -35px 35px 0 0 var(--dm-fw-color-8),
1872
+ -46px 19px 0 0 var(--dm-fw-color-1),
1873
+ -50px 0 0 0 var(--dm-fw-color-2),
1874
+ -46px -19px 0 0 var(--dm-fw-color-3),
1875
+ -35px -35px 0 0 var(--dm-fw-color-4),
1876
+ -19px -46px 0 0 var(--dm-fw-color-5);
1877
+ }
1878
+
1879
+ /* Secondary layer for more particles and trailing effect */
1880
+ .firework-burst .firework-particles::after {
1881
+ content: '';
1882
+ position: absolute;
1883
+ top: 50%;
1884
+ left: 50%;
1885
+ width: calc(var(--dm-fw-particle-size) * 0.8);
1886
+ height: calc(var(--dm-fw-particle-size) * 0.8);
1887
+ background: var(--dm-fw-color-3);
1888
+ border-radius: 50%;
1889
+ transform: translate(-50%, -50%);
1890
+ animation: dm-fw-explode-secondary 2.2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1891
+ box-shadow: /* Offset particles for depth */ 0 0 2px var(--dm-fw-color-3),
1892
+ 10px -25px 0 0 var(--dm-fw-color-4),
1893
+ 25px -10px 0 0 var(--dm-fw-color-5),
1894
+ 25px 10px 0 0 var(--dm-fw-color-6),
1895
+ 10px 25px 0 0 var(--dm-fw-color-7),
1896
+ -10px 25px 0 0 var(--dm-fw-color-8),
1897
+ -25px 10px 0 0 var(--dm-fw-color-1),
1898
+ -25px -10px 0 0 var(--dm-fw-color-2),
1899
+ -10px -25px 0 0 var(--dm-fw-color-3),
1900
+ /* Extra sparkles */ 8px -42px 0 0 var(--dm-fw-color-4),
1901
+ 42px -8px 0 0 var(--dm-fw-color-5),
1902
+ 42px 8px 0 0 var(--dm-fw-color-6),
1903
+ 8px 42px 0 0 var(--dm-fw-color-7),
1904
+ -8px 42px 0 0 var(--dm-fw-color-8),
1905
+ -42px 8px 0 0 var(--dm-fw-color-1),
1906
+ -42px -8px 0 0 var(--dm-fw-color-2),
1907
+ -8px -42px 0 0 var(--dm-fw-color-3);
1908
+ }
1909
+
1910
+ /* Sparkle animation - twinkling particles */
1911
+ .firework-sparkle::before {
1912
+ width: 2px;
1913
+ height: 2px;
1914
+ background: white;
1915
+ box-shadow: /* Create sparkle pattern */ 0 0 3px 1px rgba(255, 255, 255, 0.8),
1916
+ 10px -10px 0 0 var(--dm-fw-color-1),
1917
+ 10px -10px 3px 1px var(--dm-fw-color-1),
1918
+ -10px -10px 0 0 var(--dm-fw-color-2),
1919
+ -10px -10px 3px 1px var(--dm-fw-color-2),
1920
+ -10px 10px 0 0 var(--dm-fw-color-3),
1921
+ -10px 10px 3px 1px var(--dm-fw-color-3),
1922
+ 10px 10px 0 0 var(--dm-fw-color-4),
1923
+ 10px 10px 3px 1px var(--dm-fw-color-4),
1924
+ 20px 0 0 0 var(--dm-fw-color-5),
1925
+ 20px 0 3px 1px var(--dm-fw-color-5),
1926
+ -20px 0 0 0 var(--dm-fw-color-6),
1927
+ -20px 0 3px 1px var(--dm-fw-color-6),
1928
+ 0 20px 0 0 var(--dm-fw-color-7),
1929
+ 0 20px 3px 1px var(--dm-fw-color-7),
1930
+ 0 -20px 0 0 var(--dm-fw-color-8),
1931
+ 0 -20px 3px 1px var(--dm-fw-color-8);
1932
+ animation: dm-firework-sparkle var(--dm-fw-duration) ease-out forwards;
1933
+ animation-delay: var(--dm-fw-delay);
1934
+ opacity: 0;
1935
+ }
1936
+
1937
+ .firework-sparkle::after {
1938
+ width: 2px;
1939
+ height: 2px;
1940
+ background: white;
1941
+ box-shadow: /* Secondary sparkle layer */ 15px -15px 0 0 var(--dm-fw-color-1),
1942
+ 15px -15px 4px 2px rgba(255, 235, 59, 0.5),
1943
+ -15px -15px 0 0 var(--dm-fw-color-3),
1944
+ -15px -15px 4px 2px rgba(78, 205, 196, 0.5),
1945
+ -15px 15px 0 0 var(--dm-fw-color-5),
1946
+ -15px 15px 4px 2px rgba(243, 156, 18, 0.5),
1947
+ 15px 15px 0 0 var(--dm-fw-color-7),
1948
+ 15px 15px 4px 2px rgba(253, 121, 168, 0.5);
1949
+ animation: dm-firework-sparkle-alt var(--dm-fw-duration) ease-out forwards;
1950
+ animation-delay: calc(var(--dm-fw-delay) + 0.2s);
1951
+ opacity: 0;
1952
+ }
1953
+
1954
+ /* Trail animation - launch and falling particles */
1955
+ .firework-trail::before {
1956
+ width: 3px;
1957
+ height: 3px;
1958
+ background: var(--dm-fw-color-1);
1959
+ box-shadow: 0 0 10px 2px var(--dm-fw-color-1),
1960
+ 0 5px 2px 0 rgba(255, 235, 59, 0.8),
1961
+ 0 10px 2px 0 rgba(255, 235, 59, 0.6),
1962
+ 0 15px 2px 0 rgba(255, 235, 59, 0.4),
1963
+ 0 20px 2px 0 rgba(255, 235, 59, 0.2);
1964
+ animation: dm-firework-launch var(--dm-fw-duration) ease-out forwards;
1965
+ animation-delay: var(--dm-fw-delay);
1966
+ }
1967
+
1968
+ /* Size variants */
1969
+ .firework-sm::before,
1970
+ .firework-sm::after {
1971
+ width: var(--dm-fw-size-sm);
1972
+ height: var(--dm-fw-size-sm);
1973
+ }
1974
+
1975
+ .firework-md::before,
1976
+ .firework-md::after {
1977
+ width: var(--dm-fw-size-md);
1978
+ height: var(--dm-fw-size-md);
1979
+ }
1980
+
1981
+ .firework-lg::before,
1982
+ .firework-lg::after {
1983
+ width: var(--dm-fw-size-lg);
1984
+ height: var(--dm-fw-size-lg);
1985
+ }
1986
+
1987
+ .firework-xl::before,
1988
+ .firework-xl::after {
1989
+ width: var(--dm-fw-size-xl);
1990
+ height: var(--dm-fw-size-xl);
1991
+ }
1992
+
1993
+ /* Colour variants */
1994
+ .firework-primary {
1995
+ --dm-fw-color-1: var(--dm-primary);
1996
+ --dm-fw-color-2: var(--dm-primary-light);
1997
+ --dm-fw-color-3: var(--dm-primary-dark);
1998
+ --dm-fw-color-4: var(--dm-primary);
1999
+ --dm-fw-color-5: var(--dm-primary);
2000
+ --dm-fw-color-6: var(--dm-primary-light);
2001
+ --dm-fw-color-7: var(--dm-primary-dark);
2002
+ --dm-fw-color-8: var(--dm-primary);
2003
+ }
2004
+
2005
+ .firework-secondary {
2006
+ --dm-fw-color-1: var(--dm-secondary);
2007
+ --dm-fw-color-2: var(--dm-secondary-light);
2008
+ --dm-fw-color-3: var(--dm-secondary-dark);
2009
+ --dm-fw-color-4: var(--dm-secondary);
2010
+ --dm-fw-color-5: var(--dm-secondary);
2011
+ --dm-fw-color-6: var(--dm-secondary-light);
2012
+ --dm-fw-color-7: var(--dm-secondary-dark);
2013
+ --dm-fw-color-8: var(--dm-secondary);
2014
+ }
2015
+
2016
+ .firework-success {
2017
+ --dm-fw-color-1: var(--dm-success);
2018
+ --dm-fw-color-2: var(--dm-success-light);
2019
+ --dm-fw-color-3: var(--dm-success-dark);
2020
+ --dm-fw-color-4: var(--dm-success);
2021
+ --dm-fw-color-5: var(--dm-success);
2022
+ --dm-fw-color-6: var(--dm-success-light);
2023
+ --dm-fw-color-7: var(--dm-success-dark);
2024
+ --dm-fw-color-8: var(--dm-success);
2025
+ }
2026
+
2027
+ .firework-warning {
2028
+ --dm-fw-color-1: var(--dm-warning);
2029
+ --dm-fw-color-2: var(--dm-warning-light);
2030
+ --dm-fw-color-3: var(--dm-warning-dark);
2031
+ --dm-fw-color-4: var(--dm-warning);
2032
+ --dm-fw-color-5: var(--dm-warning);
2033
+ --dm-fw-color-6: var(--dm-warning-light);
2034
+ --dm-fw-color-7: var(--dm-warning-dark);
2035
+ --dm-fw-color-8: var(--dm-warning);
2036
+ }
2037
+
2038
+ .firework-danger {
2039
+ --dm-fw-color-1: var(--dm-danger);
2040
+ --dm-fw-color-2: var(--dm-danger-light);
2041
+ --dm-fw-color-3: var(--dm-danger-dark);
2042
+ --dm-fw-color-4: var(--dm-danger);
2043
+ --dm-fw-color-5: var(--dm-danger);
2044
+ --dm-fw-color-6: var(--dm-danger-light);
2045
+ --dm-fw-color-7: var(--dm-danger-dark);
2046
+ --dm-fw-color-8: var(--dm-danger);
2047
+ }
2048
+
2049
+ .firework-info {
2050
+ --dm-fw-color-1: var(--dm-info);
2051
+ --dm-fw-color-2: var(--dm-info-light);
2052
+ --dm-fw-color-3: var(--dm-info-dark);
2053
+ --dm-fw-color-4: var(--dm-info);
2054
+ --dm-fw-color-5: var(--dm-info);
2055
+ --dm-fw-color-6: var(--dm-info-light);
2056
+ --dm-fw-color-7: var(--dm-info-dark);
2057
+ --dm-fw-color-8: var(--dm-info);
2058
+ }
2059
+
2060
+ .firework-rainbow {
2061
+ --dm-fw-color-1: #ff0000;
2062
+ --dm-fw-color-2: #ff7f00;
2063
+ --dm-fw-color-3: #ffff00;
2064
+ --dm-fw-color-4: #00ff00;
2065
+ --dm-fw-color-5: #0000ff;
2066
+ --dm-fw-color-6: #4b0082;
2067
+ --dm-fw-color-7: #9400d3;
2068
+ --dm-fw-color-8: #ff1493;
2069
+ }
2070
+
2071
+ /* Continuous animation */
2072
+ .firework-continuous::before,
2073
+ .firework-continuous::after {
2074
+ animation-iteration-count: infinite;
2075
+ }
2076
+
2077
+ /* Trigger on hover */
2078
+ .firework-on-hover {
2079
+ position: relative;
2080
+ }
2081
+
2082
+ .firework-on-hover::before,
2083
+ .firework-on-hover::after {
2084
+ content: '';
2085
+ position: absolute;
2086
+ top: 50%;
2087
+ left: 50%;
2088
+ width: var(--dm-fw-size);
2089
+ height: var(--dm-fw-size);
2090
+ transform: translate(-50%, -50%);
2091
+ opacity: 0;
2092
+ pointer-events: none;
2093
+ }
2094
+
2095
+ .firework-on-hover:hover::before {
2096
+ background: var(--dm-fw-color-1);
2097
+ box-shadow: /* Inner ring - 8 particles */ 0 -30px 0 1px var(--dm-fw-color-1),
2098
+ 21px -21px 0 1px var(--dm-fw-color-2),
2099
+ 30px 0 0 1px var(--dm-fw-color-3),
2100
+ 21px 21px 0 1px var(--dm-fw-color-4),
2101
+ 0 30px 0 1px var(--dm-fw-color-5),
2102
+ -21px 21px 0 1px var(--dm-fw-color-6),
2103
+ -30px 0 0 1px var(--dm-fw-color-7),
2104
+ -21px -21px 0 1px var(--dm-fw-color-8),
2105
+ /* Outer ring */ 0 -50px 0 0 var(--dm-fw-color-2),
2106
+ 35px -35px 0 0 var(--dm-fw-color-3),
2107
+ 50px 0 0 0 var(--dm-fw-color-4),
2108
+ 35px 35px 0 0 var(--dm-fw-color-5),
2109
+ 0 50px 0 0 var(--dm-fw-color-6),
2110
+ -35px 35px 0 0 var(--dm-fw-color-7),
2111
+ -50px 0 0 0 var(--dm-fw-color-8),
2112
+ -35px -35px 0 0 var(--dm-fw-color-1);
2113
+ animation: dm-firework-burst 1.5s ease-out forwards;
2114
+ }
2115
+
2116
+ .firework-on-hover:hover::after {
2117
+ background: var(--dm-fw-color-3);
2118
+ box-shadow: 15px -40px 0 0 var(--dm-fw-color-1),
2119
+ 40px -15px 0 0 var(--dm-fw-color-3),
2120
+ 40px 15px 0 0 var(--dm-fw-color-5),
2121
+ 15px 40px 0 0 var(--dm-fw-color-7),
2122
+ -15px 40px 0 0 var(--dm-fw-color-2),
2123
+ -40px 15px 0 0 var(--dm-fw-color-4),
2124
+ -40px -15px 0 0 var(--dm-fw-color-6),
2125
+ -15px -40px 0 0 var(--dm-fw-color-8);
2126
+ animation: dm-firework-burst-secondary 1.5s ease-out forwards;
2127
+ }
2128
+
2129
+ /* Keyframe Animations */
2130
+
2131
+ /* Launch animation - rocket goes up */
2132
+ @keyframes dm-fw-launch {
2133
+ 0% {
2134
+ transform: translateX(-50%) translateY(0);
2135
+ opacity: 1;
2136
+ }
2137
+ 100% {
2138
+ transform: translateX(-50%) translateY(calc(-1 * var(--dm-fw-launch-height)));
2139
+ opacity: 0;
2140
+ }
2141
+ }
2142
+
2143
+ /* Main explosion - particles burst outward then fall with gravity */
2144
+ @keyframes dm-fw-explode {
2145
+ 0% {
2146
+ transform: translate(-50%, -50%) scale(0);
2147
+ opacity: 0;
2148
+ }
2149
+ 5% {
2150
+ transform: translate(-50%, -50%) scale(0.1);
2151
+ opacity: 1;
2152
+ }
2153
+ 25% {
2154
+ transform: translate(-50%, -50%) scale(2.5);
2155
+ opacity: 1;
2156
+ }
2157
+ 50% {
2158
+ transform: translate(-50%, -50%) scale(3.5) translateY(10px);
2159
+ opacity: 0.9;
2160
+ }
2161
+ 75% {
2162
+ transform: translate(-50%, -50%) scale(4) translateY(40px);
2163
+ opacity: 0.6;
2164
+ }
2165
+ 100% {
2166
+ transform: translate(-50%, -50%) scale(4.5) translateY(100px);
2167
+ opacity: 0;
2168
+ }
2169
+ }
2170
+
2171
+ /* Secondary explosion with slight delay and rotation */
2172
+ @keyframes dm-fw-explode-secondary {
2173
+ 0% {
2174
+ transform: translate(-50%, -50%) scale(0) rotate(0deg);
2175
+ opacity: 0;
2176
+ }
2177
+ 10% {
2178
+ transform: translate(-50%, -50%) scale(0.2) rotate(45deg);
2179
+ opacity: 1;
2180
+ }
2181
+ 30% {
2182
+ transform: translate(-50%, -50%) scale(2.2) rotate(90deg);
2183
+ opacity: 1;
2184
+ }
2185
+ 55% {
2186
+ transform: translate(-50%, -50%) scale(3.2) rotate(135deg) translateY(15px);
2187
+ opacity: 0.8;
2188
+ }
2189
+ 80% {
2190
+ transform: translate(-50%, -50%) scale(3.8) rotate(180deg) translateY(50px);
2191
+ opacity: 0.5;
2192
+ }
2193
+ 100% {
2194
+ transform: translate(-50%, -50%) scale(4.2) rotate(225deg) translateY(120px);
2195
+ opacity: 0;
2196
+ }
2197
+ }
2198
+
2199
+ /* Sparkle animation for twinkling effect */
2200
+ @keyframes dm-fw-sparkle {
2201
+ 0%, 100% {
2202
+ transform: translate(-50%, -50%) scale(1);
2203
+ opacity: 0;
2204
+ }
2205
+ 10% {
2206
+ transform: translate(-50%, -50%) scale(0.5);
2207
+ opacity: 1;
2208
+ }
2209
+ 50% {
2210
+ transform: translate(-50%, -50%) scale(1.5);
2211
+ opacity: 1;
2212
+ }
2213
+ 90% {
2214
+ transform: translate(-50%, -50%) scale(2) translateY(30px);
2215
+ opacity: 0;
2216
+ }
2217
+ }
2218
+
2219
+ /* Crackle effect - small rapid sparkles */
2220
+ @keyframes dm-fw-crackle {
2221
+ 0%, 100% {
2222
+ opacity: 0;
2223
+ }
2224
+ 25%, 75% {
2225
+ opacity: 1;
2226
+ }
2227
+ 50% {
2228
+ opacity: 0.5;
2229
+ }
2230
+ }
2231
+
2232
+ /* Multiple fireworks container */
2233
+ .fireworks-container {
2234
+ position: fixed;
2235
+ top: 0;
2236
+ left: 0;
2237
+ width: 100%;
2238
+ height: 100%;
2239
+ pointer-events: none;
2240
+ z-index: 9999;
2241
+ }
2242
+
2243
+ .fireworks-container .firework {
2244
+ position: absolute;
2245
+ }
2246
+
1491
2247
  /* ============================================
1492
2248
  SIZE UTILITIES
1493
2249
  ============================================ */
@@ -1827,9 +2583,46 @@ code, pre {
1827
2583
  color: var(--dm-warning);
1828
2584
  }
1829
2585
 
1830
- /* Input Sizes */
1831
- .form-input-sm,
1832
- .form-select-sm,
2586
+ /* Validation State Container Classes */
2587
+ .has-success .form-input,
2588
+ .has-success .form-select,
2589
+ .has-success .form-textarea {
2590
+ border-color: var(--dm-success);
2591
+ }
2592
+
2593
+ .has-success .form-input:focus,
2594
+ .has-success .form-select:focus,
2595
+ .has-success .form-textarea:focus {
2596
+ box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.2);
2597
+ }
2598
+
2599
+ .has-error .form-input,
2600
+ .has-error .form-select,
2601
+ .has-error .form-textarea {
2602
+ border-color: var(--dm-danger);
2603
+ }
2604
+
2605
+ .has-error .form-input:focus,
2606
+ .has-error .form-select:focus,
2607
+ .has-error .form-textarea:focus {
2608
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2);
2609
+ }
2610
+
2611
+ .has-warning .form-input,
2612
+ .has-warning .form-select,
2613
+ .has-warning .form-textarea {
2614
+ border-color: var(--dm-warning);
2615
+ }
2616
+
2617
+ .has-warning .form-input:focus,
2618
+ .has-warning .form-select:focus,
2619
+ .has-warning .form-textarea:focus {
2620
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2);
2621
+ }
2622
+
2623
+ /* Input Sizes */
2624
+ .form-input-sm,
2625
+ .form-select-sm,
1833
2626
  .form-textarea-sm {
1834
2627
  padding: var(--dm-space-1) var(--dm-space-2);
1835
2628
  font-size: var(--dm-font-size-sm);
@@ -2199,232 +2992,1240 @@ code, pre {
2199
2992
  -moz-appearance: textfield;
2200
2993
  }
2201
2994
 
2202
- .form-input[type="number"]::-webkit-inner-spin-button,
2203
- .form-input[type="number"]::-webkit-outer-spin-button {
2204
- opacity: 1;
2205
- cursor: pointer;
2995
+ .form-input[type="number"]::-webkit-inner-spin-button,
2996
+ .form-input[type="number"]::-webkit-outer-spin-button {
2997
+ opacity: 1;
2998
+ cursor: pointer;
2999
+ }
3000
+
3001
+ /* Form Sections */
3002
+ .domma-form-section {
3003
+ border: 1px solid var(--dm-border, var(--dm-gray-200));
3004
+ border-radius: var(--dm-radius-lg);
3005
+ padding: var(--dm-space-6);
3006
+ margin-bottom: var(--dm-space-6);
3007
+ background-color: var(--dm-surface, var(--dm-white));
3008
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
3009
+ transition: box-shadow 0.15s ease;
3010
+ }
3011
+
3012
+ .domma-form-section:hover {
3013
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
3014
+ }
3015
+
3016
+ .domma-form-section-title {
3017
+ font-size: var(--dm-font-size-lg);
3018
+ font-weight: var(--dm-font-weight-semibold);
3019
+ color: var(--dm-primary);
3020
+ margin: 0 0 var(--dm-space-4) 0;
3021
+ padding: 0 var(--dm-space-4);
3022
+ border-bottom: 2px solid var(--dm-primary);
3023
+ display: inline-block;
3024
+ background-color: var(--dm-surface, var(--dm-white));
3025
+ position: relative;
3026
+ top: calc(-1 * var(--dm-space-6) - 1px);
3027
+ left: 0;
3028
+ border-radius: var(--dm-radius-md) var(--dm-radius-md) 0 0;
3029
+ }
3030
+
3031
+ .domma-form-section-content {
3032
+ margin-top: calc(-1 * var(--dm-space-2));
3033
+ }
3034
+
3035
+ /* Dark theme adjustments */
3036
+ .dm-theme-dark .domma-form-section {
3037
+ background-color: var(--dm-gray-800);
3038
+ border-color: var(--dm-gray-700);
3039
+ }
3040
+
3041
+ .dm-theme-dark .domma-form-section-title {
3042
+ background-color: var(--dm-gray-800);
3043
+ color: var(--dm-primary-light, var(--dm-blue-400));
3044
+ border-color: var(--dm-primary-light, var(--dm-blue-400));
3045
+ }
3046
+
3047
+ /* Compact form sections */
3048
+ .domma-form-section.compact {
3049
+ padding: var(--dm-space-4);
3050
+ margin-bottom: var(--dm-space-4);
3051
+ }
3052
+
3053
+ .domma-form-section.compact .domma-form-section-title {
3054
+ font-size: var(--dm-font-size-base);
3055
+ top: calc(-1 * var(--dm-space-4) - 1px);
3056
+ }
3057
+
3058
+ /* ============================================
3059
+ COMPONENT: Badge
3060
+ ============================================ */
3061
+
3062
+ /* ============================================
3063
+ COMPONENT: Pill
3064
+ ============================================ */
3065
+
3066
+ /* ============================================
3067
+ COMPONENT: Alert
3068
+ ============================================ */
3069
+
3070
+ /* ============================================
3071
+ SYNTAX HIGHLIGHTING TOKENS
3072
+ ============================================ */
3073
+
3074
+ /* Dark theme (default) - Material Palenight inspired */
3075
+ .code-block .syntax-keyword {
3076
+ color: #c792ea;
3077
+ font-weight: 500;
3078
+ }
3079
+
3080
+ .code-block .syntax-string,
3081
+ .code-block .syntax-template-string {
3082
+ color: #c3e88d;
3083
+ }
3084
+
3085
+ .code-block .syntax-function {
3086
+ color: #82aaff;
3087
+ }
3088
+
3089
+ /**
3090
+ * Domma Dark Theme - Tailwind Version
3091
+ * Dark color scheme with a Tailwind CSS 'slate' palette.
3092
+ */
3093
+
3094
+ .dm-theme-dark {
3095
+ color-scheme: dark;
3096
+
3097
+ /* ================================================
3098
+ SEMANTIC COLORS (Dark Theme Overrides)
3099
+ ================================================ */
3100
+
3101
+ /* Backgrounds */
3102
+ --dm-background: var(--dm-slate-900);
3103
+ --dm-background-alt: var(--dm-slate-800);
3104
+ --dm-surface: var(--dm-slate-800);
3105
+ --dm-surface-raised: var(--dm-slate-700);
3106
+ --dm-surface-overlay: var(--dm-slate-700);
3107
+
3108
+ /* Text */
3109
+ --dm-text: var(--dm-slate-200);
3110
+ --dm-text-secondary: var(--dm-slate-400);
3111
+ --dm-text-muted: var(--dm-slate-500);
3112
+ --dm-text-disabled: var(--dm-slate-600);
3113
+ --dm-text-inverse: var(--dm-slate-900);
3114
+
3115
+ /* Borders */
3116
+ --dm-border: var(--dm-slate-700);
3117
+ --dm-border-light: var(--dm-slate-800);
3118
+ --dm-border-dark: var(--dm-slate-600);
3119
+ --dm-border-focus: var(--dm-blue-500);
3120
+ --dm-focus-ring: rgba(96, 165, 250, 0.3); /* blue-400 at 30% */
3121
+ --dm-focus-ring-danger: rgba(248, 113, 113, 0.3); /* red-400 at 30% */
3122
+
3123
+ /* ================================================
3124
+ BRAND COLORS (Lightened for dark mode)
3125
+ ================================================ */
3126
+ --dm-primary: var(--dm-blue-500);
3127
+ --dm-primary-hover: var(--dm-blue-400);
3128
+ --dm-primary-active: var(--dm-blue-300);
3129
+ --dm-primary-light: rgba(96, 165, 250, 0.15); /* blue-400 */
3130
+ --dm-primary-dark: var(--dm-blue-600);
3131
+
3132
+ --dm-secondary: var(--dm-slate-400);
3133
+ --dm-secondary-hover: var(--dm-slate-300);
3134
+ --dm-secondary-active: var(--dm-slate-200);
3135
+
3136
+ /* ================================================
3137
+ STATUS COLORS (Adjusted for dark mode)
3138
+ ================================================ */
3139
+ --dm-success: var(--dm-green-500);
3140
+ --dm-success-hover: var(--dm-green-400);
3141
+ --dm-success-active: var(--dm-green-300);
3142
+ --dm-success-light: rgba(74, 222, 128, 0.15); /* green-400 */
3143
+ --dm-success-dark: var(--dm-green-600);
3144
+
3145
+ --dm-danger: var(--dm-red-500);
3146
+ --dm-danger-hover: var(--dm-red-400);
3147
+ --dm-danger-active: var(--dm-red-300);
3148
+ --dm-danger-light: rgba(248, 113, 113, 0.15); /* red-400 */
3149
+ --dm-danger-dark: var(--dm-red-600);
3150
+
3151
+ --dm-warning: var(--dm-amber-400);
3152
+ --dm-warning-hover: var(--dm-amber-300);
3153
+ --dm-warning-active: var(--dm-amber-200);
3154
+ --dm-warning-text: var(--dm-amber-950);
3155
+ --dm-warning-light: rgba(251, 191, 36, 0.15); /* amber-400 */
3156
+ --dm-warning-dark: var(--dm-amber-500);
3157
+
3158
+ --dm-info: var(--dm-sky-400);
3159
+ --dm-info-hover: var(--dm-sky-300);
3160
+ --dm-info-active: var(--dm-sky-200);
3161
+ --dm-info-light: rgba(56, 189, 248, 0.15); /* sky-400 */
3162
+ --dm-info-dark: var(--dm-sky-500);
3163
+
3164
+ /* ================================================
3165
+ BACKGROUND TINTS (Dark theme versions)
3166
+ ================================================ */
3167
+ --dm-primary-bg: rgba(96, 165, 250, 0.15); /* blue-400 */
3168
+ --dm-secondary-bg: rgba(148, 163, 184, 0.15); /* slate-400 */
3169
+ --dm-success-bg: rgba(74, 222, 128, 0.15); /* green-400 */
3170
+ --dm-danger-bg: rgba(248, 113, 113, 0.15); /* red-400 */
3171
+ --dm-warning-bg: rgba(251, 191, 36, 0.15); /* amber-400 */
3172
+ --dm-info-bg: rgba(56, 189, 248, 0.15); /* sky-400 */
3173
+
3174
+ /* ================================================
3175
+ SEMANTIC SURFACE COLORS (Dark theme versions)
3176
+ ================================================ */
3177
+ --dm-surface-secondary: var(--dm-slate-900);
3178
+ --dm-card-bg: var(--dm-slate-800);
3179
+ --dm-card-border: var(--dm-slate-700);
3180
+
3181
+ /* ================================================
3182
+ INTERACTIVE STATES
3183
+ ================================================ */
3184
+ --dm-hover-bg: rgba(255, 255, 255, 0.07);
3185
+ --dm-active-bg: rgba(255, 255, 255, 0.1);
3186
+ --dm-selected-bg: var(--dm-blue-500);
3187
+ --dm-disabled-opacity: 0.4;
3188
+
3189
+ /* ================================================
3190
+ COMPONENT-SPECIFIC
3191
+ ================================================ */
3192
+
3193
+ /* Cards */
3194
+ --dm-card-bg: var(--dm-surface);
3195
+ --dm-card-border: var(--dm-border);
3196
+ --dm-card-shadow: var(--dm-shadow-md);
3197
+
3198
+ /* Inputs */
3199
+ --dm-input-bg: var(--dm-surface);
3200
+ --dm-input-border: var(--dm-border-dark);
3201
+ --dm-input-text: var(--dm-text);
3202
+ --dm-input-placeholder: var(--dm-text-muted);
3203
+ --dm-input-focus-border: var(--dm-primary);
3204
+ --dm-input-disabled-bg: var(--dm-slate-800);
3205
+
3206
+ /* Tables */
3207
+ --dm-table-border: var(--dm-border);
3208
+ --dm-table-hover-bg: var(--dm-hover-bg);
3209
+ --dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
3210
+
3211
+ /* Navbar */
3212
+ --dm-navbar-bg: var(--dm-surface);
3213
+ --dm-navbar-text: var(--dm-text);
3214
+ --dm-navbar-border: var(--dm-border);
3215
+
3216
+ /* Dropdown */
3217
+ --dm-dropdown-bg: var(--dm-surface-raised);
3218
+ --dm-dropdown-border: var(--dm-border);
3219
+ --dm-dropdown-item-hover: var(--dm-hover-bg);
3220
+ --dm-dropdown-item-active: var(--dm-selected-bg);
3221
+
3222
+ /* Sidebar */
3223
+ --dm-sidebar-bg: var(--dm-surface);
3224
+ --dm-sidebar-border: var(--dm-border);
3225
+ --dm-sidebar-item-hover: var(--dm-hover-bg);
3226
+ --dm-sidebar-item-active: var(--dm-selected-bg);
3227
+
3228
+ /* Code */
3229
+ --dm-code-bg: var(--dm-slate-900);
3230
+ --dm-code-text: var(--dm-red-300);
3231
+
3232
+ /* ================================================
3233
+ SHADOWS (Tailwind Shadows for Dark Mode)
3234
+ ================================================ */
3235
+ --dm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
3236
+ --dm-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
3237
+ --dm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
3238
+ --dm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
3239
+ --dm-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
3240
+ --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
3241
+ --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
3242
+
3243
+ /* ================================================
3244
+ TRANSPARENCY & OPACITY
3245
+ ================================================ */
3246
+ --dm-white-t10: rgba(255, 255, 255, 0.1);
3247
+ --dm-white-t15: rgba(255, 255, 255, 0.15);
3248
+ --dm-white-t20: rgba(255, 255, 255, 0.2);
3249
+ --dm-white-t25: rgba(255, 255, 255, 0.25);
3250
+ --dm-white-t30: rgba(255, 255, 255, 0.3);
3251
+ --dm-white-t40: rgba(255, 255, 255, 0.4);
3252
+ --dm-white-t70: rgba(255, 255, 255, 0.7);
3253
+ --dm-white-t85: rgba(255, 255, 255, 0.85);
3254
+ --dm-white-t90: rgba(255, 255, 255, 0.9);
3255
+ --dm-white-t95: rgba(255, 255, 255, 0.95);
3256
+
3257
+ --dm-black-t1: rgba(1, 1, 1, 0.0125);
3258
+ --dm-black-t20: rgba(0, 0, 0, 0.2);
3259
+ --dm-black-t30: rgba(0, 0, 0, 0.3);
3260
+ --dm-black-t50: rgba(0, 0, 0, 0.5);
3261
+ --dm-black-t70: rgba(0, 0, 0, 0.7);
3262
+
3263
+ /* ================================================
3264
+ GLOW EFFECTS
3265
+ ================================================ */
3266
+ --dm-glow-sm: 0 0 8px rgba(255, 255, 255, 0.3);
3267
+ --dm-glow: 0 0 15px rgba(255, 255, 255, 0.5);
3268
+ --dm-glow-md: 0 0 20px rgba(255, 255, 255, 0.6);
3269
+ --dm-glow-lg: 0 0 30px rgba(255, 255, 255, 0.7);
3270
+ --dm-glow-xl: 0 0 40px rgba(255, 255, 255, 0.8);
3271
+
3272
+ --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 0.6);
3273
+ --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 0.6);
3274
+ --dm-glow-success: 0 0 20px rgba(34, 197, 94, 0.6);
3275
+ --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 0.6);
3276
+ --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 0.6);
3277
+ --dm-glow-info: 0 0 20px rgba(14, 165, 233, 0.6);
3278
+
3279
+ /* ================================================
3280
+ ANIMATION VARIABLES
3281
+ ================================================ */
3282
+ --dm-animate-duration: 1s;
3283
+ --dm-animate-delay: 0s;
3284
+ --dm-animate-timing: ease;
3285
+ }
3286
+
3287
+ /* ============================================
3288
+ ANIMATION UTILITIES
3289
+ ============================================ */
3290
+
3291
+ /* Animation Keyframes */
3292
+
3293
+ @keyframes dm-fade-in {
3294
+ from {
3295
+ opacity: 0;
3296
+ }
3297
+ to {
3298
+ opacity: 1;
3299
+ }
3300
+ }
3301
+
3302
+ @keyframes dm-fade-out {
3303
+ from {
3304
+ opacity: 1;
3305
+ }
3306
+ to {
3307
+ opacity: 0;
3308
+ }
3309
+ }
3310
+
3311
+ @keyframes dm-fade-in-up {
3312
+ from {
3313
+ opacity: 0;
3314
+ transform: translateY(20px);
3315
+ }
3316
+ to {
3317
+ opacity: 1;
3318
+ transform: translateY(0);
3319
+ }
3320
+ }
3321
+
3322
+ @keyframes dm-fade-in-down {
3323
+ from {
3324
+ opacity: 0;
3325
+ transform: translateY(-20px);
3326
+ }
3327
+ to {
3328
+ opacity: 1;
3329
+ transform: translateY(0);
3330
+ }
3331
+ }
3332
+
3333
+ @keyframes dm-fade-in-left {
3334
+ from {
3335
+ opacity: 0;
3336
+ transform: translateX(-20px);
3337
+ }
3338
+ to {
3339
+ opacity: 1;
3340
+ transform: translateX(0);
3341
+ }
3342
+ }
3343
+
3344
+ @keyframes dm-fade-in-right {
3345
+ from {
3346
+ opacity: 0;
3347
+ transform: translateX(20px);
3348
+ }
3349
+ to {
3350
+ opacity: 1;
3351
+ transform: translateX(0);
3352
+ }
3353
+ }
3354
+
3355
+ @keyframes dm-slide-in-up {
3356
+ from {
3357
+ transform: translateY(100%);
3358
+ }
3359
+ to {
3360
+ transform: translateY(0);
3361
+ }
3362
+ }
3363
+
3364
+ @keyframes dm-slide-in-down {
3365
+ from {
3366
+ transform: translateY(-100%);
3367
+ }
3368
+ to {
3369
+ transform: translateY(0);
3370
+ }
3371
+ }
3372
+
3373
+ @keyframes dm-slide-in-left {
3374
+ from {
3375
+ transform: translateX(-100%);
3376
+ }
3377
+ to {
3378
+ transform: translateX(0);
3379
+ }
3380
+ }
3381
+
3382
+ @keyframes dm-slide-in-right {
3383
+ from {
3384
+ transform: translateX(100%);
3385
+ }
3386
+ to {
3387
+ transform: translateX(0);
3388
+ }
3389
+ }
3390
+
3391
+ @keyframes dm-zoom-in {
3392
+ from {
3393
+ opacity: 0;
3394
+ transform: scale(0.8);
3395
+ }
3396
+ to {
3397
+ opacity: 1;
3398
+ transform: scale(1);
3399
+ }
3400
+ }
3401
+
3402
+ @keyframes dm-zoom-out {
3403
+ from {
3404
+ opacity: 1;
3405
+ transform: scale(1);
3406
+ }
3407
+ to {
3408
+ opacity: 0;
3409
+ transform: scale(0.8);
3410
+ }
3411
+ }
3412
+
3413
+ @keyframes dm-bounce {
3414
+ 0%, 20%, 50%, 80%, 100% {
3415
+ transform: translateY(0);
3416
+ }
3417
+ 40% {
3418
+ transform: translateY(-20px);
3419
+ }
3420
+ 60% {
3421
+ transform: translateY(-10px);
3422
+ }
3423
+ }
3424
+
3425
+ @keyframes dm-pulse {
3426
+ 0%, 100% {
3427
+ opacity: 1;
3428
+ }
3429
+ 50% {
3430
+ opacity: 0.5;
3431
+ }
3432
+ }
3433
+
3434
+ @keyframes dm-shake {
3435
+ 0%, 100% {
3436
+ transform: translateX(0);
3437
+ }
3438
+ 10%, 30%, 50%, 70%, 90% {
3439
+ transform: translateX(-5px);
3440
+ }
3441
+ 20%, 40%, 60%, 80% {
3442
+ transform: translateX(5px);
3443
+ }
3444
+ }
3445
+
3446
+ @keyframes dm-spin {
3447
+ from {
3448
+ transform: rotate(0deg);
3449
+ }
3450
+ to {
3451
+ transform: rotate(360deg);
3452
+ }
3453
+ }
3454
+
3455
+ @keyframes dm-rotate-in {
3456
+ from {
3457
+ opacity: 0;
3458
+ transform: rotate(-180deg) scale(0.8);
3459
+ }
3460
+ to {
3461
+ opacity: 1;
3462
+ transform: rotate(0) scale(1);
3463
+ }
3464
+ }
3465
+
3466
+ @keyframes dm-flip {
3467
+ from {
3468
+ transform: perspective(400px) rotateY(90deg);
3469
+ opacity: 0;
3470
+ }
3471
+ to {
3472
+ transform: perspective(400px) rotateY(0);
3473
+ opacity: 1;
3474
+ }
3475
+ }
3476
+
3477
+ /* Animation Classes */
3478
+
3479
+ .animate-fade-in {
3480
+ animation-name: dm-fade-in;
3481
+ animation-duration: var(--dm-animate-duration, 1s);
3482
+ animation-timing-function: var(--dm-animate-timing, ease);
3483
+ animation-delay: var(--dm-animate-delay, 0s);
3484
+ animation-fill-mode: both;
3485
+ }
3486
+
3487
+ .animate-fade-out {
3488
+ animation-name: dm-fade-out;
3489
+ animation-duration: var(--dm-animate-duration, 1s);
3490
+ animation-timing-function: var(--dm-animate-timing, ease);
3491
+ animation-delay: var(--dm-animate-delay, 0s);
3492
+ animation-fill-mode: both;
3493
+ }
3494
+
3495
+ .animate-fade-in-up {
3496
+ animation-name: dm-fade-in-up;
3497
+ animation-duration: var(--dm-animate-duration, 1s);
3498
+ animation-timing-function: var(--dm-animate-timing, ease);
3499
+ animation-delay: var(--dm-animate-delay, 0s);
3500
+ animation-fill-mode: both;
3501
+ }
3502
+
3503
+ .animate-fade-in-down {
3504
+ animation-name: dm-fade-in-down;
3505
+ animation-duration: var(--dm-animate-duration, 1s);
3506
+ animation-timing-function: var(--dm-animate-timing, ease);
3507
+ animation-delay: var(--dm-animate-delay, 0s);
3508
+ animation-fill-mode: both;
3509
+ }
3510
+
3511
+ .animate-fade-in-left {
3512
+ animation-name: dm-fade-in-left;
3513
+ animation-duration: var(--dm-animate-duration, 1s);
3514
+ animation-timing-function: var(--dm-animate-timing, ease);
3515
+ animation-delay: var(--dm-animate-delay, 0s);
3516
+ animation-fill-mode: both;
3517
+ }
3518
+
3519
+ .animate-fade-in-right {
3520
+ animation-name: dm-fade-in-right;
3521
+ animation-duration: var(--dm-animate-duration, 1s);
3522
+ animation-timing-function: var(--dm-animate-timing, ease);
3523
+ animation-delay: var(--dm-animate-delay, 0s);
3524
+ animation-fill-mode: both;
3525
+ }
3526
+
3527
+ .animate-slide-in-up {
3528
+ animation-name: dm-slide-in-up;
3529
+ animation-duration: var(--dm-animate-duration, 1s);
3530
+ animation-timing-function: var(--dm-animate-timing, ease);
3531
+ animation-delay: var(--dm-animate-delay, 0s);
3532
+ animation-fill-mode: both;
3533
+ }
3534
+
3535
+ .animate-slide-in-down {
3536
+ animation-name: dm-slide-in-down;
3537
+ animation-duration: var(--dm-animate-duration, 1s);
3538
+ animation-timing-function: var(--dm-animate-timing, ease);
3539
+ animation-delay: var(--dm-animate-delay, 0s);
3540
+ animation-fill-mode: both;
3541
+ }
3542
+
3543
+ .animate-slide-in-left {
3544
+ animation-name: dm-slide-in-left;
3545
+ animation-duration: var(--dm-animate-duration, 1s);
3546
+ animation-timing-function: var(--dm-animate-timing, ease);
3547
+ animation-delay: var(--dm-animate-delay, 0s);
3548
+ animation-fill-mode: both;
3549
+ }
3550
+
3551
+ .animate-slide-in-right {
3552
+ animation-name: dm-slide-in-right;
3553
+ animation-duration: var(--dm-animate-duration, 1s);
3554
+ animation-timing-function: var(--dm-animate-timing, ease);
3555
+ animation-delay: var(--dm-animate-delay, 0s);
3556
+ animation-fill-mode: both;
3557
+ }
3558
+
3559
+ .animate-zoom-in {
3560
+ animation-name: dm-zoom-in;
3561
+ animation-duration: var(--dm-animate-duration, 1s);
3562
+ animation-timing-function: var(--dm-animate-timing, ease);
3563
+ animation-delay: var(--dm-animate-delay, 0s);
3564
+ animation-fill-mode: both;
3565
+ }
3566
+
3567
+ .animate-zoom-out {
3568
+ animation-name: dm-zoom-out;
3569
+ animation-duration: var(--dm-animate-duration, 1s);
3570
+ animation-timing-function: var(--dm-animate-timing, ease);
3571
+ animation-delay: var(--dm-animate-delay, 0s);
3572
+ animation-fill-mode: both;
3573
+ }
3574
+
3575
+ .animate-bounce {
3576
+ animation-name: dm-bounce;
3577
+ animation-duration: var(--dm-animate-duration, 1s);
3578
+ animation-timing-function: var(--dm-animate-timing, ease);
3579
+ animation-delay: var(--dm-animate-delay, 0s);
3580
+ animation-fill-mode: both;
3581
+ }
3582
+
3583
+ .animate-pulse {
3584
+ animation-name: dm-pulse;
3585
+ animation-duration: var(--dm-animate-duration, 1s);
3586
+ animation-timing-function: var(--dm-animate-timing, ease);
3587
+ animation-delay: var(--dm-animate-delay, 0s);
3588
+ animation-fill-mode: both;
3589
+ }
3590
+
3591
+ .animate-shake {
3592
+ animation-name: dm-shake;
3593
+ animation-duration: 0.5s;
3594
+ animation-timing-function: ease;
3595
+ animation-fill-mode: both;
3596
+ }
3597
+
3598
+ .animate-spin {
3599
+ animation-name: dm-spin;
3600
+ animation-duration: var(--dm-animate-duration, 1s);
3601
+ animation-timing-function: linear;
3602
+ animation-delay: var(--dm-animate-delay, 0s);
3603
+ animation-fill-mode: both;
3604
+ }
3605
+
3606
+ .animate-rotate-in {
3607
+ animation-name: dm-rotate-in;
3608
+ animation-duration: var(--dm-animate-duration, 1s);
3609
+ animation-timing-function: var(--dm-animate-timing, ease);
3610
+ animation-delay: var(--dm-animate-delay, 0s);
3611
+ animation-fill-mode: both;
3612
+ }
3613
+
3614
+ .animate-flip {
3615
+ animation-name: dm-flip;
3616
+ animation-duration: var(--dm-animate-duration, 1s);
3617
+ animation-timing-function: var(--dm-animate-timing, ease);
3618
+ animation-delay: var(--dm-animate-delay, 0s);
3619
+ animation-fill-mode: both;
3620
+ }
3621
+
3622
+ /* Animation Control Classes */
3623
+
3624
+ .animate-infinite {
3625
+ animation-iteration-count: infinite;
3626
+ }
3627
+
3628
+ .animate-once {
3629
+ animation-iteration-count: 1;
3630
+ }
3631
+
3632
+ .animate-repeat-2 {
3633
+ animation-iteration-count: 2;
3634
+ }
3635
+
3636
+ .animate-repeat-3 {
3637
+ animation-iteration-count: 3;
3638
+ }
3639
+
3640
+ /* Animation Durations */
3641
+
3642
+ .animate-duration-fast {
3643
+ --dm-animate-duration: 0.3s;
3644
+ }
3645
+
3646
+ .animate-duration-normal {
3647
+ --dm-animate-duration: 0.6s;
3648
+ }
3649
+
3650
+ .animate-duration-slow {
3651
+ --dm-animate-duration: 1s;
3652
+ }
3653
+
3654
+ .animate-duration-slower {
3655
+ --dm-animate-duration: 2s;
3656
+ }
3657
+
3658
+ /* Animation Delays */
3659
+
3660
+ .animate-delay-100 {
3661
+ --dm-animate-delay: 0.1s;
3662
+ }
3663
+
3664
+ .animate-delay-200 {
3665
+ --dm-animate-delay: 0.2s;
3666
+ }
3667
+
3668
+ .animate-delay-300 {
3669
+ --dm-animate-delay: 0.3s;
3670
+ }
3671
+
3672
+ .animate-delay-500 {
3673
+ --dm-animate-delay: 0.5s;
3674
+ }
3675
+
3676
+ .animate-delay-1000 {
3677
+ --dm-animate-delay: 1s;
3678
+ }
3679
+
3680
+ /* Hover Animations */
3681
+
3682
+ .animate-fade-in-hover:hover {
3683
+ animation-name: dm-fade-in;
3684
+ animation-duration: 0.3s;
3685
+ animation-timing-function: ease;
3686
+ animation-fill-mode: both;
3687
+ }
3688
+
3689
+ .animate-bounce-hover:hover {
3690
+ animation-name: dm-bounce;
3691
+ animation-duration: 0.6s;
3692
+ animation-timing-function: ease;
3693
+ animation-fill-mode: both;
3694
+ }
3695
+
3696
+ .animate-pulse-hover:hover {
3697
+ animation-name: dm-pulse;
3698
+ animation-duration: 1s;
3699
+ animation-timing-function: ease;
3700
+ animation-fill-mode: both;
3701
+ }
3702
+
3703
+ .animate-shake-hover:hover {
3704
+ animation-name: dm-shake;
3705
+ animation-duration: 0.5s;
3706
+ animation-timing-function: ease;
3707
+ animation-fill-mode: both;
3708
+ }
3709
+
3710
+ .animate-spin-hover:hover {
3711
+ animation-name: dm-spin;
3712
+ animation-duration: 1s;
3713
+ animation-timing-function: linear;
3714
+ animation-fill-mode: both;
3715
+ }
3716
+
3717
+ /* ============================================
3718
+ GRADIENT UTILITIES
3719
+ ============================================ */
3720
+
3721
+ /* Background Gradients */
3722
+
3723
+ .bg-gradient-primary {
3724
+ background: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3725
+ }
3726
+
3727
+ .bg-gradient-secondary {
3728
+ background: linear-gradient(135deg, var(--dm-secondary) 0%, var(--dm-secondary-dark) 100%);
3729
+ }
3730
+
3731
+ .bg-gradient-success {
3732
+ background: linear-gradient(135deg, var(--dm-success) 0%, var(--dm-success-dark) 100%);
3733
+ }
3734
+
3735
+ .bg-gradient-danger {
3736
+ background: linear-gradient(135deg, var(--dm-danger) 0%, var(--dm-danger-dark) 100%);
3737
+ }
3738
+
3739
+ .bg-gradient-warning {
3740
+ background: linear-gradient(135deg, var(--dm-warning) 0%, var(--dm-warning-dark) 100%);
3741
+ }
3742
+
3743
+ .bg-gradient-info {
3744
+ background: linear-gradient(135deg, var(--dm-info) 0%, var(--dm-info-dark) 100%);
3745
+ }
3746
+
3747
+ /* Directional Gradients */
3748
+
3749
+ .bg-gradient-to-t {
3750
+ background: linear-gradient(to top, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3751
+ }
3752
+
3753
+ .bg-gradient-to-tr {
3754
+ background: linear-gradient(to top right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3755
+ }
3756
+
3757
+ .bg-gradient-to-r {
3758
+ background: linear-gradient(to right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3759
+ }
3760
+
3761
+ .bg-gradient-to-br {
3762
+ background: linear-gradient(to bottom right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3763
+ }
3764
+
3765
+ .bg-gradient-to-b {
3766
+ background: linear-gradient(to bottom, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3767
+ }
3768
+
3769
+ .bg-gradient-to-bl {
3770
+ background: linear-gradient(to bottom left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3771
+ }
3772
+
3773
+ .bg-gradient-to-l {
3774
+ background: linear-gradient(to left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3775
+ }
3776
+
3777
+ .bg-gradient-to-tl {
3778
+ background: linear-gradient(to top left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3779
+ }
3780
+
3781
+ /* Radial Gradients */
3782
+
3783
+ .bg-gradient-radial {
3784
+ background: radial-gradient(circle, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3785
+ }
3786
+
3787
+ /* Named Gradient Presets */
3788
+
3789
+ .bg-gradient-purple {
3790
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3791
+ }
3792
+
3793
+ .bg-gradient-blue {
3794
+ background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
3795
+ }
3796
+
3797
+ .bg-gradient-green {
3798
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
3799
+ }
3800
+
3801
+ .bg-gradient-sunset {
3802
+ background: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3803
+ }
3804
+
3805
+ .bg-gradient-ocean {
3806
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3807
+ }
3808
+
3809
+ .bg-gradient-rose {
3810
+ background: linear-gradient(135deg, #ec4899 0%, #db2777 100%);
3811
+ }
3812
+
3813
+ .bg-gradient-forest {
3814
+ background: linear-gradient(135deg, #10b981 0%, #065f46 100%);
3815
+ }
3816
+
3817
+ .bg-gradient-night {
3818
+ background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
3819
+ }
3820
+
3821
+ .bg-gradient-warm {
3822
+ background: linear-gradient(135deg, #f59e0b 0%, #f97316 0%, #dc2626 100%);
3823
+ }
3824
+
3825
+ .bg-gradient-cool {
3826
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 0%, #8b5cf6 100%);
3827
+ }
3828
+
3829
+ /* Animated Gradients */
3830
+
3831
+ @keyframes dm-gradient-shift {
3832
+ 0% {
3833
+ background-position: 0% 50%;
3834
+ }
3835
+ 50% {
3836
+ background-position: 100% 50%;
3837
+ }
3838
+ 100% {
3839
+ background-position: 0% 50%;
3840
+ }
3841
+ }
3842
+
3843
+ .bg-gradient-animated {
3844
+ background-size: 200% 200%;
3845
+ animation: dm-gradient-shift 3s ease infinite;
3846
+ }
3847
+
3848
+ /* Text Gradients */
3849
+
3850
+ .text-gradient {
3851
+ background-clip: text;
3852
+ -webkit-background-clip: text;
3853
+ -webkit-text-fill-color: transparent;
3854
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-secondary) 100%);
3855
+ }
3856
+
3857
+ .text-gradient-primary {
3858
+ background-clip: text;
3859
+ -webkit-background-clip: text;
3860
+ -webkit-text-fill-color: transparent;
3861
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3862
+ }
3863
+
3864
+ .text-gradient-sunset {
3865
+ background-clip: text;
3866
+ -webkit-background-clip: text;
3867
+ -webkit-text-fill-color: transparent;
3868
+ background-image: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3869
+ }
3870
+
3871
+ .text-gradient-ocean {
3872
+ background-clip: text;
3873
+ -webkit-background-clip: text;
3874
+ -webkit-text-fill-color: transparent;
3875
+ background-image: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3876
+ }
3877
+
3878
+ .text-gradient-purple {
3879
+ background-clip: text;
3880
+ -webkit-background-clip: text;
3881
+ -webkit-text-fill-color: transparent;
3882
+ background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3883
+ }
3884
+
3885
+ /* ============================================
3886
+ FILTER UTILITIES
3887
+ ============================================ */
3888
+
3889
+ /* Blur */
3890
+
3891
+ .blur-none {
3892
+ filter: blur(0);
3893
+ }
3894
+
3895
+ .blur-sm {
3896
+ filter: blur(4px);
3897
+ }
3898
+
3899
+ .blur {
3900
+ filter: blur(8px);
3901
+ }
3902
+
3903
+ .blur-md {
3904
+ filter: blur(12px);
3905
+ }
3906
+
3907
+ .blur-lg {
3908
+ filter: blur(16px);
3909
+ }
3910
+
3911
+ .blur-xl {
3912
+ filter: blur(24px);
3913
+ }
3914
+
3915
+ .blur-2xl {
3916
+ filter: blur(40px);
3917
+ }
3918
+
3919
+ .blur-3xl {
3920
+ filter: blur(64px);
3921
+ }
3922
+
3923
+ /* Brightness */
3924
+
3925
+ .brightness-0 {
3926
+ filter: brightness(0);
3927
+ }
3928
+
3929
+ .brightness-50 {
3930
+ filter: brightness(0.5);
3931
+ }
3932
+
3933
+ .brightness-75 {
3934
+ filter: brightness(0.75);
3935
+ }
3936
+
3937
+ .brightness-90 {
3938
+ filter: brightness(0.9);
3939
+ }
3940
+
3941
+ .brightness-100 {
3942
+ filter: brightness(1);
3943
+ }
3944
+
3945
+ .brightness-110 {
3946
+ filter: brightness(1.1);
3947
+ }
3948
+
3949
+ .brightness-125 {
3950
+ filter: brightness(1.25);
3951
+ }
3952
+
3953
+ .brightness-150 {
3954
+ filter: brightness(1.5);
3955
+ }
3956
+
3957
+ .brightness-200 {
3958
+ filter: brightness(2);
3959
+ }
3960
+
3961
+ /* Contrast */
3962
+
3963
+ .contrast-0 {
3964
+ filter: contrast(0);
3965
+ }
3966
+
3967
+ .contrast-50 {
3968
+ filter: contrast(0.5);
3969
+ }
3970
+
3971
+ .contrast-75 {
3972
+ filter: contrast(0.75);
3973
+ }
3974
+
3975
+ .contrast-100 {
3976
+ filter: contrast(1);
3977
+ }
3978
+
3979
+ .contrast-125 {
3980
+ filter: contrast(1.25);
3981
+ }
3982
+
3983
+ .contrast-150 {
3984
+ filter: contrast(1.5);
3985
+ }
3986
+
3987
+ .contrast-200 {
3988
+ filter: contrast(2);
3989
+ }
3990
+
3991
+ /* Grayscale */
3992
+
3993
+ .grayscale-0 {
3994
+ filter: grayscale(0);
3995
+ }
3996
+
3997
+ .grayscale {
3998
+ filter: grayscale(1);
3999
+ }
4000
+
4001
+ .grayscale-50 {
4002
+ filter: grayscale(0.5);
4003
+ }
4004
+
4005
+ /* Hue Rotate */
4006
+
4007
+ .hue-rotate-15 {
4008
+ filter: hue-rotate(15deg);
4009
+ }
4010
+
4011
+ .hue-rotate-30 {
4012
+ filter: hue-rotate(30deg);
4013
+ }
4014
+
4015
+ .hue-rotate-60 {
4016
+ filter: hue-rotate(60deg);
4017
+ }
4018
+
4019
+ .hue-rotate-90 {
4020
+ filter: hue-rotate(90deg);
4021
+ }
4022
+
4023
+ .hue-rotate-180 {
4024
+ filter: hue-rotate(180deg);
4025
+ }
4026
+
4027
+ /* Invert */
4028
+
4029
+ .invert-0 {
4030
+ filter: invert(0);
4031
+ }
4032
+
4033
+ .invert {
4034
+ filter: invert(1);
4035
+ }
4036
+
4037
+ .invert-50 {
4038
+ filter: invert(0.5);
4039
+ }
4040
+
4041
+ /* Saturate */
4042
+
4043
+ .saturate-0 {
4044
+ filter: saturate(0);
4045
+ }
4046
+
4047
+ .saturate-50 {
4048
+ filter: saturate(0.5);
4049
+ }
4050
+
4051
+ .saturate-100 {
4052
+ filter: saturate(1);
4053
+ }
4054
+
4055
+ .saturate-150 {
4056
+ filter: saturate(1.5);
4057
+ }
4058
+
4059
+ .saturate-200 {
4060
+ filter: saturate(2);
4061
+ }
4062
+
4063
+ /* Sepia */
4064
+
4065
+ .sepia-0 {
4066
+ filter: sepia(0);
4067
+ }
4068
+
4069
+ .sepia {
4070
+ filter: sepia(1);
4071
+ }
4072
+
4073
+ .sepia-50 {
4074
+ filter: sepia(0.5);
4075
+ }
4076
+
4077
+ /* Drop Shadow */
4078
+
4079
+ .drop-shadow-sm {
4080
+ filter: drop-shadow(0 1px 1px rgb(0 0 0 / 0.05));
4081
+ }
4082
+
4083
+ .drop-shadow {
4084
+ filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
4085
+ }
4086
+
4087
+ .drop-shadow-md {
4088
+ filter: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
4089
+ }
4090
+
4091
+ .drop-shadow-lg {
4092
+ filter: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));
4093
+ }
4094
+
4095
+ .drop-shadow-xl {
4096
+ filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
2206
4097
  }
2207
4098
 
2208
- /* ============================================
2209
- COMPONENT: Badge
2210
- ============================================ */
4099
+ .drop-shadow-2xl {
4100
+ filter: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
4101
+ }
2211
4102
 
2212
- /* ============================================
2213
- COMPONENT: Pill
2214
- ============================================ */
4103
+ .drop-shadow-none {
4104
+ filter: drop-shadow(0 0 #0000);
4105
+ }
2215
4106
 
2216
- /* ============================================
2217
- COMPONENT: Alert
2218
- ============================================ */
4107
+ /* Backdrop Blur */
2219
4108
 
2220
- /* ============================================
2221
- SYNTAX HIGHLIGHTING TOKENS
2222
- ============================================ */
4109
+ .backdrop-blur-none {
4110
+ backdrop-filter: blur(0);
4111
+ }
2223
4112
 
2224
- /* Dark theme (default) - Material Palenight inspired */
2225
- .code-block .syntax-keyword {
2226
- color: #c792ea;
2227
- font-weight: 500;
4113
+ .backdrop-blur-sm {
4114
+ backdrop-filter: blur(4px);
2228
4115
  }
2229
4116
 
2230
- .code-block .syntax-string,
2231
- .code-block .syntax-template-string {
2232
- color: #c3e88d;
4117
+ .backdrop-blur {
4118
+ backdrop-filter: blur(8px);
2233
4119
  }
2234
4120
 
2235
- .code-block .syntax-function {
2236
- color: #82aaff;
4121
+ .backdrop-blur-md {
4122
+ backdrop-filter: blur(12px);
2237
4123
  }
2238
4124
 
2239
- /**
2240
- * Domma Dark Theme - Tailwind Version
2241
- * Dark color scheme with a Tailwind CSS 'slate' palette.
2242
- */
4125
+ .backdrop-blur-lg {
4126
+ backdrop-filter: blur(16px);
4127
+ }
2243
4128
 
2244
- .dm-theme-dark {
2245
- color-scheme: dark;
4129
+ .backdrop-blur-xl {
4130
+ backdrop-filter: blur(24px);
4131
+ }
2246
4132
 
2247
- /* ================================================
2248
- SEMANTIC COLORS (Dark Theme Overrides)
2249
- ================================================ */
4133
+ .backdrop-blur-2xl {
4134
+ backdrop-filter: blur(40px);
4135
+ }
2250
4136
 
2251
- /* Backgrounds */
2252
- --dm-background: var(--dm-slate-900);
2253
- --dm-background-alt: var(--dm-slate-800);
2254
- --dm-surface: var(--dm-slate-800);
2255
- --dm-surface-raised: var(--dm-slate-700);
2256
- --dm-surface-overlay: var(--dm-slate-700);
4137
+ .backdrop-blur-3xl {
4138
+ backdrop-filter: blur(64px);
4139
+ }
2257
4140
 
2258
- /* Text */
2259
- --dm-text: var(--dm-slate-200);
2260
- --dm-text-secondary: var(--dm-slate-400);
2261
- --dm-text-muted: var(--dm-slate-500);
2262
- --dm-text-disabled: var(--dm-slate-600);
2263
- --dm-text-inverse: var(--dm-slate-900);
4141
+ /* Backdrop Brightness */
2264
4142
 
2265
- /* Borders */
2266
- --dm-border: var(--dm-slate-700);
2267
- --dm-border-light: var(--dm-slate-800);
2268
- --dm-border-dark: var(--dm-slate-600);
2269
- --dm-border-focus: var(--dm-blue-500);
2270
- --dm-focus-ring: rgba(96, 165, 250, 0.3); /* blue-400 at 30% */
2271
- --dm-focus-ring-danger: rgba(248, 113, 113, 0.3); /* red-400 at 30% */
4143
+ .backdrop-brightness-50 {
4144
+ backdrop-filter: brightness(0.5);
4145
+ }
2272
4146
 
2273
- /* ================================================
2274
- BRAND COLORS (Lightened for dark mode)
2275
- ================================================ */
2276
- --dm-primary: var(--dm-blue-500);
2277
- --dm-primary-hover: var(--dm-blue-400);
2278
- --dm-primary-active: var(--dm-blue-300);
2279
- --dm-primary-light: rgba(96, 165, 250, 0.15); /* blue-400 */
2280
- --dm-primary-dark: var(--dm-blue-600);
4147
+ .backdrop-brightness-75 {
4148
+ backdrop-filter: brightness(0.75);
4149
+ }
2281
4150
 
2282
- --dm-secondary: var(--dm-slate-400);
2283
- --dm-secondary-hover: var(--dm-slate-300);
2284
- --dm-secondary-active: var(--dm-slate-200);
4151
+ .backdrop-brightness-90 {
4152
+ backdrop-filter: brightness(0.9);
4153
+ }
2285
4154
 
2286
- /* ================================================
2287
- STATUS COLORS (Adjusted for dark mode)
2288
- ================================================ */
2289
- --dm-success: var(--dm-green-500);
2290
- --dm-success-hover: var(--dm-green-400);
2291
- --dm-success-active: var(--dm-green-300);
2292
- --dm-success-light: rgba(74, 222, 128, 0.15); /* green-400 */
2293
- --dm-success-dark: var(--dm-green-600);
4155
+ .backdrop-brightness-100 {
4156
+ backdrop-filter: brightness(1);
4157
+ }
2294
4158
 
2295
- --dm-danger: var(--dm-red-500);
2296
- --dm-danger-hover: var(--dm-red-400);
2297
- --dm-danger-active: var(--dm-red-300);
2298
- --dm-danger-light: rgba(248, 113, 113, 0.15); /* red-400 */
2299
- --dm-danger-dark: var(--dm-red-600);
4159
+ .backdrop-brightness-110 {
4160
+ backdrop-filter: brightness(1.1);
4161
+ }
2300
4162
 
2301
- --dm-warning: var(--dm-amber-400);
2302
- --dm-warning-hover: var(--dm-amber-300);
2303
- --dm-warning-active: var(--dm-amber-200);
2304
- --dm-warning-text: var(--dm-amber-950);
2305
- --dm-warning-light: rgba(251, 191, 36, 0.15); /* amber-400 */
2306
- --dm-warning-dark: var(--dm-amber-500);
4163
+ .backdrop-brightness-125 {
4164
+ backdrop-filter: brightness(1.25);
4165
+ }
2307
4166
 
2308
- --dm-info: var(--dm-sky-400);
2309
- --dm-info-hover: var(--dm-sky-300);
2310
- --dm-info-active: var(--dm-sky-200);
2311
- --dm-info-light: rgba(56, 189, 248, 0.15); /* sky-400 */
2312
- --dm-info-dark: var(--dm-sky-500);
4167
+ .backdrop-brightness-150 {
4168
+ backdrop-filter: brightness(1.5);
4169
+ }
2313
4170
 
2314
- /* ================================================
2315
- BACKGROUND TINTS (Dark theme versions)
2316
- ================================================ */
2317
- --dm-primary-bg: rgba(96, 165, 250, 0.15); /* blue-400 */
2318
- --dm-secondary-bg: rgba(148, 163, 184, 0.15); /* slate-400 */
2319
- --dm-success-bg: rgba(74, 222, 128, 0.15); /* green-400 */
2320
- --dm-danger-bg: rgba(248, 113, 113, 0.15); /* red-400 */
2321
- --dm-warning-bg: rgba(251, 191, 36, 0.15); /* amber-400 */
2322
- --dm-info-bg: rgba(56, 189, 248, 0.15); /* sky-400 */
4171
+ /* Backdrop Saturate */
2323
4172
 
2324
- /* ================================================
2325
- SEMANTIC SURFACE COLORS (Dark theme versions)
2326
- ================================================ */
2327
- --dm-surface-secondary: var(--dm-slate-900);
2328
- --dm-card-bg: var(--dm-slate-800);
2329
- --dm-card-border: var(--dm-slate-700);
4173
+ .backdrop-saturate-0 {
4174
+ backdrop-filter: saturate(0);
4175
+ }
2330
4176
 
2331
- /* ================================================
2332
- INTERACTIVE STATES
2333
- ================================================ */
2334
- --dm-hover-bg: rgba(255, 255, 255, 0.07);
2335
- --dm-active-bg: rgba(255, 255, 255, 0.1);
2336
- --dm-selected-bg: var(--dm-blue-500);
2337
- --dm-disabled-opacity: 0.4;
4177
+ .backdrop-saturate-50 {
4178
+ backdrop-filter: saturate(0.5);
4179
+ }
2338
4180
 
2339
- /* ================================================
2340
- COMPONENT-SPECIFIC
2341
- ================================================ */
4181
+ .backdrop-saturate-100 {
4182
+ backdrop-filter: saturate(1);
4183
+ }
2342
4184
 
2343
- /* Cards */
2344
- --dm-card-bg: var(--dm-surface);
2345
- --dm-card-border: var(--dm-border);
2346
- --dm-card-shadow: var(--dm-shadow-md);
4185
+ .backdrop-saturate-150 {
4186
+ backdrop-filter: saturate(1.5);
4187
+ }
2347
4188
 
2348
- /* Inputs */
2349
- --dm-input-bg: var(--dm-surface);
2350
- --dm-input-border: var(--dm-border-dark);
2351
- --dm-input-text: var(--dm-text);
2352
- --dm-input-placeholder: var(--dm-text-muted);
2353
- --dm-input-focus-border: var(--dm-primary);
2354
- --dm-input-disabled-bg: var(--dm-slate-800);
4189
+ .backdrop-saturate-200 {
4190
+ backdrop-filter: saturate(2);
4191
+ }
2355
4192
 
2356
- /* Tables */
2357
- --dm-table-border: var(--dm-border);
2358
- --dm-table-hover-bg: var(--dm-hover-bg);
2359
- --dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
4193
+ /* Combined Filter Presets */
2360
4194
 
2361
- /* Navbar */
2362
- --dm-navbar-bg: var(--dm-surface);
2363
- --dm-navbar-text: var(--dm-text);
2364
- --dm-navbar-border: var(--dm-border);
4195
+ .filter-none {
4196
+ filter: none;
4197
+ }
2365
4198
 
2366
- /* Dropdown */
2367
- --dm-dropdown-bg: var(--dm-surface-raised);
2368
- --dm-dropdown-border: var(--dm-border);
2369
- --dm-dropdown-item-hover: var(--dm-hover-bg);
2370
- --dm-dropdown-item-active: var(--dm-selected-bg);
4199
+ .filter-vintage {
4200
+ filter: sepia(0.5) contrast(1.2) brightness(0.9);
4201
+ }
2371
4202
 
2372
- /* Sidebar */
2373
- --dm-sidebar-bg: var(--dm-surface);
2374
- --dm-sidebar-border: var(--dm-border);
2375
- --dm-sidebar-item-hover: var(--dm-hover-bg);
2376
- --dm-sidebar-item-active: var(--dm-selected-bg);
4203
+ .filter-dramatic {
4204
+ filter: contrast(1.5) saturate(1.3);
4205
+ }
2377
4206
 
2378
- /* Code */
2379
- --dm-code-bg: var(--dm-slate-900);
2380
- --dm-code-text: var(--dm-red-300);
4207
+ .filter-soft {
4208
+ filter: blur(2px) brightness(1.1);
4209
+ }
2381
4210
 
2382
- /* ================================================
2383
- SHADOWS (Tailwind Shadows for Dark Mode)
2384
- ================================================ */
2385
- --dm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
2386
- --dm-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
2387
- --dm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
2388
- --dm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
2389
- --dm-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
2390
- --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
2391
- --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
4211
+ .filter-cold {
4212
+ filter: saturate(0.8) hue-rotate(15deg);
4213
+ }
2392
4214
 
2393
- /* ================================================
2394
- TRANSPARENCY & OPACITY
2395
- ================================================ */
2396
- --dm-white-t10: rgba(255, 255, 255, 0.1);
2397
- --dm-white-t15: rgba(255, 255, 255, 0.15);
2398
- --dm-white-t20: rgba(255, 255, 255, 0.2);
2399
- --dm-white-t25: rgba(255, 255, 255, 0.25);
2400
- --dm-white-t30: rgba(255, 255, 255, 0.3);
2401
- --dm-white-t40: rgba(255, 255, 255, 0.4);
2402
- --dm-white-t70: rgba(255, 255, 255, 0.7);
2403
- --dm-white-t85: rgba(255, 255, 255, 0.85);
2404
- --dm-white-t90: rgba(255, 255, 255, 0.9);
2405
- --dm-white-t95: rgba(255, 255, 255, 0.95);
4215
+ .filter-warm {
4216
+ filter: saturate(1.2) hue-rotate(-15deg);
4217
+ }
2406
4218
 
2407
- --dm-black-t1: rgba(1, 1, 1, 0.0125);
2408
- --dm-black-t20: rgba(0, 0, 0, 0.2);
2409
- --dm-black-t30: rgba(0, 0, 0, 0.3);
2410
- --dm-black-t50: rgba(0, 0, 0, 0.5);
2411
- --dm-black-t70: rgba(0, 0, 0, 0.7);
4219
+ /* ================================================
4220
+ CLOAKING - Prevent flash of unstyled content
4221
+ ================================================ */
4222
+ body.dm-cloaked {
4223
+ opacity: 0;
4224
+ }
2412
4225
 
2413
- /* ================================================
2414
- GLOW EFFECTS
2415
- ================================================ */
2416
- --dm-glow-sm: 0 0 8px rgba(255, 255, 255, 0.3);
2417
- --dm-glow: 0 0 15px rgba(255, 255, 255, 0.5);
2418
- --dm-glow-md: 0 0 20px rgba(255, 255, 255, 0.6);
2419
- --dm-glow-lg: 0 0 30px rgba(255, 255, 255, 0.7);
2420
- --dm-glow-xl: 0 0 40px rgba(255, 255, 255, 0.8);
2421
-
2422
- --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 0.6);
2423
- --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 0.6);
2424
- --dm-glow-success: 0 0 20px rgba(34, 197, 94, 0.6);
2425
- --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 0.6);
2426
- --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 0.6);
2427
- --dm-glow-info: 0 0 20px rgba(14, 165, 233, 0.6);
4226
+ body.dm-cloaked.dm-ready {
4227
+ opacity: 1;
4228
+ transition: opacity 0.3s ease;
2428
4229
  }
2429
4230
 
2430
4231
 
@@ -2434,11 +4235,11 @@ code, pre {
2434
4235
  ============================================ */
2435
4236
 
2436
4237
  /*!
2437
- * Domma Grid CSS v0.3.0-alpha.0
4238
+ * Domma Grid CSS v0.5.0-alpha
2438
4239
  * Dynamic Object Manipulation & Modeling API
2439
4240
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2440
- * Built: 2026-01-02T14:32:25.394Z
2441
- * Commit: bc8e519
4241
+ * Built: 2026-01-08T09:15:50.031Z
4242
+ * Commit: ad86642
2442
4243
  */
2443
4244
 
2444
4245
  /**
@@ -2979,11 +4780,11 @@ code, pre {
2979
4780
  ============================================ */
2980
4781
 
2981
4782
  /*!
2982
- * Domma Elements CSS v0.3.0-alpha.0
4783
+ * Domma Elements CSS v0.5.0-alpha
2983
4784
  * Dynamic Object Manipulation & Modeling API
2984
4785
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2985
- * Built: 2026-01-02T14:32:25.401Z
2986
- * Commit: bc8e519
4786
+ * Built: 2026-01-08T09:15:50.041Z
4787
+ * Commit: ad86642
2987
4788
  */
2988
4789
 
2989
4790
  /**
@@ -3238,6 +5039,40 @@ code, pre {
3238
5039
  text-decoration: none;
3239
5040
  }
3240
5041
 
5042
+ /* Collapsible card styles */
5043
+ .card-collapsible .card-header {
5044
+ cursor: pointer;
5045
+ display: flex;
5046
+ align-items: center;
5047
+ justify-content: space-between;
5048
+ user-select: none;
5049
+ }
5050
+
5051
+ .card-header-content {
5052
+ flex: 1;
5053
+ }
5054
+
5055
+ .card-collapse-icon {
5056
+ transition: transform var(--dm-transition-normal);
5057
+ flex-shrink: 0;
5058
+ margin-left: var(--dm-space-2);
5059
+ }
5060
+
5061
+ .card-collapsed .card-collapse-icon {
5062
+ transform: rotate(-90deg);
5063
+ }
5064
+
5065
+ .card-collapsible .card-body {
5066
+ overflow: hidden;
5067
+ transition: height var(--dm-transition-normal);
5068
+ }
5069
+
5070
+ .card-collapsed .card-body {
5071
+ height: 0 !important;
5072
+ padding-top: 0;
5073
+ padding-bottom: 0;
5074
+ }
5075
+
3241
5076
 
3242
5077
  /* ============================================
3243
5078
  MODAL
@@ -3251,7 +5086,7 @@ code, pre {
3251
5086
  border-radius: var(--dm-radius-lg);
3252
5087
  box-shadow: var(--dm-shadow-xl);
3253
5088
  z-index: 50;
3254
- max-width: 500px;
5089
+ max-width: 700px;
3255
5090
  width: 90%;
3256
5091
  max-height: 90vh;
3257
5092
  overflow: auto;
@@ -3323,6 +5158,23 @@ code, pre {
3323
5158
  max-width: 1140px;
3324
5159
  }
3325
5160
 
5161
+ /* Modal Factory Dialog Sizes */
5162
+ .dm-dialog-small {
5163
+ max-width: 400px !important;
5164
+ }
5165
+
5166
+ .dm-dialog-medium {
5167
+ max-width: 700px !important;
5168
+ }
5169
+
5170
+ .dm-dialog-large {
5171
+ max-width: 900px !important;
5172
+ }
5173
+
5174
+ .dm-dialog-xl {
5175
+ max-width: 1200px !important;
5176
+ }
5177
+
3326
5178
 
3327
5179
  /* ============================================
3328
5180
  TABS
@@ -3770,16 +5622,18 @@ textarea:not([class])::placeholder {
3770
5622
  .form-check {
3771
5623
  display: flex;
3772
5624
  align-items: flex-start;
3773
- gap: var(--dm-space-2);
5625
+ gap: var(--dm-space-3);
3774
5626
  cursor: pointer;
3775
5627
  position: relative;
5628
+ padding: var(--dm-space-1) 0;
5629
+ min-height: 1.5rem;
3776
5630
  }
3777
5631
 
3778
5632
  .form-check-input {
3779
5633
  appearance: none;
3780
5634
  -webkit-appearance: none;
3781
- width: 1.125rem;
3782
- height: 1.125rem;
5635
+ width: 1.25rem;
5636
+ height: 1.25rem;
3783
5637
  border: 2px solid var(--dm-border, var(--dm-gray-400));
3784
5638
  border-radius: var(--dm-radius-sm);
3785
5639
  background-color: var(--dm-surface, var(--dm-white));
@@ -3787,6 +5641,8 @@ textarea:not([class])::placeholder {
3787
5641
  position: relative;
3788
5642
  flex-shrink: 0;
3789
5643
  margin-top: 0.125rem;
5644
+ margin-right: var(--dm-space-1);
5645
+ padding: 0;
3790
5646
  transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
3791
5647
  }
3792
5648
 
@@ -3808,10 +5664,10 @@ textarea:not([class])::placeholder {
3808
5664
  .form-check-input:checked::after {
3809
5665
  content: '';
3810
5666
  position: absolute;
3811
- left: 5px;
3812
- top: 2px;
3813
- width: 5px;
3814
- height: 9px;
5667
+ left: 5.5px;
5668
+ top: 2.5px;
5669
+ width: 6px;
5670
+ height: 10px;
3815
5671
  border: solid var(--dm-white);
3816
5672
  border-width: 0 2px 2px 0;
3817
5673
  transform: rotate(45deg);
@@ -3830,6 +5686,9 @@ textarea:not([class])::placeholder {
3830
5686
  .form-check-label {
3831
5687
  cursor: pointer;
3832
5688
  color: var(--dm-text, var(--dm-gray-900));
5689
+ line-height: 1.5;
5690
+ padding-top: 0.125rem;
5691
+ user-select: none;
3833
5692
  }
3834
5693
 
3835
5694
  /* Custom Radio */
@@ -7854,146 +9713,439 @@ code {
7854
9713
  transform: translateX(-50%);
7855
9714
  }
7856
9715
 
7857
- .dm-timeline-centered .dm-timeline-item {
7858
- width: 50%;
7859
- padding-right: var(--dm-space-8);
7860
- justify-content: flex-end;
9716
+ .dm-timeline-centered .dm-timeline-item {
9717
+ width: 50%;
9718
+ padding-right: var(--dm-space-8);
9719
+ justify-content: flex-end;
9720
+ }
9721
+
9722
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) {
9723
+ left: 50%;
9724
+ padding-left: var(--dm-space-8);
9725
+ padding-right: 0;
9726
+ justify-content: flex-start;
9727
+ }
9728
+
9729
+ .dm-timeline-centered .dm-timeline-year {
9730
+ order: 2;
9731
+ margin-left: var(--dm-space-6);
9732
+ margin-right: 0;
9733
+ }
9734
+
9735
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
9736
+ order: 0;
9737
+ margin-left: 0;
9738
+ margin-right: var(--dm-space-6);
9739
+ }
9740
+
9741
+ /* Horizontal Layout */
9742
+ .dm-timeline-horizontal {
9743
+ display: flex;
9744
+ overflow-x: auto;
9745
+ padding-bottom: var(--dm-space-4);
9746
+ max-width: 100%;
9747
+ gap: var(--dm-space-6);
9748
+ }
9749
+
9750
+ .dm-timeline-horizontal .dm-timeline-item {
9751
+ flex-direction: column;
9752
+ margin-bottom: 0;
9753
+ min-width: 250px;
9754
+ flex-shrink: 0;
9755
+ }
9756
+
9757
+ .dm-timeline-horizontal .dm-timeline-year {
9758
+ width: auto;
9759
+ margin-right: 0;
9760
+ margin-bottom: var(--dm-space-4);
9761
+ }
9762
+
9763
+ /* Theme Variants */
9764
+ .dm-timeline-minimal .dm-timeline-content {
9765
+ box-shadow: none;
9766
+ border: 1px solid var(--dm-gray-200);
9767
+ background: var(--dm-gray-50);
9768
+ }
9769
+
9770
+ .dm-timeline-minimal .dm-timeline-year {
9771
+ background: var(--dm-gray-600);
9772
+ }
9773
+
9774
+ .dm-timeline-corporate .dm-timeline-year {
9775
+ background: var(--dm-slate-700);
9776
+ font-size: var(--dm-font-size-xs);
9777
+ text-transform: uppercase;
9778
+ letter-spacing: 0.05em;
9779
+ }
9780
+
9781
+ .dm-timeline-corporate .dm-timeline-content {
9782
+ background: var(--dm-slate-50);
9783
+ border-color: var(--dm-slate-200);
9784
+ }
9785
+
9786
+ /* Responsive Design */
9787
+ @media (max-width: 768px) {
9788
+ .dm-timeline-centered {
9789
+ /* Switch to vertical layout on mobile */
9790
+ }
9791
+
9792
+ .dm-timeline-centered::before {
9793
+ left: 30px;
9794
+ transform: none;
9795
+ }
9796
+
9797
+ .dm-timeline-centered .dm-timeline-item,
9798
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) {
9799
+ width: 100%;
9800
+ left: 0;
9801
+ padding-left: var(--dm-space-16);
9802
+ padding-right: 0;
9803
+ justify-content: flex-start;
9804
+ }
9805
+
9806
+ .dm-timeline-centered .dm-timeline-year,
9807
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
9808
+ order: 0;
9809
+ margin-right: var(--dm-space-6);
9810
+ margin-left: 0;
9811
+ position: absolute;
9812
+ left: 0;
9813
+ width: 80px;
9814
+ }
9815
+
9816
+ .dm-timeline-horizontal {
9817
+ flex-direction: column;
9818
+ }
9819
+
9820
+ .dm-timeline-horizontal .dm-timeline-item {
9821
+ flex-direction: row;
9822
+ min-width: auto;
9823
+ margin-bottom: var(--dm-space-6);
9824
+ }
9825
+
9826
+ .dm-timeline-horizontal .dm-timeline-year {
9827
+ margin-bottom: 0;
9828
+ margin-right: var(--dm-space-4);
9829
+ width: 100px;
9830
+ }
9831
+ }
9832
+
9833
+ /* Dark Theme Support */
9834
+ [data-theme="dark"] .dm-timeline-content {
9835
+ background: var(--dm-slate-800);
9836
+ border-color: var(--dm-slate-700);
9837
+ color: var(--dm-slate-200);
9838
+ }
9839
+
9840
+ [data-theme="dark"] .dm-timeline-title {
9841
+ color: var(--dm-white);
9842
+ }
9843
+
9844
+ [data-theme="dark"] .dm-timeline-description {
9845
+ color: var(--dm-slate-300);
9846
+ }
9847
+
9848
+ [data-theme="dark"] .dm-timeline-minimal .dm-timeline-content {
9849
+ background: var(--dm-slate-900);
9850
+ border-color: var(--dm-slate-700);
9851
+ }
9852
+
9853
+ [data-theme="dark"] .dm-timeline-corporate .dm-timeline-content {
9854
+ background: var(--dm-slate-800);
9855
+ border-color: var(--dm-slate-600);
9856
+ }
9857
+
9858
+ /* ==============================================
9859
+ Cookie Consent Component
9860
+ ============================================== */
9861
+
9862
+ .dm-cookie-consent {
9863
+ position: fixed;
9864
+ z-index: 9999;
9865
+ font-size: 14px;
9866
+ line-height: 1.5;
9867
+ }
9868
+
9869
+ /* Position variants */
9870
+ .dm-cookie-consent-bottom {
9871
+ bottom: 0;
9872
+ left: 0;
9873
+ right: 0;
9874
+ }
9875
+
9876
+ .dm-cookie-consent-top {
9877
+ top: 0;
9878
+ left: 0;
9879
+ right: 0;
9880
+ }
9881
+
9882
+ .dm-cookie-consent-bottom-left {
9883
+ bottom: 20px;
9884
+ left: 20px;
9885
+ max-width: 400px;
9886
+ }
9887
+
9888
+ .dm-cookie-consent-bottom-right {
9889
+ bottom: 20px;
9890
+ right: 20px;
9891
+ max-width: 400px;
9892
+ }
9893
+
9894
+ .dm-cookie-consent-center-modal {
9895
+ top: 50%;
9896
+ left: 50%;
9897
+ transform: translate(-50%, -50%);
9898
+ max-width: 600px;
9899
+ width: 90%;
9900
+ }
9901
+
9902
+ /* Layout variants */
9903
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9904
+ display: flex;
9905
+ align-items: center;
9906
+ justify-content: space-between;
9907
+ padding: 16px 20px;
9908
+ gap: 20px;
9909
+ }
9910
+
9911
+ .dm-cookie-consent-box .dm-cookie-consent-content {
9912
+ padding: 24px;
9913
+ border-radius: 8px;
9914
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
9915
+ }
9916
+
9917
+ .dm-cookie-consent-modal .dm-cookie-consent-content {
9918
+ padding: 32px;
9919
+ border-radius: 12px;
9920
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
9921
+ }
9922
+
9923
+ /* Theme variants */
9924
+ .dm-cookie-consent-light .dm-cookie-consent-content {
9925
+ background: white;
9926
+ color: #333;
9927
+ border: 1px solid #e5e5e5;
9928
+ }
9929
+
9930
+ .dm-cookie-consent-light a {
9931
+ color: var(--dm-primary);
9932
+ }
9933
+
9934
+ .dm-cookie-consent-dark .dm-cookie-consent-content {
9935
+ background: #1f2937;
9936
+ color: #f3f4f6;
9937
+ border: 1px solid #374151;
9938
+ }
9939
+
9940
+ .dm-cookie-consent-dark a {
9941
+ color: #60a5fa;
9942
+ }
9943
+
9944
+ /* Message styles */
9945
+ .dm-cookie-consent-message {
9946
+ flex: 1;
9947
+ margin-right: 20px;
9948
+ }
9949
+
9950
+ .dm-cookie-consent-message a {
9951
+ text-decoration: underline;
9952
+ margin: 0 4px;
9953
+ }
9954
+
9955
+ .dm-cookie-consent-message a:hover {
9956
+ opacity: 0.8;
9957
+ }
9958
+
9959
+ /* Button styles */
9960
+ .dm-cookie-consent-buttons {
9961
+ display: flex;
9962
+ gap: 12px;
9963
+ flex-shrink: 0;
9964
+ }
9965
+
9966
+ /* Animation */
9967
+ .dm-cookie-consent-animated {
9968
+ transition: all 0.3s ease;
9969
+ }
9970
+
9971
+ .dm-cookie-consent-bottom.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9972
+ transform: translateY(100%);
9973
+ }
9974
+
9975
+ .dm-cookie-consent-top.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9976
+ transform: translateY(-100%);
9977
+ }
9978
+
9979
+ .dm-cookie-consent-bottom-left.dm-cookie-consent-animated:not(.dm-cookie-consent-visible),
9980
+ .dm-cookie-consent-bottom-right.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9981
+ transform: translateY(20px);
9982
+ opacity: 0;
9983
+ }
9984
+
9985
+ .dm-cookie-consent-center-modal.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9986
+ transform: translate(-50%, -50%) scale(0.95);
9987
+ opacity: 0;
9988
+ }
9989
+
9990
+ /* Backdrop */
9991
+ .dm-cookie-consent-backdrop {
9992
+ position: fixed;
9993
+ top: 0;
9994
+ left: 0;
9995
+ right: 0;
9996
+ bottom: 0;
9997
+ background: rgba(0, 0, 0, 0.5);
9998
+ z-index: -1;
9999
+ }
10000
+
10001
+ /* Customize Modal */
10002
+ .dm-cookie-consent-modal {
10003
+ display: none;
10004
+ position: fixed;
10005
+ top: 0;
10006
+ left: 0;
10007
+ right: 0;
10008
+ bottom: 0;
10009
+ z-index: 10000;
10010
+ align-items: center;
10011
+ justify-content: center;
10012
+ }
10013
+
10014
+ .dm-cookie-consent-modal-backdrop {
10015
+ position: absolute;
10016
+ top: 0;
10017
+ left: 0;
10018
+ right: 0;
10019
+ bottom: 0;
10020
+ background: rgba(0, 0, 0, 0.5);
10021
+ }
10022
+
10023
+ .dm-cookie-consent-modal-content {
10024
+ position: relative;
10025
+ background: white;
10026
+ border-radius: 12px;
10027
+ max-width: 600px;
10028
+ width: 90%;
10029
+ max-height: 80vh;
10030
+ overflow: auto;
10031
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
7861
10032
  }
7862
10033
 
7863
- .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7864
- left: 50%;
7865
- padding-left: var(--dm-space-8);
7866
- padding-right: 0;
7867
- justify-content: flex-start;
10034
+ .dm-cookie-consent-modal-header {
10035
+ padding: 24px;
10036
+ border-bottom: 1px solid #e5e5e5;
10037
+ display: flex;
10038
+ justify-content: space-between;
10039
+ align-items: center;
7868
10040
  }
7869
10041
 
7870
- .dm-timeline-centered .dm-timeline-year {
7871
- order: 2;
7872
- margin-left: var(--dm-space-6);
7873
- margin-right: 0;
10042
+ .dm-cookie-consent-modal-header h3 {
10043
+ margin: 0;
10044
+ font-size: 20px;
10045
+ font-weight: 600;
7874
10046
  }
7875
10047
 
7876
- .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7877
- order: 0;
7878
- margin-left: 0;
7879
- margin-right: var(--dm-space-6);
10048
+ .dm-cookie-consent-modal-close {
10049
+ background: none;
10050
+ border: none;
10051
+ font-size: 24px;
10052
+ cursor: pointer;
10053
+ color: #666;
10054
+ padding: 0;
10055
+ width: 32px;
10056
+ height: 32px;
10057
+ display: flex;
10058
+ align-items: center;
10059
+ justify-content: center;
10060
+ border-radius: 4px;
10061
+ transition: all 0.2s;
7880
10062
  }
7881
10063
 
7882
- /* Horizontal Layout */
7883
- .dm-timeline-horizontal {
7884
- display: flex;
7885
- overflow-x: auto;
7886
- padding-bottom: var(--dm-space-4);
7887
- max-width: 100%;
7888
- gap: var(--dm-space-6);
10064
+ .dm-cookie-consent-modal-close:hover {
10065
+ background: #f5f5f5;
7889
10066
  }
7890
10067
 
7891
- .dm-timeline-horizontal .dm-timeline-item {
7892
- flex-direction: column;
7893
- margin-bottom: 0;
7894
- min-width: 250px;
7895
- flex-shrink: 0;
10068
+ .dm-cookie-consent-modal-body {
10069
+ padding: 24px;
7896
10070
  }
7897
10071
 
7898
- .dm-timeline-horizontal .dm-timeline-year {
7899
- width: auto;
7900
- margin-right: 0;
7901
- margin-bottom: var(--dm-space-4);
10072
+ .dm-cookie-consent-category {
10073
+ margin-bottom: 20px;
10074
+ padding-bottom: 20px;
10075
+ border-bottom: 1px solid #e5e5e5;
7902
10076
  }
7903
10077
 
7904
- /* Theme Variants */
7905
- .dm-timeline-minimal .dm-timeline-content {
7906
- box-shadow: none;
7907
- border: 1px solid var(--dm-gray-200);
7908
- background: var(--dm-gray-50);
10078
+ .dm-cookie-consent-category:last-child {
10079
+ border-bottom: none;
10080
+ margin-bottom: 0;
10081
+ padding-bottom: 0;
7909
10082
  }
7910
10083
 
7911
- .dm-timeline-minimal .dm-timeline-year {
7912
- background: var(--dm-gray-600);
10084
+ .dm-cookie-consent-category-label {
10085
+ display: flex;
10086
+ align-items: flex-start;
10087
+ cursor: pointer;
7913
10088
  }
7914
10089
 
7915
- .dm-timeline-corporate .dm-timeline-year {
7916
- background: var(--dm-slate-700);
7917
- font-size: var(--dm-font-size-xs);
7918
- text-transform: uppercase;
7919
- letter-spacing: 0.05em;
10090
+ .dm-cookie-consent-category-toggle {
10091
+ margin-right: 12px;
10092
+ margin-top: 2px;
7920
10093
  }
7921
10094
 
7922
- .dm-timeline-corporate .dm-timeline-content {
7923
- background: var(--dm-slate-50);
7924
- border-color: var(--dm-slate-200);
10095
+ .dm-cookie-consent-category-toggle:disabled {
10096
+ cursor: not-allowed;
10097
+ opacity: 0.5;
7925
10098
  }
7926
10099
 
7927
- /* Responsive Design */
7928
- @media (max-width: 768px) {
7929
- .dm-timeline-centered {
7930
- /* Switch to vertical layout on mobile */
7931
- }
7932
-
7933
- .dm-timeline-centered::before {
7934
- left: 30px;
7935
- transform: none;
7936
- }
7937
-
7938
- .dm-timeline-centered .dm-timeline-item,
7939
- .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7940
- width: 100%;
7941
- left: 0;
7942
- padding-left: var(--dm-space-16);
7943
- padding-right: 0;
7944
- justify-content: flex-start;
7945
- }
7946
-
7947
- .dm-timeline-centered .dm-timeline-year,
7948
- .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7949
- order: 0;
7950
- margin-right: var(--dm-space-6);
7951
- margin-left: 0;
7952
- position: absolute;
7953
- left: 0;
7954
- width: 80px;
7955
- }
7956
-
7957
- .dm-timeline-horizontal {
7958
- flex-direction: column;
7959
- }
7960
-
7961
- .dm-timeline-horizontal .dm-timeline-item {
7962
- flex-direction: row;
7963
- min-width: auto;
7964
- margin-bottom: var(--dm-space-6);
7965
- }
7966
-
7967
- .dm-timeline-horizontal .dm-timeline-year {
7968
- margin-bottom: 0;
7969
- margin-right: var(--dm-space-4);
7970
- width: 100px;
7971
- }
10100
+ .dm-cookie-consent-category-info {
10101
+ flex: 1;
7972
10102
  }
7973
10103
 
7974
- /* Dark Theme Support */
7975
- [data-theme="dark"] .dm-timeline-content {
7976
- background: var(--dm-slate-800);
7977
- border-color: var(--dm-slate-700);
7978
- color: var(--dm-slate-200);
10104
+ .dm-cookie-consent-category-name {
10105
+ font-weight: 500;
10106
+ margin-bottom: 4px;
7979
10107
  }
7980
10108
 
7981
- [data-theme="dark"] .dm-timeline-title {
7982
- color: var(--dm-white);
10109
+ .dm-cookie-consent-required {
10110
+ color: #666;
10111
+ font-size: 12px;
7983
10112
  }
7984
10113
 
7985
- [data-theme="dark"] .dm-timeline-description {
7986
- color: var(--dm-slate-300);
10114
+ .dm-cookie-consent-category-description {
10115
+ color: #666;
10116
+ font-size: 13px;
7987
10117
  }
7988
10118
 
7989
- [data-theme="dark"] .dm-timeline-minimal .dm-timeline-content {
7990
- background: var(--dm-slate-900);
7991
- border-color: var(--dm-slate-700);
10119
+ .dm-cookie-consent-modal-footer {
10120
+ padding: 24px;
10121
+ border-top: 1px solid #e5e5e5;
10122
+ display: flex;
10123
+ justify-content: flex-end;
10124
+ gap: 12px;
7992
10125
  }
7993
10126
 
7994
- [data-theme="dark"] .dm-timeline-corporate .dm-timeline-content {
7995
- background: var(--dm-slate-800);
7996
- border-color: var(--dm-slate-600);
10127
+ /* Responsive */
10128
+ @media (max-width: 640px) {
10129
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
10130
+ flex-direction: column;
10131
+ align-items: stretch;
10132
+ }
10133
+
10134
+ .dm-cookie-consent-message {
10135
+ margin-right: 0;
10136
+ margin-bottom: 16px;
10137
+ }
10138
+
10139
+ .dm-cookie-consent-buttons {
10140
+ flex-direction: column;
10141
+ }
10142
+
10143
+ .dm-cookie-consent-bottom-left,
10144
+ .dm-cookie-consent-bottom-right {
10145
+ left: 10px;
10146
+ right: 10px;
10147
+ max-width: none;
10148
+ }
7997
10149
  }
7998
10150
 
7999
10151
 
@@ -8003,11 +10155,11 @@ code {
8003
10155
  ============================================ */
8004
10156
 
8005
10157
  /*!
8006
- * Domma Themes v0.3.0-alpha.0
10158
+ * Domma Themes v0.5.0-alpha
8007
10159
  * Dynamic Object Manipulation & Modeling API
8008
10160
  * (c) 2026 Darryl Waterhouse & DCBW-IT
8009
- * Built: 2026-01-02T14:32:25.353Z
8010
- * Commit: bc8e519
10161
+ * Built: 2026-01-08T09:15:49.994Z
10162
+ * Commit: ad86642
8011
10163
  */
8012
10164
 
8013
10165
  /**
@@ -11470,5 +13622,218 @@ code {
11470
13622
  --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
11471
13623
 
11472
13624
  }
13625
+ .dm-theme-grayve {
13626
+ color-scheme: dark; /* Slate is typically a dark theme */
13627
+
13628
+ /* Tailwind-based color palette - adapting for grayve */
13629
+ /* Slate (using bootswatch values) */
13630
+ --dm-slate-50: #F8F9FA; /* Off-white */
13631
+ --dm-slate-100: #E9ECEF;
13632
+ --dm-slate-200: #DEE2E6;
13633
+ --dm-slate-300: #CED4DA;
13634
+ --dm-slate-400: #ADB5BD;
13635
+ --dm-slate-500: #6C757D; /* Medium Gray */
13636
+ --dm-slate-600: #495057;
13637
+ --dm-slate-700: #343A40;
13638
+ --dm-slate-800: #212529;
13639
+ --dm-slate-900: #1a1e21; /* Dark Gray */
13640
+ --dm-slate-950: #141619; /* Very Dark Gray */
13641
+
13642
+ /* Blues (for primary/info, etc.) */
13643
+ --dm-blue-50: #e0f7fa;
13644
+ --dm-blue-100: #b2ebf2;
13645
+ --dm-blue-200: #80deea;
13646
+ --dm-blue-300: #4dd0e1;
13647
+ --dm-blue-400: #26c6da;
13648
+ --dm-blue-500: #00bcd4; /* Bootswatch primary might be close to this or lighter */
13649
+ --dm-blue-600: #00acc1;
13650
+ --dm-blue-700: #0097a7;
13651
+ --dm-blue-800: #00838f;
13652
+ --dm-blue-900: #006064;
13653
+ --dm-blue-950: #004d40;
13654
+
13655
+ /* Green (Success) */
13656
+ --dm-green-500: #28a745;
13657
+ --dm-green-400: #49cc61;
13658
+ --dm-green-300: #6fd180;
13659
+ --dm-green-600: #218838;
13660
+
13661
+ /* Red (Danger) */
13662
+ --dm-red-500: #dc3545;
13663
+ --dm-red-400: #e35a67;
13664
+ --dm-red-300: #eb808a;
13665
+ --dm-red-600: #c82333;
13666
+
13667
+ /* Amber (Warning) */
13668
+ --dm-amber-500: #ffc107;
13669
+ --dm-amber-400: #ffcd38;
13670
+ --dm-amber-300: #ffd865;
13671
+ --dm-amber-600: #e0a800;
13672
+
13673
+ /* Sky (Info - often similar to primary but distinct) */
13674
+ --dm-sky-500: #17a2b8;
13675
+ --dm-sky-400: #26d2e9;
13676
+ --dm-sky-300: #51daec;
13677
+ --dm-sky-600: #138496;
13678
+
13679
+ /* Semantic colors */
13680
+ --dm-background: var(--dm-slate-900);
13681
+ --dm-background-alt: var(--dm-slate-800);
13682
+ --dm-surface: var(--dm-slate-800);
13683
+ --dm-surface-raised: var(--dm-slate-700);
13684
+ --dm-surface-overlay: rgba(0, 0, 0, 0.7);
13685
+
13686
+ /* Text */
13687
+ --dm-text: var(--dm-slate-200);
13688
+ --dm-text-secondary: var(--dm-slate-400);
13689
+ --dm-text-muted: var(--dm-slate-500);
13690
+ --dm-text-disabled: var(--dm-slate-600);
13691
+ --dm-text-inverse: var(--dm-slate-900);
13692
+
13693
+ /* Borders */
13694
+ --dm-border: var(--dm-slate-700);
13695
+ --dm-border-light: var(--dm-slate-800);
13696
+ --dm-border-dark: var(--dm-slate-600);
13697
+ --dm-border-focus: var(--dm-blue-500); /* Use a vibrant blue for focus */
13698
+ --dm-focus-ring: rgba(0, 188, 212, 0.3); /* Based on dm-blue-500 */
13699
+ --dm-focus-ring-danger: rgba(220, 53, 69, 0.3); /* Based on dm-red-500 */
13700
+
13701
+ /* Interactive States */
13702
+ --dm-hover-bg: rgba(255, 255, 255, 0.07);
13703
+ --dm-active-bg: rgba(255, 255, 255, 0.1);
13704
+ --dm-selected-bg: var(--dm-blue-600);
13705
+ --dm-disabled-opacity: 0.4;
13706
+
13707
+ /* Brand Colors */
13708
+ --dm-primary: var(--dm-blue-500);
13709
+ --dm-primary-dark: var(--dm-blue-700);
13710
+ --dm-primary-light: var(--dm-blue-300);
13711
+ --dm-primary-hover: var(--dm-blue-400);
13712
+ --dm-primary-active: var(--dm-blue-600);
13713
+
13714
+ --dm-secondary: var(--dm-slate-500);
13715
+ --dm-secondary-hover: var(--dm-slate-400);
13716
+ --dm-secondary-active: var(--dm-slate-300);
13717
+
13718
+ /* Status Colors */
13719
+ --dm-success: var(--dm-green-500);
13720
+ --dm-success-hover: var(--dm-green-400);
13721
+ --dm-success-active: var(--dm-green-600);
13722
+ --dm-success-light: rgba(40, 167, 69, 0.2);
13723
+ --dm-success-dark: var(--dm-green-600);
13724
+
13725
+ --dm-danger: var(--dm-red-500);
13726
+ --dm-danger-hover: var(--dm-red-400);
13727
+ --dm-danger-active: var(--dm-red-600);
13728
+ --dm-danger-light: rgba(220, 53, 69, 0.2);
13729
+ --dm-danger-dark: var(--dm-red-600);
13730
+
13731
+ --dm-warning: var(--dm-amber-400);
13732
+ --dm-warning-hover: var(--dm-amber-300);
13733
+ --dm-warning-active: var(--dm-amber-500);
13734
+ --dm-warning-text: var(--dm-amber-900);
13735
+ --dm-warning-light: rgba(255, 193, 7, 0.2);
13736
+ --dm-warning-dark: var(--dm-amber-600);
13737
+
13738
+ --dm-info: var(--dm-sky-500);
13739
+ --dm-info-hover: var(--dm-sky-400);
13740
+ --dm-info-active: var(--dm-sky-600);
13741
+ --dm-info-light: rgba(23, 162, 184, 0.2);
13742
+ --dm-info-dark: var(--dm-sky-600);
13743
+
13744
+ /* Background Tints */
13745
+ --dm-primary-bg: rgba(0, 188, 212, 0.15);
13746
+ --dm-secondary-bg: rgba(108, 117, 125, 0.15);
13747
+ --dm-success-bg: rgba(40, 167, 69, 0.15);
13748
+ --dm-danger-bg: rgba(220, 53, 69, 0.15);
13749
+ --dm-warning-bg: rgba(255, 193, 7, 0.15);
13750
+ --dm-info-bg: rgba(23, 162, 184, 0.15);
13751
+
13752
+ /* Semantic Surface Colors */
13753
+ --dm-surface-secondary: var(--dm-slate-900);
13754
+ --dm-card-bg: var(--dm-slate-800);
13755
+ --dm-card-border: var(--dm-slate-700);
13756
+
13757
+ /* Legacy color names (kept for backwards compatibility) */
13758
+ --dm-light: var(--dm-slate-200);
13759
+ --dm-dark: var(--dm-slate-800);
13760
+ --dm-white: #ffffff;
13761
+ --dm-black: #000000;
13762
+
13763
+ /* Grays (mapped to Slate) */
13764
+ --dm-gray-50: var(--dm-slate-50);
13765
+ --dm-gray-100: var(--dm-slate-100);
13766
+ --dm-gray-200: var(--dm-slate-200);
13767
+ --dm-gray-300: var(--dm-slate-300);
13768
+ --dm-gray-400: var(--dm-slate-400);
13769
+ --dm-gray-500: var(--dm-slate-500);
13770
+ --dm-gray-600: var(--dm-slate-600);
13771
+ --dm-gray-700: var(--dm-slate-700);
13772
+ --dm-gray-800: var(--dm-slate-800);
13773
+ --dm-gray-900: var(--dm-slate-900);
13774
+ --dm-gray-950: var(--dm-slate-950);
13775
+
13776
+ /* Component-specific variables */
13777
+ --dm-input-bg: var(--dm-surface);
13778
+ --dm-input-border: var(--dm-border-dark);
13779
+ --dm-input-text: var(--dm-text);
13780
+ --dm-input-placeholder: var(--dm-text-muted);
13781
+ --dm-input-focus-border: var(--dm-primary);
13782
+ --dm-input-disabled-bg: var(--dm-slate-800);
13783
+
13784
+ --dm-table-border: var(--dm-border);
13785
+ --dm-table-hover-bg: var(--dm-hover-bg);
13786
+ --dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
13787
+
13788
+ --dm-navbar-bg: var(--dm-surface);
13789
+ --dm-navbar-text: var(--dm-text);
13790
+ --dm-navbar-border: var(--dm-border);
13791
+
13792
+ --dm-dropdown-bg: var(--dm-surface-raised);
13793
+ --dm-dropdown-border: var(--dm-border);
13794
+ --dm-dropdown-item-hover: var(--dm-hover-bg);
13795
+ --dm-dropdown-item-active: var(--dm-selected-bg);
13796
+
13797
+ --dm-sidebar-bg: var(--dm-surface);
13798
+ --dm-sidebar-border: var(--dm-border);
13799
+ --dm-sidebar-item-hover: var(--dm-hover-bg);
13800
+ --dm-sidebar-item-active: var(--dm-selected-bg);
13801
+
13802
+ --dm-autocomplete-bg: var(--dm-surface);
13803
+ --dm-autocomplete-border: var(--dm-border);
13804
+ --dm-autocomplete-shadow: var(--dm-shadow-md);
13805
+ --dm-autocomplete-item-hover: var(--dm-hover-bg);
13806
+ --dm-autocomplete-item-active: var(--dm-selected-bg);
13807
+ --dm-autocomplete-highlight: var(--dm-primary-light);
13808
+
13809
+ --dm-pillbox-bg: var(--dm-surface);
13810
+ --dm-pillbox-border: var(--dm-border);
13811
+ --dm-pill-bg: var(--dm-gray-700); /* Darker pill background for dark theme */
13812
+ --dm-pill-color: var(--dm-text);
13813
+ --dm-pill-hover-bg: var(--dm-gray-600);
13814
+
13815
+ --dm-tab-border: var(--dm-border);
13816
+ --dm-tab-hover-bg: var(--dm-hover-bg);
13817
+ --dm-tab-active-border: var(--dm-primary);
13818
+ --dm-tab-active-text: var(--dm-primary);
13819
+
13820
+ --dm-accordion-border: var(--dm-border);
13821
+ --dm-accordion-header-hover: var(--dm-hover-bg);
13822
+ }
13823
+
13824
+ /* Syntax highlighting tokens for grayve (assuming similar to dark theme) */
13825
+ .dm-theme-grayve .code-block .syntax-keyword {
13826
+ color: #c792ea; /* Purple */
13827
+ font-weight: 500;
13828
+ }
13829
+
13830
+ .dm-theme-grayve .code-block .syntax-string,
13831
+ .dm-theme-grayve .code-block .syntax-template-string {
13832
+ color: #c3e88d; /* Green */
13833
+ }
13834
+
13835
+ .dm-theme-grayve .code-block .syntax-function {
13836
+ color: #82aaff; /* Light Blue */
13837
+ }
11473
13838
 
11474
13839