domma-js 0.3.1-alpha → 0.5.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.
@@ -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-06T00:30:49.500Z
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-06T00:30:49.167Z
237
+ * Commit: 72b7845
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);
@@ -2205,6 +2998,63 @@ code, pre {
2205
2998
  cursor: pointer;
2206
2999
  }
2207
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
+
2208
3058
  /* ============================================
2209
3059
  COMPONENT: Badge
2210
3060
  ============================================ */
@@ -2379,52 +3229,991 @@ code, pre {
2379
3229
  --dm-code-bg: var(--dm-slate-900);
2380
3230
  --dm-code-text: var(--dm-red-300);
2381
3231
 
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);
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));
4097
+ }
4098
+
4099
+ .drop-shadow-2xl {
4100
+ filter: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
4101
+ }
4102
+
4103
+ .drop-shadow-none {
4104
+ filter: drop-shadow(0 0 #0000);
4105
+ }
4106
+
4107
+ /* Backdrop Blur */
4108
+
4109
+ .backdrop-blur-none {
4110
+ backdrop-filter: blur(0);
4111
+ }
4112
+
4113
+ .backdrop-blur-sm {
4114
+ backdrop-filter: blur(4px);
4115
+ }
4116
+
4117
+ .backdrop-blur {
4118
+ backdrop-filter: blur(8px);
4119
+ }
4120
+
4121
+ .backdrop-blur-md {
4122
+ backdrop-filter: blur(12px);
4123
+ }
4124
+
4125
+ .backdrop-blur-lg {
4126
+ backdrop-filter: blur(16px);
4127
+ }
4128
+
4129
+ .backdrop-blur-xl {
4130
+ backdrop-filter: blur(24px);
4131
+ }
4132
+
4133
+ .backdrop-blur-2xl {
4134
+ backdrop-filter: blur(40px);
4135
+ }
4136
+
4137
+ .backdrop-blur-3xl {
4138
+ backdrop-filter: blur(64px);
4139
+ }
4140
+
4141
+ /* Backdrop Brightness */
4142
+
4143
+ .backdrop-brightness-50 {
4144
+ backdrop-filter: brightness(0.5);
4145
+ }
4146
+
4147
+ .backdrop-brightness-75 {
4148
+ backdrop-filter: brightness(0.75);
4149
+ }
4150
+
4151
+ .backdrop-brightness-90 {
4152
+ backdrop-filter: brightness(0.9);
4153
+ }
4154
+
4155
+ .backdrop-brightness-100 {
4156
+ backdrop-filter: brightness(1);
4157
+ }
4158
+
4159
+ .backdrop-brightness-110 {
4160
+ backdrop-filter: brightness(1.1);
4161
+ }
4162
+
4163
+ .backdrop-brightness-125 {
4164
+ backdrop-filter: brightness(1.25);
4165
+ }
4166
+
4167
+ .backdrop-brightness-150 {
4168
+ backdrop-filter: brightness(1.5);
4169
+ }
4170
+
4171
+ /* Backdrop Saturate */
4172
+
4173
+ .backdrop-saturate-0 {
4174
+ backdrop-filter: saturate(0);
4175
+ }
4176
+
4177
+ .backdrop-saturate-50 {
4178
+ backdrop-filter: saturate(0.5);
4179
+ }
4180
+
4181
+ .backdrop-saturate-100 {
4182
+ backdrop-filter: saturate(1);
4183
+ }
4184
+
4185
+ .backdrop-saturate-150 {
4186
+ backdrop-filter: saturate(1.5);
4187
+ }
4188
+
4189
+ .backdrop-saturate-200 {
4190
+ backdrop-filter: saturate(2);
4191
+ }
4192
+
4193
+ /* Combined Filter Presets */
4194
+
4195
+ .filter-none {
4196
+ filter: none;
4197
+ }
4198
+
4199
+ .filter-vintage {
4200
+ filter: sepia(0.5) contrast(1.2) brightness(0.9);
4201
+ }
2392
4202
 
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);
4203
+ .filter-dramatic {
4204
+ filter: contrast(1.5) saturate(1.3);
4205
+ }
2406
4206
 
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);
4207
+ .filter-soft {
4208
+ filter: blur(2px) brightness(1.1);
4209
+ }
2412
4210
 
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);
4211
+ .filter-cold {
4212
+ filter: saturate(0.8) hue-rotate(15deg);
4213
+ }
4214
+
4215
+ .filter-warm {
4216
+ filter: saturate(1.2) hue-rotate(-15deg);
2428
4217
  }
2429
4218
 
2430
4219
 
@@ -2434,11 +4223,11 @@ code, pre {
2434
4223
  ============================================ */
2435
4224
 
2436
4225
  /*!
2437
- * Domma Grid CSS v0.3.0-alpha.0
4226
+ * Domma Grid CSS v0.5.0-alpha
2438
4227
  * Dynamic Object Manipulation & Modeling API
2439
4228
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2440
- * Built: 2026-01-02T14:32:25.394Z
2441
- * Commit: bc8e519
4229
+ * Built: 2026-01-06T00:30:49.174Z
4230
+ * Commit: 72b7845
2442
4231
  */
2443
4232
 
2444
4233
  /**
@@ -2979,11 +4768,11 @@ code, pre {
2979
4768
  ============================================ */
2980
4769
 
2981
4770
  /*!
2982
- * Domma Elements CSS v0.3.0-alpha.0
4771
+ * Domma Elements CSS v0.5.0-alpha
2983
4772
  * Dynamic Object Manipulation & Modeling API
2984
4773
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2985
- * Built: 2026-01-02T14:32:25.401Z
2986
- * Commit: bc8e519
4774
+ * Built: 2026-01-06T00:30:49.181Z
4775
+ * Commit: 72b7845
2987
4776
  */
2988
4777
 
2989
4778
  /**
@@ -3238,6 +5027,40 @@ code, pre {
3238
5027
  text-decoration: none;
3239
5028
  }
3240
5029
 
5030
+ /* Collapsible card styles */
5031
+ .card-collapsible .card-header {
5032
+ cursor: pointer;
5033
+ display: flex;
5034
+ align-items: center;
5035
+ justify-content: space-between;
5036
+ user-select: none;
5037
+ }
5038
+
5039
+ .card-header-content {
5040
+ flex: 1;
5041
+ }
5042
+
5043
+ .card-collapse-icon {
5044
+ transition: transform var(--dm-transition-normal);
5045
+ flex-shrink: 0;
5046
+ margin-left: var(--dm-space-2);
5047
+ }
5048
+
5049
+ .card-collapsed .card-collapse-icon {
5050
+ transform: rotate(-90deg);
5051
+ }
5052
+
5053
+ .card-collapsible .card-body {
5054
+ overflow: hidden;
5055
+ transition: height var(--dm-transition-normal);
5056
+ }
5057
+
5058
+ .card-collapsed .card-body {
5059
+ height: 0 !important;
5060
+ padding-top: 0;
5061
+ padding-bottom: 0;
5062
+ }
5063
+
3241
5064
 
3242
5065
  /* ============================================
3243
5066
  MODAL
@@ -7929,12 +9752,12 @@ code {
7929
9752
  .dm-timeline-centered {
7930
9753
  /* Switch to vertical layout on mobile */
7931
9754
  }
7932
-
9755
+
7933
9756
  .dm-timeline-centered::before {
7934
9757
  left: 30px;
7935
9758
  transform: none;
7936
9759
  }
7937
-
9760
+
7938
9761
  .dm-timeline-centered .dm-timeline-item,
7939
9762
  .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7940
9763
  width: 100%;
@@ -7943,7 +9766,7 @@ code {
7943
9766
  padding-right: 0;
7944
9767
  justify-content: flex-start;
7945
9768
  }
7946
-
9769
+
7947
9770
  .dm-timeline-centered .dm-timeline-year,
7948
9771
  .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7949
9772
  order: 0;
@@ -7953,17 +9776,17 @@ code {
7953
9776
  left: 0;
7954
9777
  width: 80px;
7955
9778
  }
7956
-
9779
+
7957
9780
  .dm-timeline-horizontal {
7958
9781
  flex-direction: column;
7959
9782
  }
7960
-
9783
+
7961
9784
  .dm-timeline-horizontal .dm-timeline-item {
7962
9785
  flex-direction: row;
7963
9786
  min-width: auto;
7964
9787
  margin-bottom: var(--dm-space-6);
7965
9788
  }
7966
-
9789
+
7967
9790
  .dm-timeline-horizontal .dm-timeline-year {
7968
9791
  margin-bottom: 0;
7969
9792
  margin-right: var(--dm-space-4);
@@ -7996,6 +9819,299 @@ code {
7996
9819
  border-color: var(--dm-slate-600);
7997
9820
  }
7998
9821
 
9822
+ /* ==============================================
9823
+ Cookie Consent Component
9824
+ ============================================== */
9825
+
9826
+ .dm-cookie-consent {
9827
+ position: fixed;
9828
+ z-index: 9999;
9829
+ font-size: 14px;
9830
+ line-height: 1.5;
9831
+ }
9832
+
9833
+ /* Position variants */
9834
+ .dm-cookie-consent-bottom {
9835
+ bottom: 0;
9836
+ left: 0;
9837
+ right: 0;
9838
+ }
9839
+
9840
+ .dm-cookie-consent-top {
9841
+ top: 0;
9842
+ left: 0;
9843
+ right: 0;
9844
+ }
9845
+
9846
+ .dm-cookie-consent-bottom-left {
9847
+ bottom: 20px;
9848
+ left: 20px;
9849
+ max-width: 400px;
9850
+ }
9851
+
9852
+ .dm-cookie-consent-bottom-right {
9853
+ bottom: 20px;
9854
+ right: 20px;
9855
+ max-width: 400px;
9856
+ }
9857
+
9858
+ .dm-cookie-consent-center-modal {
9859
+ top: 50%;
9860
+ left: 50%;
9861
+ transform: translate(-50%, -50%);
9862
+ max-width: 600px;
9863
+ width: 90%;
9864
+ }
9865
+
9866
+ /* Layout variants */
9867
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9868
+ display: flex;
9869
+ align-items: center;
9870
+ justify-content: space-between;
9871
+ padding: 16px 20px;
9872
+ gap: 20px;
9873
+ }
9874
+
9875
+ .dm-cookie-consent-box .dm-cookie-consent-content {
9876
+ padding: 24px;
9877
+ border-radius: 8px;
9878
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
9879
+ }
9880
+
9881
+ .dm-cookie-consent-modal .dm-cookie-consent-content {
9882
+ padding: 32px;
9883
+ border-radius: 12px;
9884
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
9885
+ }
9886
+
9887
+ /* Theme variants */
9888
+ .dm-cookie-consent-light .dm-cookie-consent-content {
9889
+ background: white;
9890
+ color: #333;
9891
+ border: 1px solid #e5e5e5;
9892
+ }
9893
+
9894
+ .dm-cookie-consent-light a {
9895
+ color: var(--dm-primary);
9896
+ }
9897
+
9898
+ .dm-cookie-consent-dark .dm-cookie-consent-content {
9899
+ background: #1f2937;
9900
+ color: #f3f4f6;
9901
+ border: 1px solid #374151;
9902
+ }
9903
+
9904
+ .dm-cookie-consent-dark a {
9905
+ color: #60a5fa;
9906
+ }
9907
+
9908
+ /* Message styles */
9909
+ .dm-cookie-consent-message {
9910
+ flex: 1;
9911
+ margin-right: 20px;
9912
+ }
9913
+
9914
+ .dm-cookie-consent-message a {
9915
+ text-decoration: underline;
9916
+ margin: 0 4px;
9917
+ }
9918
+
9919
+ .dm-cookie-consent-message a:hover {
9920
+ opacity: 0.8;
9921
+ }
9922
+
9923
+ /* Button styles */
9924
+ .dm-cookie-consent-buttons {
9925
+ display: flex;
9926
+ gap: 12px;
9927
+ flex-shrink: 0;
9928
+ }
9929
+
9930
+ /* Animation */
9931
+ .dm-cookie-consent-animated {
9932
+ transition: all 0.3s ease;
9933
+ }
9934
+
9935
+ .dm-cookie-consent-bottom.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9936
+ transform: translateY(100%);
9937
+ }
9938
+
9939
+ .dm-cookie-consent-top.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9940
+ transform: translateY(-100%);
9941
+ }
9942
+
9943
+ .dm-cookie-consent-bottom-left.dm-cookie-consent-animated:not(.dm-cookie-consent-visible),
9944
+ .dm-cookie-consent-bottom-right.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9945
+ transform: translateY(20px);
9946
+ opacity: 0;
9947
+ }
9948
+
9949
+ .dm-cookie-consent-center-modal.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9950
+ transform: translate(-50%, -50%) scale(0.95);
9951
+ opacity: 0;
9952
+ }
9953
+
9954
+ /* Backdrop */
9955
+ .dm-cookie-consent-backdrop {
9956
+ position: fixed;
9957
+ top: 0;
9958
+ left: 0;
9959
+ right: 0;
9960
+ bottom: 0;
9961
+ background: rgba(0, 0, 0, 0.5);
9962
+ z-index: -1;
9963
+ }
9964
+
9965
+ /* Customize Modal */
9966
+ .dm-cookie-consent-modal {
9967
+ display: none;
9968
+ position: fixed;
9969
+ top: 0;
9970
+ left: 0;
9971
+ right: 0;
9972
+ bottom: 0;
9973
+ z-index: 10000;
9974
+ align-items: center;
9975
+ justify-content: center;
9976
+ }
9977
+
9978
+ .dm-cookie-consent-modal-backdrop {
9979
+ position: absolute;
9980
+ top: 0;
9981
+ left: 0;
9982
+ right: 0;
9983
+ bottom: 0;
9984
+ background: rgba(0, 0, 0, 0.5);
9985
+ }
9986
+
9987
+ .dm-cookie-consent-modal-content {
9988
+ position: relative;
9989
+ background: white;
9990
+ border-radius: 12px;
9991
+ max-width: 600px;
9992
+ width: 90%;
9993
+ max-height: 80vh;
9994
+ overflow: auto;
9995
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
9996
+ }
9997
+
9998
+ .dm-cookie-consent-modal-header {
9999
+ padding: 24px;
10000
+ border-bottom: 1px solid #e5e5e5;
10001
+ display: flex;
10002
+ justify-content: space-between;
10003
+ align-items: center;
10004
+ }
10005
+
10006
+ .dm-cookie-consent-modal-header h3 {
10007
+ margin: 0;
10008
+ font-size: 20px;
10009
+ font-weight: 600;
10010
+ }
10011
+
10012
+ .dm-cookie-consent-modal-close {
10013
+ background: none;
10014
+ border: none;
10015
+ font-size: 24px;
10016
+ cursor: pointer;
10017
+ color: #666;
10018
+ padding: 0;
10019
+ width: 32px;
10020
+ height: 32px;
10021
+ display: flex;
10022
+ align-items: center;
10023
+ justify-content: center;
10024
+ border-radius: 4px;
10025
+ transition: all 0.2s;
10026
+ }
10027
+
10028
+ .dm-cookie-consent-modal-close:hover {
10029
+ background: #f5f5f5;
10030
+ }
10031
+
10032
+ .dm-cookie-consent-modal-body {
10033
+ padding: 24px;
10034
+ }
10035
+
10036
+ .dm-cookie-consent-category {
10037
+ margin-bottom: 20px;
10038
+ padding-bottom: 20px;
10039
+ border-bottom: 1px solid #e5e5e5;
10040
+ }
10041
+
10042
+ .dm-cookie-consent-category:last-child {
10043
+ border-bottom: none;
10044
+ margin-bottom: 0;
10045
+ padding-bottom: 0;
10046
+ }
10047
+
10048
+ .dm-cookie-consent-category-label {
10049
+ display: flex;
10050
+ align-items: flex-start;
10051
+ cursor: pointer;
10052
+ }
10053
+
10054
+ .dm-cookie-consent-category-toggle {
10055
+ margin-right: 12px;
10056
+ margin-top: 2px;
10057
+ }
10058
+
10059
+ .dm-cookie-consent-category-toggle:disabled {
10060
+ cursor: not-allowed;
10061
+ opacity: 0.5;
10062
+ }
10063
+
10064
+ .dm-cookie-consent-category-info {
10065
+ flex: 1;
10066
+ }
10067
+
10068
+ .dm-cookie-consent-category-name {
10069
+ font-weight: 500;
10070
+ margin-bottom: 4px;
10071
+ }
10072
+
10073
+ .dm-cookie-consent-required {
10074
+ color: #666;
10075
+ font-size: 12px;
10076
+ }
10077
+
10078
+ .dm-cookie-consent-category-description {
10079
+ color: #666;
10080
+ font-size: 13px;
10081
+ }
10082
+
10083
+ .dm-cookie-consent-modal-footer {
10084
+ padding: 24px;
10085
+ border-top: 1px solid #e5e5e5;
10086
+ display: flex;
10087
+ justify-content: flex-end;
10088
+ gap: 12px;
10089
+ }
10090
+
10091
+ /* Responsive */
10092
+ @media (max-width: 640px) {
10093
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
10094
+ flex-direction: column;
10095
+ align-items: stretch;
10096
+ }
10097
+
10098
+ .dm-cookie-consent-message {
10099
+ margin-right: 0;
10100
+ margin-bottom: 16px;
10101
+ }
10102
+
10103
+ .dm-cookie-consent-buttons {
10104
+ flex-direction: column;
10105
+ }
10106
+
10107
+ .dm-cookie-consent-bottom-left,
10108
+ .dm-cookie-consent-bottom-right {
10109
+ left: 10px;
10110
+ right: 10px;
10111
+ max-width: none;
10112
+ }
10113
+ }
10114
+
7999
10115
 
8000
10116
  /* ============================================
8001
10117
  THEME SYSTEM
@@ -8003,11 +10119,11 @@ code {
8003
10119
  ============================================ */
8004
10120
 
8005
10121
  /*!
8006
- * Domma Themes v0.3.0-alpha.0
10122
+ * Domma Themes v0.5.0-alpha
8007
10123
  * Dynamic Object Manipulation & Modeling API
8008
10124
  * (c) 2026 Darryl Waterhouse & DCBW-IT
8009
- * Built: 2026-01-02T14:32:25.353Z
8010
- * Commit: bc8e519
10125
+ * Built: 2026-01-06T00:30:49.133Z
10126
+ * Commit: 72b7845
8011
10127
  */
8012
10128
 
8013
10129
  /**