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,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.3.0-alpha.0
2
+ * Domma Complete 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.779Z
5
+ * Built: 2026-01-06T00:30:49.507Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.3.0-alpha.0
14
+ * Domma Core CSS v0.5.0-alpha
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-01-02T14:32:25.385Z
18
- * Commit: bc8e519
17
+ * Built: 2026-01-06T00:30:49.167Z
18
+ * Commit: 72b7845
19
19
  */
20
20
 
21
21
  /**
@@ -277,6 +277,44 @@
277
277
  --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
278
278
  --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
279
279
 
280
+ /* Glow effects - STRONG AND VIBRANT */
281
+ --dm-glow-sm: 0 0 15px rgba(59, 130, 246, 0.8),
282
+ 0 0 30px rgba(59, 130, 246, 0.6);
283
+ --dm-glow: 0 0 20px rgba(59, 130, 246, 0.9),
284
+ 0 0 40px rgba(59, 130, 246, 0.7),
285
+ 0 0 60px rgba(59, 130, 246, 0.5);
286
+ --dm-glow-md: 0 0 25px rgba(59, 130, 246, 1),
287
+ 0 0 50px rgba(59, 130, 246, 0.8),
288
+ 0 0 75px rgba(59, 130, 246, 0.6);
289
+ --dm-glow-lg: 0 0 30px rgba(59, 130, 246, 1),
290
+ 0 0 60px rgba(59, 130, 246, 0.9),
291
+ 0 0 90px rgba(59, 130, 246, 0.7),
292
+ 0 0 120px rgba(59, 130, 246, 0.5);
293
+ --dm-glow-xl: 0 0 40px rgba(59, 130, 246, 1),
294
+ 0 0 80px rgba(59, 130, 246, 0.9),
295
+ 0 0 120px rgba(59, 130, 246, 0.7),
296
+ 0 0 160px rgba(59, 130, 246, 0.5);
297
+
298
+ /* Colour-specific glows - INTENSE */
299
+ --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 1),
300
+ 0 0 40px rgba(59, 130, 246, 0.8),
301
+ 0 0 60px rgba(59, 130, 246, 0.6);
302
+ --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 1),
303
+ 0 0 40px rgba(139, 92, 246, 0.8),
304
+ 0 0 60px rgba(139, 92, 246, 0.6);
305
+ --dm-glow-success: 0 0 20px rgba(34, 197, 94, 1),
306
+ 0 0 40px rgba(34, 197, 94, 0.8),
307
+ 0 0 60px rgba(34, 197, 94, 0.6);
308
+ --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 1),
309
+ 0 0 40px rgba(245, 158, 11, 0.8),
310
+ 0 0 60px rgba(245, 158, 11, 0.6);
311
+ --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 1),
312
+ 0 0 40px rgba(239, 68, 68, 0.8),
313
+ 0 0 60px rgba(239, 68, 68, 0.6);
314
+ --dm-glow-info: 0 0 20px rgba(14, 165, 233, 1),
315
+ 0 0 40px rgba(14, 165, 233, 0.8),
316
+ 0 0 60px rgba(14, 165, 233, 0.6);
317
+
280
318
  /* ================================================
281
319
  TRANSPARENCY & OPACITY
282
320
  ================================================ */
@@ -1488,6 +1526,505 @@ code, pre {
1488
1526
  transition: text-shadow 0.3s ease;
1489
1527
  }
1490
1528
 
1529
+ .glow-secondary-hover:hover {
1530
+ text-shadow: var(--dm-glow-secondary);
1531
+ transition: text-shadow 0.3s ease;
1532
+ }
1533
+
1534
+ .glow-info-hover:hover {
1535
+ text-shadow: var(--dm-glow-info);
1536
+ transition: text-shadow 0.3s ease;
1537
+ }
1538
+
1539
+ /* ============================================
1540
+ FIREWORKS EFFECTS
1541
+ Realistic particle-based fireworks animations
1542
+ ============================================ */
1543
+
1544
+ /* Firework CSS Variables */
1545
+ :root {
1546
+ --dm-fw-launch-height: 200px;
1547
+ --dm-fw-explosion-size: 150px;
1548
+ --dm-fw-particle-size: 2px;
1549
+ --dm-fw-duration: 3s;
1550
+ --dm-fw-delay: 0s;
1551
+
1552
+ /* Default firework colours - bright, vibrant colours */
1553
+ --dm-fw-color-1: #ffeb3b; /* Bright Yellow */
1554
+ --dm-fw-color-2: #ff4444; /* Bright Red */
1555
+ --dm-fw-color-3: #44ffdd; /* Cyan */
1556
+ --dm-fw-color-4: #4488ff; /* Bright Blue */
1557
+ --dm-fw-color-5: #ff8844; /* Orange */
1558
+ --dm-fw-color-6: #ff44ff; /* Magenta */
1559
+ --dm-fw-color-7: #44ff88; /* Lime */
1560
+ --dm-fw-color-8: #ffff88; /* Light Yellow */
1561
+ }
1562
+
1563
+ /* Base firework container */
1564
+ .firework {
1565
+ position: relative;
1566
+ display: inline-block;
1567
+ pointer-events: none;
1568
+ width: var(--dm-fw-explosion-size);
1569
+ height: calc(var(--dm-fw-launch-height) + var(--dm-fw-explosion-size));
1570
+ overflow: visible;
1571
+ }
1572
+
1573
+ /* Rocket trail that launches upward */
1574
+ .firework-launch {
1575
+ position: absolute;
1576
+ bottom: 0;
1577
+ left: 50%;
1578
+ width: 3px;
1579
+ height: 8px;
1580
+ background: linear-gradient(to top, transparent, #ffa500, #fff);
1581
+ transform: translateX(-50%);
1582
+ animation: dm-fw-launch 1s ease-out forwards;
1583
+ }
1584
+
1585
+ .firework-launch::after {
1586
+ content: '';
1587
+ position: absolute;
1588
+ bottom: -10px;
1589
+ left: 50%;
1590
+ width: 2px;
1591
+ height: 20px;
1592
+ background: linear-gradient(to top, transparent, rgba(255, 165, 0, 0.3));
1593
+ transform: translateX(-50%);
1594
+ filter: blur(2px);
1595
+ }
1596
+
1597
+ /* Explosion particles */
1598
+ .firework-particles {
1599
+ position: absolute;
1600
+ top: 0;
1601
+ left: 50%;
1602
+ width: var(--dm-fw-explosion-size);
1603
+ height: var(--dm-fw-explosion-size);
1604
+ transform: translateX(-50%);
1605
+ opacity: 0;
1606
+ animation-delay: 1s; /* Wait for launch */
1607
+ }
1608
+
1609
+ /* Main burst - creates many particles using box-shadow */
1610
+ .firework-burst .firework-particles::before {
1611
+ content: '';
1612
+ position: absolute;
1613
+ top: 50%;
1614
+ left: 50%;
1615
+ width: var(--dm-fw-particle-size);
1616
+ height: var(--dm-fw-particle-size);
1617
+ background: var(--dm-fw-color-1);
1618
+ border-radius: 50%;
1619
+ transform: translate(-50%, -50%);
1620
+ animation: dm-fw-explode 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1621
+ box-shadow: /* Ring 1 - 8 particles at 30° intervals */ 0 0 3px var(--dm-fw-color-1),
1622
+ 0 -20px 0 0 var(--dm-fw-color-1),
1623
+ 14px -14px 0 0 var(--dm-fw-color-2),
1624
+ 20px 0 0 0 var(--dm-fw-color-3),
1625
+ 14px 14px 0 0 var(--dm-fw-color-4),
1626
+ 0 20px 0 0 var(--dm-fw-color-5),
1627
+ -14px 14px 0 0 var(--dm-fw-color-6),
1628
+ -20px 0 0 0 var(--dm-fw-color-7),
1629
+ -14px -14px 0 0 var(--dm-fw-color-8),
1630
+ /* Ring 2 - 12 particles */ 0 -35px 0 0 var(--dm-fw-color-2),
1631
+ 17px -30px 0 0 var(--dm-fw-color-3),
1632
+ 30px -17px 0 0 var(--dm-fw-color-4),
1633
+ 35px 0 0 0 var(--dm-fw-color-5),
1634
+ 30px 17px 0 0 var(--dm-fw-color-6),
1635
+ 17px 30px 0 0 var(--dm-fw-color-7),
1636
+ 0 35px 0 0 var(--dm-fw-color-8),
1637
+ -17px 30px 0 0 var(--dm-fw-color-1),
1638
+ -30px 17px 0 0 var(--dm-fw-color-2),
1639
+ -35px 0 0 0 var(--dm-fw-color-3),
1640
+ -30px -17px 0 0 var(--dm-fw-color-4),
1641
+ -17px -30px 0 0 var(--dm-fw-color-5),
1642
+ /* Ring 3 - 16 particles */ 0 -50px 0 0 var(--dm-fw-color-6),
1643
+ 19px -46px 0 0 var(--dm-fw-color-7),
1644
+ 35px -35px 0 0 var(--dm-fw-color-8),
1645
+ 46px -19px 0 0 var(--dm-fw-color-1),
1646
+ 50px 0 0 0 var(--dm-fw-color-2),
1647
+ 46px 19px 0 0 var(--dm-fw-color-3),
1648
+ 35px 35px 0 0 var(--dm-fw-color-4),
1649
+ 19px 46px 0 0 var(--dm-fw-color-5),
1650
+ 0 50px 0 0 var(--dm-fw-color-6),
1651
+ -19px 46px 0 0 var(--dm-fw-color-7),
1652
+ -35px 35px 0 0 var(--dm-fw-color-8),
1653
+ -46px 19px 0 0 var(--dm-fw-color-1),
1654
+ -50px 0 0 0 var(--dm-fw-color-2),
1655
+ -46px -19px 0 0 var(--dm-fw-color-3),
1656
+ -35px -35px 0 0 var(--dm-fw-color-4),
1657
+ -19px -46px 0 0 var(--dm-fw-color-5);
1658
+ }
1659
+
1660
+ /* Secondary layer for more particles and trailing effect */
1661
+ .firework-burst .firework-particles::after {
1662
+ content: '';
1663
+ position: absolute;
1664
+ top: 50%;
1665
+ left: 50%;
1666
+ width: calc(var(--dm-fw-particle-size) * 0.8);
1667
+ height: calc(var(--dm-fw-particle-size) * 0.8);
1668
+ background: var(--dm-fw-color-3);
1669
+ border-radius: 50%;
1670
+ transform: translate(-50%, -50%);
1671
+ animation: dm-fw-explode-secondary 2.2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1672
+ box-shadow: /* Offset particles for depth */ 0 0 2px var(--dm-fw-color-3),
1673
+ 10px -25px 0 0 var(--dm-fw-color-4),
1674
+ 25px -10px 0 0 var(--dm-fw-color-5),
1675
+ 25px 10px 0 0 var(--dm-fw-color-6),
1676
+ 10px 25px 0 0 var(--dm-fw-color-7),
1677
+ -10px 25px 0 0 var(--dm-fw-color-8),
1678
+ -25px 10px 0 0 var(--dm-fw-color-1),
1679
+ -25px -10px 0 0 var(--dm-fw-color-2),
1680
+ -10px -25px 0 0 var(--dm-fw-color-3),
1681
+ /* Extra sparkles */ 8px -42px 0 0 var(--dm-fw-color-4),
1682
+ 42px -8px 0 0 var(--dm-fw-color-5),
1683
+ 42px 8px 0 0 var(--dm-fw-color-6),
1684
+ 8px 42px 0 0 var(--dm-fw-color-7),
1685
+ -8px 42px 0 0 var(--dm-fw-color-8),
1686
+ -42px 8px 0 0 var(--dm-fw-color-1),
1687
+ -42px -8px 0 0 var(--dm-fw-color-2),
1688
+ -8px -42px 0 0 var(--dm-fw-color-3);
1689
+ }
1690
+
1691
+ /* Sparkle animation - twinkling particles */
1692
+ .firework-sparkle::before {
1693
+ width: 2px;
1694
+ height: 2px;
1695
+ background: white;
1696
+ box-shadow: /* Create sparkle pattern */ 0 0 3px 1px rgba(255, 255, 255, 0.8),
1697
+ 10px -10px 0 0 var(--dm-fw-color-1),
1698
+ 10px -10px 3px 1px var(--dm-fw-color-1),
1699
+ -10px -10px 0 0 var(--dm-fw-color-2),
1700
+ -10px -10px 3px 1px var(--dm-fw-color-2),
1701
+ -10px 10px 0 0 var(--dm-fw-color-3),
1702
+ -10px 10px 3px 1px var(--dm-fw-color-3),
1703
+ 10px 10px 0 0 var(--dm-fw-color-4),
1704
+ 10px 10px 3px 1px var(--dm-fw-color-4),
1705
+ 20px 0 0 0 var(--dm-fw-color-5),
1706
+ 20px 0 3px 1px var(--dm-fw-color-5),
1707
+ -20px 0 0 0 var(--dm-fw-color-6),
1708
+ -20px 0 3px 1px var(--dm-fw-color-6),
1709
+ 0 20px 0 0 var(--dm-fw-color-7),
1710
+ 0 20px 3px 1px var(--dm-fw-color-7),
1711
+ 0 -20px 0 0 var(--dm-fw-color-8),
1712
+ 0 -20px 3px 1px var(--dm-fw-color-8);
1713
+ animation: dm-firework-sparkle var(--dm-fw-duration) ease-out forwards;
1714
+ animation-delay: var(--dm-fw-delay);
1715
+ opacity: 0;
1716
+ }
1717
+
1718
+ .firework-sparkle::after {
1719
+ width: 2px;
1720
+ height: 2px;
1721
+ background: white;
1722
+ box-shadow: /* Secondary sparkle layer */ 15px -15px 0 0 var(--dm-fw-color-1),
1723
+ 15px -15px 4px 2px rgba(255, 235, 59, 0.5),
1724
+ -15px -15px 0 0 var(--dm-fw-color-3),
1725
+ -15px -15px 4px 2px rgba(78, 205, 196, 0.5),
1726
+ -15px 15px 0 0 var(--dm-fw-color-5),
1727
+ -15px 15px 4px 2px rgba(243, 156, 18, 0.5),
1728
+ 15px 15px 0 0 var(--dm-fw-color-7),
1729
+ 15px 15px 4px 2px rgba(253, 121, 168, 0.5);
1730
+ animation: dm-firework-sparkle-alt var(--dm-fw-duration) ease-out forwards;
1731
+ animation-delay: calc(var(--dm-fw-delay) + 0.2s);
1732
+ opacity: 0;
1733
+ }
1734
+
1735
+ /* Trail animation - launch and falling particles */
1736
+ .firework-trail::before {
1737
+ width: 3px;
1738
+ height: 3px;
1739
+ background: var(--dm-fw-color-1);
1740
+ box-shadow: 0 0 10px 2px var(--dm-fw-color-1),
1741
+ 0 5px 2px 0 rgba(255, 235, 59, 0.8),
1742
+ 0 10px 2px 0 rgba(255, 235, 59, 0.6),
1743
+ 0 15px 2px 0 rgba(255, 235, 59, 0.4),
1744
+ 0 20px 2px 0 rgba(255, 235, 59, 0.2);
1745
+ animation: dm-firework-launch var(--dm-fw-duration) ease-out forwards;
1746
+ animation-delay: var(--dm-fw-delay);
1747
+ }
1748
+
1749
+ /* Size variants */
1750
+ .firework-sm::before,
1751
+ .firework-sm::after {
1752
+ width: var(--dm-fw-size-sm);
1753
+ height: var(--dm-fw-size-sm);
1754
+ }
1755
+
1756
+ .firework-md::before,
1757
+ .firework-md::after {
1758
+ width: var(--dm-fw-size-md);
1759
+ height: var(--dm-fw-size-md);
1760
+ }
1761
+
1762
+ .firework-lg::before,
1763
+ .firework-lg::after {
1764
+ width: var(--dm-fw-size-lg);
1765
+ height: var(--dm-fw-size-lg);
1766
+ }
1767
+
1768
+ .firework-xl::before,
1769
+ .firework-xl::after {
1770
+ width: var(--dm-fw-size-xl);
1771
+ height: var(--dm-fw-size-xl);
1772
+ }
1773
+
1774
+ /* Colour variants */
1775
+ .firework-primary {
1776
+ --dm-fw-color-1: var(--dm-primary);
1777
+ --dm-fw-color-2: var(--dm-primary-light);
1778
+ --dm-fw-color-3: var(--dm-primary-dark);
1779
+ --dm-fw-color-4: var(--dm-primary);
1780
+ --dm-fw-color-5: var(--dm-primary);
1781
+ --dm-fw-color-6: var(--dm-primary-light);
1782
+ --dm-fw-color-7: var(--dm-primary-dark);
1783
+ --dm-fw-color-8: var(--dm-primary);
1784
+ }
1785
+
1786
+ .firework-secondary {
1787
+ --dm-fw-color-1: var(--dm-secondary);
1788
+ --dm-fw-color-2: var(--dm-secondary-light);
1789
+ --dm-fw-color-3: var(--dm-secondary-dark);
1790
+ --dm-fw-color-4: var(--dm-secondary);
1791
+ --dm-fw-color-5: var(--dm-secondary);
1792
+ --dm-fw-color-6: var(--dm-secondary-light);
1793
+ --dm-fw-color-7: var(--dm-secondary-dark);
1794
+ --dm-fw-color-8: var(--dm-secondary);
1795
+ }
1796
+
1797
+ .firework-success {
1798
+ --dm-fw-color-1: var(--dm-success);
1799
+ --dm-fw-color-2: var(--dm-success-light);
1800
+ --dm-fw-color-3: var(--dm-success-dark);
1801
+ --dm-fw-color-4: var(--dm-success);
1802
+ --dm-fw-color-5: var(--dm-success);
1803
+ --dm-fw-color-6: var(--dm-success-light);
1804
+ --dm-fw-color-7: var(--dm-success-dark);
1805
+ --dm-fw-color-8: var(--dm-success);
1806
+ }
1807
+
1808
+ .firework-warning {
1809
+ --dm-fw-color-1: var(--dm-warning);
1810
+ --dm-fw-color-2: var(--dm-warning-light);
1811
+ --dm-fw-color-3: var(--dm-warning-dark);
1812
+ --dm-fw-color-4: var(--dm-warning);
1813
+ --dm-fw-color-5: var(--dm-warning);
1814
+ --dm-fw-color-6: var(--dm-warning-light);
1815
+ --dm-fw-color-7: var(--dm-warning-dark);
1816
+ --dm-fw-color-8: var(--dm-warning);
1817
+ }
1818
+
1819
+ .firework-danger {
1820
+ --dm-fw-color-1: var(--dm-danger);
1821
+ --dm-fw-color-2: var(--dm-danger-light);
1822
+ --dm-fw-color-3: var(--dm-danger-dark);
1823
+ --dm-fw-color-4: var(--dm-danger);
1824
+ --dm-fw-color-5: var(--dm-danger);
1825
+ --dm-fw-color-6: var(--dm-danger-light);
1826
+ --dm-fw-color-7: var(--dm-danger-dark);
1827
+ --dm-fw-color-8: var(--dm-danger);
1828
+ }
1829
+
1830
+ .firework-info {
1831
+ --dm-fw-color-1: var(--dm-info);
1832
+ --dm-fw-color-2: var(--dm-info-light);
1833
+ --dm-fw-color-3: var(--dm-info-dark);
1834
+ --dm-fw-color-4: var(--dm-info);
1835
+ --dm-fw-color-5: var(--dm-info);
1836
+ --dm-fw-color-6: var(--dm-info-light);
1837
+ --dm-fw-color-7: var(--dm-info-dark);
1838
+ --dm-fw-color-8: var(--dm-info);
1839
+ }
1840
+
1841
+ .firework-rainbow {
1842
+ --dm-fw-color-1: #ff0000;
1843
+ --dm-fw-color-2: #ff7f00;
1844
+ --dm-fw-color-3: #ffff00;
1845
+ --dm-fw-color-4: #00ff00;
1846
+ --dm-fw-color-5: #0000ff;
1847
+ --dm-fw-color-6: #4b0082;
1848
+ --dm-fw-color-7: #9400d3;
1849
+ --dm-fw-color-8: #ff1493;
1850
+ }
1851
+
1852
+ /* Continuous animation */
1853
+ .firework-continuous::before,
1854
+ .firework-continuous::after {
1855
+ animation-iteration-count: infinite;
1856
+ }
1857
+
1858
+ /* Trigger on hover */
1859
+ .firework-on-hover {
1860
+ position: relative;
1861
+ }
1862
+
1863
+ .firework-on-hover::before,
1864
+ .firework-on-hover::after {
1865
+ content: '';
1866
+ position: absolute;
1867
+ top: 50%;
1868
+ left: 50%;
1869
+ width: var(--dm-fw-size);
1870
+ height: var(--dm-fw-size);
1871
+ transform: translate(-50%, -50%);
1872
+ opacity: 0;
1873
+ pointer-events: none;
1874
+ }
1875
+
1876
+ .firework-on-hover:hover::before {
1877
+ background: var(--dm-fw-color-1);
1878
+ box-shadow: /* Inner ring - 8 particles */ 0 -30px 0 1px var(--dm-fw-color-1),
1879
+ 21px -21px 0 1px var(--dm-fw-color-2),
1880
+ 30px 0 0 1px var(--dm-fw-color-3),
1881
+ 21px 21px 0 1px var(--dm-fw-color-4),
1882
+ 0 30px 0 1px var(--dm-fw-color-5),
1883
+ -21px 21px 0 1px var(--dm-fw-color-6),
1884
+ -30px 0 0 1px var(--dm-fw-color-7),
1885
+ -21px -21px 0 1px var(--dm-fw-color-8),
1886
+ /* Outer ring */ 0 -50px 0 0 var(--dm-fw-color-2),
1887
+ 35px -35px 0 0 var(--dm-fw-color-3),
1888
+ 50px 0 0 0 var(--dm-fw-color-4),
1889
+ 35px 35px 0 0 var(--dm-fw-color-5),
1890
+ 0 50px 0 0 var(--dm-fw-color-6),
1891
+ -35px 35px 0 0 var(--dm-fw-color-7),
1892
+ -50px 0 0 0 var(--dm-fw-color-8),
1893
+ -35px -35px 0 0 var(--dm-fw-color-1);
1894
+ animation: dm-firework-burst 1.5s ease-out forwards;
1895
+ }
1896
+
1897
+ .firework-on-hover:hover::after {
1898
+ background: var(--dm-fw-color-3);
1899
+ box-shadow: 15px -40px 0 0 var(--dm-fw-color-1),
1900
+ 40px -15px 0 0 var(--dm-fw-color-3),
1901
+ 40px 15px 0 0 var(--dm-fw-color-5),
1902
+ 15px 40px 0 0 var(--dm-fw-color-7),
1903
+ -15px 40px 0 0 var(--dm-fw-color-2),
1904
+ -40px 15px 0 0 var(--dm-fw-color-4),
1905
+ -40px -15px 0 0 var(--dm-fw-color-6),
1906
+ -15px -40px 0 0 var(--dm-fw-color-8);
1907
+ animation: dm-firework-burst-secondary 1.5s ease-out forwards;
1908
+ }
1909
+
1910
+ /* Keyframe Animations */
1911
+
1912
+ /* Launch animation - rocket goes up */
1913
+ @keyframes dm-fw-launch {
1914
+ 0% {
1915
+ transform: translateX(-50%) translateY(0);
1916
+ opacity: 1;
1917
+ }
1918
+ 100% {
1919
+ transform: translateX(-50%) translateY(calc(-1 * var(--dm-fw-launch-height)));
1920
+ opacity: 0;
1921
+ }
1922
+ }
1923
+
1924
+ /* Main explosion - particles burst outward then fall with gravity */
1925
+ @keyframes dm-fw-explode {
1926
+ 0% {
1927
+ transform: translate(-50%, -50%) scale(0);
1928
+ opacity: 0;
1929
+ }
1930
+ 5% {
1931
+ transform: translate(-50%, -50%) scale(0.1);
1932
+ opacity: 1;
1933
+ }
1934
+ 25% {
1935
+ transform: translate(-50%, -50%) scale(2.5);
1936
+ opacity: 1;
1937
+ }
1938
+ 50% {
1939
+ transform: translate(-50%, -50%) scale(3.5) translateY(10px);
1940
+ opacity: 0.9;
1941
+ }
1942
+ 75% {
1943
+ transform: translate(-50%, -50%) scale(4) translateY(40px);
1944
+ opacity: 0.6;
1945
+ }
1946
+ 100% {
1947
+ transform: translate(-50%, -50%) scale(4.5) translateY(100px);
1948
+ opacity: 0;
1949
+ }
1950
+ }
1951
+
1952
+ /* Secondary explosion with slight delay and rotation */
1953
+ @keyframes dm-fw-explode-secondary {
1954
+ 0% {
1955
+ transform: translate(-50%, -50%) scale(0) rotate(0deg);
1956
+ opacity: 0;
1957
+ }
1958
+ 10% {
1959
+ transform: translate(-50%, -50%) scale(0.2) rotate(45deg);
1960
+ opacity: 1;
1961
+ }
1962
+ 30% {
1963
+ transform: translate(-50%, -50%) scale(2.2) rotate(90deg);
1964
+ opacity: 1;
1965
+ }
1966
+ 55% {
1967
+ transform: translate(-50%, -50%) scale(3.2) rotate(135deg) translateY(15px);
1968
+ opacity: 0.8;
1969
+ }
1970
+ 80% {
1971
+ transform: translate(-50%, -50%) scale(3.8) rotate(180deg) translateY(50px);
1972
+ opacity: 0.5;
1973
+ }
1974
+ 100% {
1975
+ transform: translate(-50%, -50%) scale(4.2) rotate(225deg) translateY(120px);
1976
+ opacity: 0;
1977
+ }
1978
+ }
1979
+
1980
+ /* Sparkle animation for twinkling effect */
1981
+ @keyframes dm-fw-sparkle {
1982
+ 0%, 100% {
1983
+ transform: translate(-50%, -50%) scale(1);
1984
+ opacity: 0;
1985
+ }
1986
+ 10% {
1987
+ transform: translate(-50%, -50%) scale(0.5);
1988
+ opacity: 1;
1989
+ }
1990
+ 50% {
1991
+ transform: translate(-50%, -50%) scale(1.5);
1992
+ opacity: 1;
1993
+ }
1994
+ 90% {
1995
+ transform: translate(-50%, -50%) scale(2) translateY(30px);
1996
+ opacity: 0;
1997
+ }
1998
+ }
1999
+
2000
+ /* Crackle effect - small rapid sparkles */
2001
+ @keyframes dm-fw-crackle {
2002
+ 0%, 100% {
2003
+ opacity: 0;
2004
+ }
2005
+ 25%, 75% {
2006
+ opacity: 1;
2007
+ }
2008
+ 50% {
2009
+ opacity: 0.5;
2010
+ }
2011
+ }
2012
+
2013
+ /* Multiple fireworks container */
2014
+ .fireworks-container {
2015
+ position: fixed;
2016
+ top: 0;
2017
+ left: 0;
2018
+ width: 100%;
2019
+ height: 100%;
2020
+ pointer-events: none;
2021
+ z-index: 9999;
2022
+ }
2023
+
2024
+ .fireworks-container .firework {
2025
+ position: absolute;
2026
+ }
2027
+
1491
2028
  /* ============================================
1492
2029
  SIZE UTILITIES
1493
2030
  ============================================ */
@@ -1827,6 +2364,43 @@ code, pre {
1827
2364
  color: var(--dm-warning);
1828
2365
  }
1829
2366
 
2367
+ /* Validation State Container Classes */
2368
+ .has-success .form-input,
2369
+ .has-success .form-select,
2370
+ .has-success .form-textarea {
2371
+ border-color: var(--dm-success);
2372
+ }
2373
+
2374
+ .has-success .form-input:focus,
2375
+ .has-success .form-select:focus,
2376
+ .has-success .form-textarea:focus {
2377
+ box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.2);
2378
+ }
2379
+
2380
+ .has-error .form-input,
2381
+ .has-error .form-select,
2382
+ .has-error .form-textarea {
2383
+ border-color: var(--dm-danger);
2384
+ }
2385
+
2386
+ .has-error .form-input:focus,
2387
+ .has-error .form-select:focus,
2388
+ .has-error .form-textarea:focus {
2389
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2);
2390
+ }
2391
+
2392
+ .has-warning .form-input,
2393
+ .has-warning .form-select,
2394
+ .has-warning .form-textarea {
2395
+ border-color: var(--dm-warning);
2396
+ }
2397
+
2398
+ .has-warning .form-input:focus,
2399
+ .has-warning .form-select:focus,
2400
+ .has-warning .form-textarea:focus {
2401
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2);
2402
+ }
2403
+
1830
2404
  /* Input Sizes */
1831
2405
  .form-input-sm,
1832
2406
  .form-select-sm,
@@ -2205,6 +2779,63 @@ code, pre {
2205
2779
  cursor: pointer;
2206
2780
  }
2207
2781
 
2782
+ /* Form Sections */
2783
+ .domma-form-section {
2784
+ border: 1px solid var(--dm-border, var(--dm-gray-200));
2785
+ border-radius: var(--dm-radius-lg);
2786
+ padding: var(--dm-space-6);
2787
+ margin-bottom: var(--dm-space-6);
2788
+ background-color: var(--dm-surface, var(--dm-white));
2789
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2790
+ transition: box-shadow 0.15s ease;
2791
+ }
2792
+
2793
+ .domma-form-section:hover {
2794
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
2795
+ }
2796
+
2797
+ .domma-form-section-title {
2798
+ font-size: var(--dm-font-size-lg);
2799
+ font-weight: var(--dm-font-weight-semibold);
2800
+ color: var(--dm-primary);
2801
+ margin: 0 0 var(--dm-space-4) 0;
2802
+ padding: 0 var(--dm-space-4);
2803
+ border-bottom: 2px solid var(--dm-primary);
2804
+ display: inline-block;
2805
+ background-color: var(--dm-surface, var(--dm-white));
2806
+ position: relative;
2807
+ top: calc(-1 * var(--dm-space-6) - 1px);
2808
+ left: 0;
2809
+ border-radius: var(--dm-radius-md) var(--dm-radius-md) 0 0;
2810
+ }
2811
+
2812
+ .domma-form-section-content {
2813
+ margin-top: calc(-1 * var(--dm-space-2));
2814
+ }
2815
+
2816
+ /* Dark theme adjustments */
2817
+ .dm-theme-dark .domma-form-section {
2818
+ background-color: var(--dm-gray-800);
2819
+ border-color: var(--dm-gray-700);
2820
+ }
2821
+
2822
+ .dm-theme-dark .domma-form-section-title {
2823
+ background-color: var(--dm-gray-800);
2824
+ color: var(--dm-primary-light, var(--dm-blue-400));
2825
+ border-color: var(--dm-primary-light, var(--dm-blue-400));
2826
+ }
2827
+
2828
+ /* Compact form sections */
2829
+ .domma-form-section.compact {
2830
+ padding: var(--dm-space-4);
2831
+ margin-bottom: var(--dm-space-4);
2832
+ }
2833
+
2834
+ .domma-form-section.compact .domma-form-section-title {
2835
+ font-size: var(--dm-font-size-base);
2836
+ top: calc(-1 * var(--dm-space-4) - 1px);
2837
+ }
2838
+
2208
2839
  /* ============================================
2209
2840
  COMPONENT: Badge
2210
2841
  ============================================ */
@@ -2379,52 +3010,991 @@ code, pre {
2379
3010
  --dm-code-bg: var(--dm-slate-900);
2380
3011
  --dm-code-text: var(--dm-red-300);
2381
3012
 
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);
3013
+ /* ================================================
3014
+ SHADOWS (Tailwind Shadows for Dark Mode)
3015
+ ================================================ */
3016
+ --dm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
3017
+ --dm-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
3018
+ --dm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
3019
+ --dm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
3020
+ --dm-shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
3021
+ --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
3022
+ --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
3023
+
3024
+ /* ================================================
3025
+ TRANSPARENCY & OPACITY
3026
+ ================================================ */
3027
+ --dm-white-t10: rgba(255, 255, 255, 0.1);
3028
+ --dm-white-t15: rgba(255, 255, 255, 0.15);
3029
+ --dm-white-t20: rgba(255, 255, 255, 0.2);
3030
+ --dm-white-t25: rgba(255, 255, 255, 0.25);
3031
+ --dm-white-t30: rgba(255, 255, 255, 0.3);
3032
+ --dm-white-t40: rgba(255, 255, 255, 0.4);
3033
+ --dm-white-t70: rgba(255, 255, 255, 0.7);
3034
+ --dm-white-t85: rgba(255, 255, 255, 0.85);
3035
+ --dm-white-t90: rgba(255, 255, 255, 0.9);
3036
+ --dm-white-t95: rgba(255, 255, 255, 0.95);
3037
+
3038
+ --dm-black-t1: rgba(1, 1, 1, 0.0125);
3039
+ --dm-black-t20: rgba(0, 0, 0, 0.2);
3040
+ --dm-black-t30: rgba(0, 0, 0, 0.3);
3041
+ --dm-black-t50: rgba(0, 0, 0, 0.5);
3042
+ --dm-black-t70: rgba(0, 0, 0, 0.7);
3043
+
3044
+ /* ================================================
3045
+ GLOW EFFECTS
3046
+ ================================================ */
3047
+ --dm-glow-sm: 0 0 8px rgba(255, 255, 255, 0.3);
3048
+ --dm-glow: 0 0 15px rgba(255, 255, 255, 0.5);
3049
+ --dm-glow-md: 0 0 20px rgba(255, 255, 255, 0.6);
3050
+ --dm-glow-lg: 0 0 30px rgba(255, 255, 255, 0.7);
3051
+ --dm-glow-xl: 0 0 40px rgba(255, 255, 255, 0.8);
3052
+
3053
+ --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 0.6);
3054
+ --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 0.6);
3055
+ --dm-glow-success: 0 0 20px rgba(34, 197, 94, 0.6);
3056
+ --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 0.6);
3057
+ --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 0.6);
3058
+ --dm-glow-info: 0 0 20px rgba(14, 165, 233, 0.6);
3059
+
3060
+ /* ================================================
3061
+ ANIMATION VARIABLES
3062
+ ================================================ */
3063
+ --dm-animate-duration: 1s;
3064
+ --dm-animate-delay: 0s;
3065
+ --dm-animate-timing: ease;
3066
+ }
3067
+
3068
+ /* ============================================
3069
+ ANIMATION UTILITIES
3070
+ ============================================ */
3071
+
3072
+ /* Animation Keyframes */
3073
+
3074
+ @keyframes dm-fade-in {
3075
+ from {
3076
+ opacity: 0;
3077
+ }
3078
+ to {
3079
+ opacity: 1;
3080
+ }
3081
+ }
3082
+
3083
+ @keyframes dm-fade-out {
3084
+ from {
3085
+ opacity: 1;
3086
+ }
3087
+ to {
3088
+ opacity: 0;
3089
+ }
3090
+ }
3091
+
3092
+ @keyframes dm-fade-in-up {
3093
+ from {
3094
+ opacity: 0;
3095
+ transform: translateY(20px);
3096
+ }
3097
+ to {
3098
+ opacity: 1;
3099
+ transform: translateY(0);
3100
+ }
3101
+ }
3102
+
3103
+ @keyframes dm-fade-in-down {
3104
+ from {
3105
+ opacity: 0;
3106
+ transform: translateY(-20px);
3107
+ }
3108
+ to {
3109
+ opacity: 1;
3110
+ transform: translateY(0);
3111
+ }
3112
+ }
3113
+
3114
+ @keyframes dm-fade-in-left {
3115
+ from {
3116
+ opacity: 0;
3117
+ transform: translateX(-20px);
3118
+ }
3119
+ to {
3120
+ opacity: 1;
3121
+ transform: translateX(0);
3122
+ }
3123
+ }
3124
+
3125
+ @keyframes dm-fade-in-right {
3126
+ from {
3127
+ opacity: 0;
3128
+ transform: translateX(20px);
3129
+ }
3130
+ to {
3131
+ opacity: 1;
3132
+ transform: translateX(0);
3133
+ }
3134
+ }
3135
+
3136
+ @keyframes dm-slide-in-up {
3137
+ from {
3138
+ transform: translateY(100%);
3139
+ }
3140
+ to {
3141
+ transform: translateY(0);
3142
+ }
3143
+ }
3144
+
3145
+ @keyframes dm-slide-in-down {
3146
+ from {
3147
+ transform: translateY(-100%);
3148
+ }
3149
+ to {
3150
+ transform: translateY(0);
3151
+ }
3152
+ }
3153
+
3154
+ @keyframes dm-slide-in-left {
3155
+ from {
3156
+ transform: translateX(-100%);
3157
+ }
3158
+ to {
3159
+ transform: translateX(0);
3160
+ }
3161
+ }
3162
+
3163
+ @keyframes dm-slide-in-right {
3164
+ from {
3165
+ transform: translateX(100%);
3166
+ }
3167
+ to {
3168
+ transform: translateX(0);
3169
+ }
3170
+ }
3171
+
3172
+ @keyframes dm-zoom-in {
3173
+ from {
3174
+ opacity: 0;
3175
+ transform: scale(0.8);
3176
+ }
3177
+ to {
3178
+ opacity: 1;
3179
+ transform: scale(1);
3180
+ }
3181
+ }
3182
+
3183
+ @keyframes dm-zoom-out {
3184
+ from {
3185
+ opacity: 1;
3186
+ transform: scale(1);
3187
+ }
3188
+ to {
3189
+ opacity: 0;
3190
+ transform: scale(0.8);
3191
+ }
3192
+ }
3193
+
3194
+ @keyframes dm-bounce {
3195
+ 0%, 20%, 50%, 80%, 100% {
3196
+ transform: translateY(0);
3197
+ }
3198
+ 40% {
3199
+ transform: translateY(-20px);
3200
+ }
3201
+ 60% {
3202
+ transform: translateY(-10px);
3203
+ }
3204
+ }
3205
+
3206
+ @keyframes dm-pulse {
3207
+ 0%, 100% {
3208
+ opacity: 1;
3209
+ }
3210
+ 50% {
3211
+ opacity: 0.5;
3212
+ }
3213
+ }
3214
+
3215
+ @keyframes dm-shake {
3216
+ 0%, 100% {
3217
+ transform: translateX(0);
3218
+ }
3219
+ 10%, 30%, 50%, 70%, 90% {
3220
+ transform: translateX(-5px);
3221
+ }
3222
+ 20%, 40%, 60%, 80% {
3223
+ transform: translateX(5px);
3224
+ }
3225
+ }
3226
+
3227
+ @keyframes dm-spin {
3228
+ from {
3229
+ transform: rotate(0deg);
3230
+ }
3231
+ to {
3232
+ transform: rotate(360deg);
3233
+ }
3234
+ }
3235
+
3236
+ @keyframes dm-rotate-in {
3237
+ from {
3238
+ opacity: 0;
3239
+ transform: rotate(-180deg) scale(0.8);
3240
+ }
3241
+ to {
3242
+ opacity: 1;
3243
+ transform: rotate(0) scale(1);
3244
+ }
3245
+ }
3246
+
3247
+ @keyframes dm-flip {
3248
+ from {
3249
+ transform: perspective(400px) rotateY(90deg);
3250
+ opacity: 0;
3251
+ }
3252
+ to {
3253
+ transform: perspective(400px) rotateY(0);
3254
+ opacity: 1;
3255
+ }
3256
+ }
3257
+
3258
+ /* Animation Classes */
3259
+
3260
+ .animate-fade-in {
3261
+ animation-name: dm-fade-in;
3262
+ animation-duration: var(--dm-animate-duration, 1s);
3263
+ animation-timing-function: var(--dm-animate-timing, ease);
3264
+ animation-delay: var(--dm-animate-delay, 0s);
3265
+ animation-fill-mode: both;
3266
+ }
3267
+
3268
+ .animate-fade-out {
3269
+ animation-name: dm-fade-out;
3270
+ animation-duration: var(--dm-animate-duration, 1s);
3271
+ animation-timing-function: var(--dm-animate-timing, ease);
3272
+ animation-delay: var(--dm-animate-delay, 0s);
3273
+ animation-fill-mode: both;
3274
+ }
3275
+
3276
+ .animate-fade-in-up {
3277
+ animation-name: dm-fade-in-up;
3278
+ animation-duration: var(--dm-animate-duration, 1s);
3279
+ animation-timing-function: var(--dm-animate-timing, ease);
3280
+ animation-delay: var(--dm-animate-delay, 0s);
3281
+ animation-fill-mode: both;
3282
+ }
3283
+
3284
+ .animate-fade-in-down {
3285
+ animation-name: dm-fade-in-down;
3286
+ animation-duration: var(--dm-animate-duration, 1s);
3287
+ animation-timing-function: var(--dm-animate-timing, ease);
3288
+ animation-delay: var(--dm-animate-delay, 0s);
3289
+ animation-fill-mode: both;
3290
+ }
3291
+
3292
+ .animate-fade-in-left {
3293
+ animation-name: dm-fade-in-left;
3294
+ animation-duration: var(--dm-animate-duration, 1s);
3295
+ animation-timing-function: var(--dm-animate-timing, ease);
3296
+ animation-delay: var(--dm-animate-delay, 0s);
3297
+ animation-fill-mode: both;
3298
+ }
3299
+
3300
+ .animate-fade-in-right {
3301
+ animation-name: dm-fade-in-right;
3302
+ animation-duration: var(--dm-animate-duration, 1s);
3303
+ animation-timing-function: var(--dm-animate-timing, ease);
3304
+ animation-delay: var(--dm-animate-delay, 0s);
3305
+ animation-fill-mode: both;
3306
+ }
3307
+
3308
+ .animate-slide-in-up {
3309
+ animation-name: dm-slide-in-up;
3310
+ animation-duration: var(--dm-animate-duration, 1s);
3311
+ animation-timing-function: var(--dm-animate-timing, ease);
3312
+ animation-delay: var(--dm-animate-delay, 0s);
3313
+ animation-fill-mode: both;
3314
+ }
3315
+
3316
+ .animate-slide-in-down {
3317
+ animation-name: dm-slide-in-down;
3318
+ animation-duration: var(--dm-animate-duration, 1s);
3319
+ animation-timing-function: var(--dm-animate-timing, ease);
3320
+ animation-delay: var(--dm-animate-delay, 0s);
3321
+ animation-fill-mode: both;
3322
+ }
3323
+
3324
+ .animate-slide-in-left {
3325
+ animation-name: dm-slide-in-left;
3326
+ animation-duration: var(--dm-animate-duration, 1s);
3327
+ animation-timing-function: var(--dm-animate-timing, ease);
3328
+ animation-delay: var(--dm-animate-delay, 0s);
3329
+ animation-fill-mode: both;
3330
+ }
3331
+
3332
+ .animate-slide-in-right {
3333
+ animation-name: dm-slide-in-right;
3334
+ animation-duration: var(--dm-animate-duration, 1s);
3335
+ animation-timing-function: var(--dm-animate-timing, ease);
3336
+ animation-delay: var(--dm-animate-delay, 0s);
3337
+ animation-fill-mode: both;
3338
+ }
3339
+
3340
+ .animate-zoom-in {
3341
+ animation-name: dm-zoom-in;
3342
+ animation-duration: var(--dm-animate-duration, 1s);
3343
+ animation-timing-function: var(--dm-animate-timing, ease);
3344
+ animation-delay: var(--dm-animate-delay, 0s);
3345
+ animation-fill-mode: both;
3346
+ }
3347
+
3348
+ .animate-zoom-out {
3349
+ animation-name: dm-zoom-out;
3350
+ animation-duration: var(--dm-animate-duration, 1s);
3351
+ animation-timing-function: var(--dm-animate-timing, ease);
3352
+ animation-delay: var(--dm-animate-delay, 0s);
3353
+ animation-fill-mode: both;
3354
+ }
3355
+
3356
+ .animate-bounce {
3357
+ animation-name: dm-bounce;
3358
+ animation-duration: var(--dm-animate-duration, 1s);
3359
+ animation-timing-function: var(--dm-animate-timing, ease);
3360
+ animation-delay: var(--dm-animate-delay, 0s);
3361
+ animation-fill-mode: both;
3362
+ }
3363
+
3364
+ .animate-pulse {
3365
+ animation-name: dm-pulse;
3366
+ animation-duration: var(--dm-animate-duration, 1s);
3367
+ animation-timing-function: var(--dm-animate-timing, ease);
3368
+ animation-delay: var(--dm-animate-delay, 0s);
3369
+ animation-fill-mode: both;
3370
+ }
3371
+
3372
+ .animate-shake {
3373
+ animation-name: dm-shake;
3374
+ animation-duration: 0.5s;
3375
+ animation-timing-function: ease;
3376
+ animation-fill-mode: both;
3377
+ }
3378
+
3379
+ .animate-spin {
3380
+ animation-name: dm-spin;
3381
+ animation-duration: var(--dm-animate-duration, 1s);
3382
+ animation-timing-function: linear;
3383
+ animation-delay: var(--dm-animate-delay, 0s);
3384
+ animation-fill-mode: both;
3385
+ }
3386
+
3387
+ .animate-rotate-in {
3388
+ animation-name: dm-rotate-in;
3389
+ animation-duration: var(--dm-animate-duration, 1s);
3390
+ animation-timing-function: var(--dm-animate-timing, ease);
3391
+ animation-delay: var(--dm-animate-delay, 0s);
3392
+ animation-fill-mode: both;
3393
+ }
3394
+
3395
+ .animate-flip {
3396
+ animation-name: dm-flip;
3397
+ animation-duration: var(--dm-animate-duration, 1s);
3398
+ animation-timing-function: var(--dm-animate-timing, ease);
3399
+ animation-delay: var(--dm-animate-delay, 0s);
3400
+ animation-fill-mode: both;
3401
+ }
3402
+
3403
+ /* Animation Control Classes */
3404
+
3405
+ .animate-infinite {
3406
+ animation-iteration-count: infinite;
3407
+ }
3408
+
3409
+ .animate-once {
3410
+ animation-iteration-count: 1;
3411
+ }
3412
+
3413
+ .animate-repeat-2 {
3414
+ animation-iteration-count: 2;
3415
+ }
3416
+
3417
+ .animate-repeat-3 {
3418
+ animation-iteration-count: 3;
3419
+ }
3420
+
3421
+ /* Animation Durations */
3422
+
3423
+ .animate-duration-fast {
3424
+ --dm-animate-duration: 0.3s;
3425
+ }
3426
+
3427
+ .animate-duration-normal {
3428
+ --dm-animate-duration: 0.6s;
3429
+ }
3430
+
3431
+ .animate-duration-slow {
3432
+ --dm-animate-duration: 1s;
3433
+ }
3434
+
3435
+ .animate-duration-slower {
3436
+ --dm-animate-duration: 2s;
3437
+ }
3438
+
3439
+ /* Animation Delays */
3440
+
3441
+ .animate-delay-100 {
3442
+ --dm-animate-delay: 0.1s;
3443
+ }
3444
+
3445
+ .animate-delay-200 {
3446
+ --dm-animate-delay: 0.2s;
3447
+ }
3448
+
3449
+ .animate-delay-300 {
3450
+ --dm-animate-delay: 0.3s;
3451
+ }
3452
+
3453
+ .animate-delay-500 {
3454
+ --dm-animate-delay: 0.5s;
3455
+ }
3456
+
3457
+ .animate-delay-1000 {
3458
+ --dm-animate-delay: 1s;
3459
+ }
3460
+
3461
+ /* Hover Animations */
3462
+
3463
+ .animate-fade-in-hover:hover {
3464
+ animation-name: dm-fade-in;
3465
+ animation-duration: 0.3s;
3466
+ animation-timing-function: ease;
3467
+ animation-fill-mode: both;
3468
+ }
3469
+
3470
+ .animate-bounce-hover:hover {
3471
+ animation-name: dm-bounce;
3472
+ animation-duration: 0.6s;
3473
+ animation-timing-function: ease;
3474
+ animation-fill-mode: both;
3475
+ }
3476
+
3477
+ .animate-pulse-hover:hover {
3478
+ animation-name: dm-pulse;
3479
+ animation-duration: 1s;
3480
+ animation-timing-function: ease;
3481
+ animation-fill-mode: both;
3482
+ }
3483
+
3484
+ .animate-shake-hover:hover {
3485
+ animation-name: dm-shake;
3486
+ animation-duration: 0.5s;
3487
+ animation-timing-function: ease;
3488
+ animation-fill-mode: both;
3489
+ }
3490
+
3491
+ .animate-spin-hover:hover {
3492
+ animation-name: dm-spin;
3493
+ animation-duration: 1s;
3494
+ animation-timing-function: linear;
3495
+ animation-fill-mode: both;
3496
+ }
3497
+
3498
+ /* ============================================
3499
+ GRADIENT UTILITIES
3500
+ ============================================ */
3501
+
3502
+ /* Background Gradients */
3503
+
3504
+ .bg-gradient-primary {
3505
+ background: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3506
+ }
3507
+
3508
+ .bg-gradient-secondary {
3509
+ background: linear-gradient(135deg, var(--dm-secondary) 0%, var(--dm-secondary-dark) 100%);
3510
+ }
3511
+
3512
+ .bg-gradient-success {
3513
+ background: linear-gradient(135deg, var(--dm-success) 0%, var(--dm-success-dark) 100%);
3514
+ }
3515
+
3516
+ .bg-gradient-danger {
3517
+ background: linear-gradient(135deg, var(--dm-danger) 0%, var(--dm-danger-dark) 100%);
3518
+ }
3519
+
3520
+ .bg-gradient-warning {
3521
+ background: linear-gradient(135deg, var(--dm-warning) 0%, var(--dm-warning-dark) 100%);
3522
+ }
3523
+
3524
+ .bg-gradient-info {
3525
+ background: linear-gradient(135deg, var(--dm-info) 0%, var(--dm-info-dark) 100%);
3526
+ }
3527
+
3528
+ /* Directional Gradients */
3529
+
3530
+ .bg-gradient-to-t {
3531
+ background: linear-gradient(to top, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3532
+ }
3533
+
3534
+ .bg-gradient-to-tr {
3535
+ background: linear-gradient(to top right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3536
+ }
3537
+
3538
+ .bg-gradient-to-r {
3539
+ background: linear-gradient(to right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3540
+ }
3541
+
3542
+ .bg-gradient-to-br {
3543
+ background: linear-gradient(to bottom right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3544
+ }
3545
+
3546
+ .bg-gradient-to-b {
3547
+ background: linear-gradient(to bottom, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3548
+ }
3549
+
3550
+ .bg-gradient-to-bl {
3551
+ background: linear-gradient(to bottom left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3552
+ }
3553
+
3554
+ .bg-gradient-to-l {
3555
+ background: linear-gradient(to left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3556
+ }
3557
+
3558
+ .bg-gradient-to-tl {
3559
+ background: linear-gradient(to top left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3560
+ }
3561
+
3562
+ /* Radial Gradients */
3563
+
3564
+ .bg-gradient-radial {
3565
+ background: radial-gradient(circle, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3566
+ }
3567
+
3568
+ /* Named Gradient Presets */
3569
+
3570
+ .bg-gradient-purple {
3571
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3572
+ }
3573
+
3574
+ .bg-gradient-blue {
3575
+ background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
3576
+ }
3577
+
3578
+ .bg-gradient-green {
3579
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
3580
+ }
3581
+
3582
+ .bg-gradient-sunset {
3583
+ background: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3584
+ }
3585
+
3586
+ .bg-gradient-ocean {
3587
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3588
+ }
3589
+
3590
+ .bg-gradient-rose {
3591
+ background: linear-gradient(135deg, #ec4899 0%, #db2777 100%);
3592
+ }
3593
+
3594
+ .bg-gradient-forest {
3595
+ background: linear-gradient(135deg, #10b981 0%, #065f46 100%);
3596
+ }
3597
+
3598
+ .bg-gradient-night {
3599
+ background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
3600
+ }
3601
+
3602
+ .bg-gradient-warm {
3603
+ background: linear-gradient(135deg, #f59e0b 0%, #f97316 0%, #dc2626 100%);
3604
+ }
3605
+
3606
+ .bg-gradient-cool {
3607
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 0%, #8b5cf6 100%);
3608
+ }
3609
+
3610
+ /* Animated Gradients */
3611
+
3612
+ @keyframes dm-gradient-shift {
3613
+ 0% {
3614
+ background-position: 0% 50%;
3615
+ }
3616
+ 50% {
3617
+ background-position: 100% 50%;
3618
+ }
3619
+ 100% {
3620
+ background-position: 0% 50%;
3621
+ }
3622
+ }
3623
+
3624
+ .bg-gradient-animated {
3625
+ background-size: 200% 200%;
3626
+ animation: dm-gradient-shift 3s ease infinite;
3627
+ }
3628
+
3629
+ /* Text Gradients */
3630
+
3631
+ .text-gradient {
3632
+ background-clip: text;
3633
+ -webkit-background-clip: text;
3634
+ -webkit-text-fill-color: transparent;
3635
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-secondary) 100%);
3636
+ }
3637
+
3638
+ .text-gradient-primary {
3639
+ background-clip: text;
3640
+ -webkit-background-clip: text;
3641
+ -webkit-text-fill-color: transparent;
3642
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3643
+ }
3644
+
3645
+ .text-gradient-sunset {
3646
+ background-clip: text;
3647
+ -webkit-background-clip: text;
3648
+ -webkit-text-fill-color: transparent;
3649
+ background-image: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3650
+ }
3651
+
3652
+ .text-gradient-ocean {
3653
+ background-clip: text;
3654
+ -webkit-background-clip: text;
3655
+ -webkit-text-fill-color: transparent;
3656
+ background-image: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3657
+ }
3658
+
3659
+ .text-gradient-purple {
3660
+ background-clip: text;
3661
+ -webkit-background-clip: text;
3662
+ -webkit-text-fill-color: transparent;
3663
+ background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3664
+ }
3665
+
3666
+ /* ============================================
3667
+ FILTER UTILITIES
3668
+ ============================================ */
3669
+
3670
+ /* Blur */
3671
+
3672
+ .blur-none {
3673
+ filter: blur(0);
3674
+ }
3675
+
3676
+ .blur-sm {
3677
+ filter: blur(4px);
3678
+ }
3679
+
3680
+ .blur {
3681
+ filter: blur(8px);
3682
+ }
3683
+
3684
+ .blur-md {
3685
+ filter: blur(12px);
3686
+ }
3687
+
3688
+ .blur-lg {
3689
+ filter: blur(16px);
3690
+ }
3691
+
3692
+ .blur-xl {
3693
+ filter: blur(24px);
3694
+ }
3695
+
3696
+ .blur-2xl {
3697
+ filter: blur(40px);
3698
+ }
3699
+
3700
+ .blur-3xl {
3701
+ filter: blur(64px);
3702
+ }
3703
+
3704
+ /* Brightness */
3705
+
3706
+ .brightness-0 {
3707
+ filter: brightness(0);
3708
+ }
3709
+
3710
+ .brightness-50 {
3711
+ filter: brightness(0.5);
3712
+ }
3713
+
3714
+ .brightness-75 {
3715
+ filter: brightness(0.75);
3716
+ }
3717
+
3718
+ .brightness-90 {
3719
+ filter: brightness(0.9);
3720
+ }
3721
+
3722
+ .brightness-100 {
3723
+ filter: brightness(1);
3724
+ }
3725
+
3726
+ .brightness-110 {
3727
+ filter: brightness(1.1);
3728
+ }
3729
+
3730
+ .brightness-125 {
3731
+ filter: brightness(1.25);
3732
+ }
3733
+
3734
+ .brightness-150 {
3735
+ filter: brightness(1.5);
3736
+ }
3737
+
3738
+ .brightness-200 {
3739
+ filter: brightness(2);
3740
+ }
3741
+
3742
+ /* Contrast */
3743
+
3744
+ .contrast-0 {
3745
+ filter: contrast(0);
3746
+ }
3747
+
3748
+ .contrast-50 {
3749
+ filter: contrast(0.5);
3750
+ }
3751
+
3752
+ .contrast-75 {
3753
+ filter: contrast(0.75);
3754
+ }
3755
+
3756
+ .contrast-100 {
3757
+ filter: contrast(1);
3758
+ }
3759
+
3760
+ .contrast-125 {
3761
+ filter: contrast(1.25);
3762
+ }
3763
+
3764
+ .contrast-150 {
3765
+ filter: contrast(1.5);
3766
+ }
3767
+
3768
+ .contrast-200 {
3769
+ filter: contrast(2);
3770
+ }
3771
+
3772
+ /* Grayscale */
3773
+
3774
+ .grayscale-0 {
3775
+ filter: grayscale(0);
3776
+ }
3777
+
3778
+ .grayscale {
3779
+ filter: grayscale(1);
3780
+ }
3781
+
3782
+ .grayscale-50 {
3783
+ filter: grayscale(0.5);
3784
+ }
3785
+
3786
+ /* Hue Rotate */
3787
+
3788
+ .hue-rotate-15 {
3789
+ filter: hue-rotate(15deg);
3790
+ }
3791
+
3792
+ .hue-rotate-30 {
3793
+ filter: hue-rotate(30deg);
3794
+ }
3795
+
3796
+ .hue-rotate-60 {
3797
+ filter: hue-rotate(60deg);
3798
+ }
3799
+
3800
+ .hue-rotate-90 {
3801
+ filter: hue-rotate(90deg);
3802
+ }
3803
+
3804
+ .hue-rotate-180 {
3805
+ filter: hue-rotate(180deg);
3806
+ }
3807
+
3808
+ /* Invert */
3809
+
3810
+ .invert-0 {
3811
+ filter: invert(0);
3812
+ }
3813
+
3814
+ .invert {
3815
+ filter: invert(1);
3816
+ }
3817
+
3818
+ .invert-50 {
3819
+ filter: invert(0.5);
3820
+ }
3821
+
3822
+ /* Saturate */
3823
+
3824
+ .saturate-0 {
3825
+ filter: saturate(0);
3826
+ }
3827
+
3828
+ .saturate-50 {
3829
+ filter: saturate(0.5);
3830
+ }
3831
+
3832
+ .saturate-100 {
3833
+ filter: saturate(1);
3834
+ }
3835
+
3836
+ .saturate-150 {
3837
+ filter: saturate(1.5);
3838
+ }
3839
+
3840
+ .saturate-200 {
3841
+ filter: saturate(2);
3842
+ }
3843
+
3844
+ /* Sepia */
3845
+
3846
+ .sepia-0 {
3847
+ filter: sepia(0);
3848
+ }
3849
+
3850
+ .sepia {
3851
+ filter: sepia(1);
3852
+ }
3853
+
3854
+ .sepia-50 {
3855
+ filter: sepia(0.5);
3856
+ }
3857
+
3858
+ /* Drop Shadow */
3859
+
3860
+ .drop-shadow-sm {
3861
+ filter: drop-shadow(0 1px 1px rgb(0 0 0 / 0.05));
3862
+ }
3863
+
3864
+ .drop-shadow {
3865
+ filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
3866
+ }
3867
+
3868
+ .drop-shadow-md {
3869
+ filter: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
3870
+ }
3871
+
3872
+ .drop-shadow-lg {
3873
+ filter: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));
3874
+ }
3875
+
3876
+ .drop-shadow-xl {
3877
+ filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
3878
+ }
3879
+
3880
+ .drop-shadow-2xl {
3881
+ filter: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
3882
+ }
3883
+
3884
+ .drop-shadow-none {
3885
+ filter: drop-shadow(0 0 #0000);
3886
+ }
3887
+
3888
+ /* Backdrop Blur */
3889
+
3890
+ .backdrop-blur-none {
3891
+ backdrop-filter: blur(0);
3892
+ }
3893
+
3894
+ .backdrop-blur-sm {
3895
+ backdrop-filter: blur(4px);
3896
+ }
3897
+
3898
+ .backdrop-blur {
3899
+ backdrop-filter: blur(8px);
3900
+ }
3901
+
3902
+ .backdrop-blur-md {
3903
+ backdrop-filter: blur(12px);
3904
+ }
3905
+
3906
+ .backdrop-blur-lg {
3907
+ backdrop-filter: blur(16px);
3908
+ }
3909
+
3910
+ .backdrop-blur-xl {
3911
+ backdrop-filter: blur(24px);
3912
+ }
3913
+
3914
+ .backdrop-blur-2xl {
3915
+ backdrop-filter: blur(40px);
3916
+ }
3917
+
3918
+ .backdrop-blur-3xl {
3919
+ backdrop-filter: blur(64px);
3920
+ }
3921
+
3922
+ /* Backdrop Brightness */
3923
+
3924
+ .backdrop-brightness-50 {
3925
+ backdrop-filter: brightness(0.5);
3926
+ }
3927
+
3928
+ .backdrop-brightness-75 {
3929
+ backdrop-filter: brightness(0.75);
3930
+ }
3931
+
3932
+ .backdrop-brightness-90 {
3933
+ backdrop-filter: brightness(0.9);
3934
+ }
3935
+
3936
+ .backdrop-brightness-100 {
3937
+ backdrop-filter: brightness(1);
3938
+ }
3939
+
3940
+ .backdrop-brightness-110 {
3941
+ backdrop-filter: brightness(1.1);
3942
+ }
3943
+
3944
+ .backdrop-brightness-125 {
3945
+ backdrop-filter: brightness(1.25);
3946
+ }
3947
+
3948
+ .backdrop-brightness-150 {
3949
+ backdrop-filter: brightness(1.5);
3950
+ }
3951
+
3952
+ /* Backdrop Saturate */
3953
+
3954
+ .backdrop-saturate-0 {
3955
+ backdrop-filter: saturate(0);
3956
+ }
3957
+
3958
+ .backdrop-saturate-50 {
3959
+ backdrop-filter: saturate(0.5);
3960
+ }
3961
+
3962
+ .backdrop-saturate-100 {
3963
+ backdrop-filter: saturate(1);
3964
+ }
3965
+
3966
+ .backdrop-saturate-150 {
3967
+ backdrop-filter: saturate(1.5);
3968
+ }
3969
+
3970
+ .backdrop-saturate-200 {
3971
+ backdrop-filter: saturate(2);
3972
+ }
3973
+
3974
+ /* Combined Filter Presets */
3975
+
3976
+ .filter-none {
3977
+ filter: none;
3978
+ }
3979
+
3980
+ .filter-vintage {
3981
+ filter: sepia(0.5) contrast(1.2) brightness(0.9);
3982
+ }
2392
3983
 
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);
3984
+ .filter-dramatic {
3985
+ filter: contrast(1.5) saturate(1.3);
3986
+ }
2406
3987
 
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);
3988
+ .filter-soft {
3989
+ filter: blur(2px) brightness(1.1);
3990
+ }
2412
3991
 
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);
3992
+ .filter-cold {
3993
+ filter: saturate(0.8) hue-rotate(15deg);
3994
+ }
3995
+
3996
+ .filter-warm {
3997
+ filter: saturate(1.2) hue-rotate(-15deg);
2428
3998
  }
2429
3999
 
2430
4000
 
@@ -2434,11 +4004,11 @@ code, pre {
2434
4004
  ============================================ */
2435
4005
 
2436
4006
  /*!
2437
- * Domma Grid CSS v0.3.0-alpha.0
4007
+ * Domma Grid CSS v0.5.0-alpha
2438
4008
  * Dynamic Object Manipulation & Modeling API
2439
4009
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2440
- * Built: 2026-01-02T14:32:25.394Z
2441
- * Commit: bc8e519
4010
+ * Built: 2026-01-06T00:30:49.174Z
4011
+ * Commit: 72b7845
2442
4012
  */
2443
4013
 
2444
4014
  /**
@@ -2979,11 +4549,11 @@ code, pre {
2979
4549
  ============================================ */
2980
4550
 
2981
4551
  /*!
2982
- * Domma Elements CSS v0.3.0-alpha.0
4552
+ * Domma Elements CSS v0.5.0-alpha
2983
4553
  * Dynamic Object Manipulation & Modeling API
2984
4554
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2985
- * Built: 2026-01-02T14:32:25.401Z
2986
- * Commit: bc8e519
4555
+ * Built: 2026-01-06T00:30:49.181Z
4556
+ * Commit: 72b7845
2987
4557
  */
2988
4558
 
2989
4559
  /**
@@ -3238,6 +4808,40 @@ code, pre {
3238
4808
  text-decoration: none;
3239
4809
  }
3240
4810
 
4811
+ /* Collapsible card styles */
4812
+ .card-collapsible .card-header {
4813
+ cursor: pointer;
4814
+ display: flex;
4815
+ align-items: center;
4816
+ justify-content: space-between;
4817
+ user-select: none;
4818
+ }
4819
+
4820
+ .card-header-content {
4821
+ flex: 1;
4822
+ }
4823
+
4824
+ .card-collapse-icon {
4825
+ transition: transform var(--dm-transition-normal);
4826
+ flex-shrink: 0;
4827
+ margin-left: var(--dm-space-2);
4828
+ }
4829
+
4830
+ .card-collapsed .card-collapse-icon {
4831
+ transform: rotate(-90deg);
4832
+ }
4833
+
4834
+ .card-collapsible .card-body {
4835
+ overflow: hidden;
4836
+ transition: height var(--dm-transition-normal);
4837
+ }
4838
+
4839
+ .card-collapsed .card-body {
4840
+ height: 0 !important;
4841
+ padding-top: 0;
4842
+ padding-bottom: 0;
4843
+ }
4844
+
3241
4845
 
3242
4846
  /* ============================================
3243
4847
  MODAL
@@ -7929,12 +9533,12 @@ code {
7929
9533
  .dm-timeline-centered {
7930
9534
  /* Switch to vertical layout on mobile */
7931
9535
  }
7932
-
9536
+
7933
9537
  .dm-timeline-centered::before {
7934
9538
  left: 30px;
7935
9539
  transform: none;
7936
9540
  }
7937
-
9541
+
7938
9542
  .dm-timeline-centered .dm-timeline-item,
7939
9543
  .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7940
9544
  width: 100%;
@@ -7943,7 +9547,7 @@ code {
7943
9547
  padding-right: 0;
7944
9548
  justify-content: flex-start;
7945
9549
  }
7946
-
9550
+
7947
9551
  .dm-timeline-centered .dm-timeline-year,
7948
9552
  .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7949
9553
  order: 0;
@@ -7953,17 +9557,17 @@ code {
7953
9557
  left: 0;
7954
9558
  width: 80px;
7955
9559
  }
7956
-
9560
+
7957
9561
  .dm-timeline-horizontal {
7958
9562
  flex-direction: column;
7959
9563
  }
7960
-
9564
+
7961
9565
  .dm-timeline-horizontal .dm-timeline-item {
7962
9566
  flex-direction: row;
7963
9567
  min-width: auto;
7964
9568
  margin-bottom: var(--dm-space-6);
7965
9569
  }
7966
-
9570
+
7967
9571
  .dm-timeline-horizontal .dm-timeline-year {
7968
9572
  margin-bottom: 0;
7969
9573
  margin-right: var(--dm-space-4);
@@ -7996,6 +9600,299 @@ code {
7996
9600
  border-color: var(--dm-slate-600);
7997
9601
  }
7998
9602
 
9603
+ /* ==============================================
9604
+ Cookie Consent Component
9605
+ ============================================== */
9606
+
9607
+ .dm-cookie-consent {
9608
+ position: fixed;
9609
+ z-index: 9999;
9610
+ font-size: 14px;
9611
+ line-height: 1.5;
9612
+ }
9613
+
9614
+ /* Position variants */
9615
+ .dm-cookie-consent-bottom {
9616
+ bottom: 0;
9617
+ left: 0;
9618
+ right: 0;
9619
+ }
9620
+
9621
+ .dm-cookie-consent-top {
9622
+ top: 0;
9623
+ left: 0;
9624
+ right: 0;
9625
+ }
9626
+
9627
+ .dm-cookie-consent-bottom-left {
9628
+ bottom: 20px;
9629
+ left: 20px;
9630
+ max-width: 400px;
9631
+ }
9632
+
9633
+ .dm-cookie-consent-bottom-right {
9634
+ bottom: 20px;
9635
+ right: 20px;
9636
+ max-width: 400px;
9637
+ }
9638
+
9639
+ .dm-cookie-consent-center-modal {
9640
+ top: 50%;
9641
+ left: 50%;
9642
+ transform: translate(-50%, -50%);
9643
+ max-width: 600px;
9644
+ width: 90%;
9645
+ }
9646
+
9647
+ /* Layout variants */
9648
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9649
+ display: flex;
9650
+ align-items: center;
9651
+ justify-content: space-between;
9652
+ padding: 16px 20px;
9653
+ gap: 20px;
9654
+ }
9655
+
9656
+ .dm-cookie-consent-box .dm-cookie-consent-content {
9657
+ padding: 24px;
9658
+ border-radius: 8px;
9659
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
9660
+ }
9661
+
9662
+ .dm-cookie-consent-modal .dm-cookie-consent-content {
9663
+ padding: 32px;
9664
+ border-radius: 12px;
9665
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
9666
+ }
9667
+
9668
+ /* Theme variants */
9669
+ .dm-cookie-consent-light .dm-cookie-consent-content {
9670
+ background: white;
9671
+ color: #333;
9672
+ border: 1px solid #e5e5e5;
9673
+ }
9674
+
9675
+ .dm-cookie-consent-light a {
9676
+ color: var(--dm-primary);
9677
+ }
9678
+
9679
+ .dm-cookie-consent-dark .dm-cookie-consent-content {
9680
+ background: #1f2937;
9681
+ color: #f3f4f6;
9682
+ border: 1px solid #374151;
9683
+ }
9684
+
9685
+ .dm-cookie-consent-dark a {
9686
+ color: #60a5fa;
9687
+ }
9688
+
9689
+ /* Message styles */
9690
+ .dm-cookie-consent-message {
9691
+ flex: 1;
9692
+ margin-right: 20px;
9693
+ }
9694
+
9695
+ .dm-cookie-consent-message a {
9696
+ text-decoration: underline;
9697
+ margin: 0 4px;
9698
+ }
9699
+
9700
+ .dm-cookie-consent-message a:hover {
9701
+ opacity: 0.8;
9702
+ }
9703
+
9704
+ /* Button styles */
9705
+ .dm-cookie-consent-buttons {
9706
+ display: flex;
9707
+ gap: 12px;
9708
+ flex-shrink: 0;
9709
+ }
9710
+
9711
+ /* Animation */
9712
+ .dm-cookie-consent-animated {
9713
+ transition: all 0.3s ease;
9714
+ }
9715
+
9716
+ .dm-cookie-consent-bottom.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9717
+ transform: translateY(100%);
9718
+ }
9719
+
9720
+ .dm-cookie-consent-top.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9721
+ transform: translateY(-100%);
9722
+ }
9723
+
9724
+ .dm-cookie-consent-bottom-left.dm-cookie-consent-animated:not(.dm-cookie-consent-visible),
9725
+ .dm-cookie-consent-bottom-right.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9726
+ transform: translateY(20px);
9727
+ opacity: 0;
9728
+ }
9729
+
9730
+ .dm-cookie-consent-center-modal.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9731
+ transform: translate(-50%, -50%) scale(0.95);
9732
+ opacity: 0;
9733
+ }
9734
+
9735
+ /* Backdrop */
9736
+ .dm-cookie-consent-backdrop {
9737
+ position: fixed;
9738
+ top: 0;
9739
+ left: 0;
9740
+ right: 0;
9741
+ bottom: 0;
9742
+ background: rgba(0, 0, 0, 0.5);
9743
+ z-index: -1;
9744
+ }
9745
+
9746
+ /* Customize Modal */
9747
+ .dm-cookie-consent-modal {
9748
+ display: none;
9749
+ position: fixed;
9750
+ top: 0;
9751
+ left: 0;
9752
+ right: 0;
9753
+ bottom: 0;
9754
+ z-index: 10000;
9755
+ align-items: center;
9756
+ justify-content: center;
9757
+ }
9758
+
9759
+ .dm-cookie-consent-modal-backdrop {
9760
+ position: absolute;
9761
+ top: 0;
9762
+ left: 0;
9763
+ right: 0;
9764
+ bottom: 0;
9765
+ background: rgba(0, 0, 0, 0.5);
9766
+ }
9767
+
9768
+ .dm-cookie-consent-modal-content {
9769
+ position: relative;
9770
+ background: white;
9771
+ border-radius: 12px;
9772
+ max-width: 600px;
9773
+ width: 90%;
9774
+ max-height: 80vh;
9775
+ overflow: auto;
9776
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
9777
+ }
9778
+
9779
+ .dm-cookie-consent-modal-header {
9780
+ padding: 24px;
9781
+ border-bottom: 1px solid #e5e5e5;
9782
+ display: flex;
9783
+ justify-content: space-between;
9784
+ align-items: center;
9785
+ }
9786
+
9787
+ .dm-cookie-consent-modal-header h3 {
9788
+ margin: 0;
9789
+ font-size: 20px;
9790
+ font-weight: 600;
9791
+ }
9792
+
9793
+ .dm-cookie-consent-modal-close {
9794
+ background: none;
9795
+ border: none;
9796
+ font-size: 24px;
9797
+ cursor: pointer;
9798
+ color: #666;
9799
+ padding: 0;
9800
+ width: 32px;
9801
+ height: 32px;
9802
+ display: flex;
9803
+ align-items: center;
9804
+ justify-content: center;
9805
+ border-radius: 4px;
9806
+ transition: all 0.2s;
9807
+ }
9808
+
9809
+ .dm-cookie-consent-modal-close:hover {
9810
+ background: #f5f5f5;
9811
+ }
9812
+
9813
+ .dm-cookie-consent-modal-body {
9814
+ padding: 24px;
9815
+ }
9816
+
9817
+ .dm-cookie-consent-category {
9818
+ margin-bottom: 20px;
9819
+ padding-bottom: 20px;
9820
+ border-bottom: 1px solid #e5e5e5;
9821
+ }
9822
+
9823
+ .dm-cookie-consent-category:last-child {
9824
+ border-bottom: none;
9825
+ margin-bottom: 0;
9826
+ padding-bottom: 0;
9827
+ }
9828
+
9829
+ .dm-cookie-consent-category-label {
9830
+ display: flex;
9831
+ align-items: flex-start;
9832
+ cursor: pointer;
9833
+ }
9834
+
9835
+ .dm-cookie-consent-category-toggle {
9836
+ margin-right: 12px;
9837
+ margin-top: 2px;
9838
+ }
9839
+
9840
+ .dm-cookie-consent-category-toggle:disabled {
9841
+ cursor: not-allowed;
9842
+ opacity: 0.5;
9843
+ }
9844
+
9845
+ .dm-cookie-consent-category-info {
9846
+ flex: 1;
9847
+ }
9848
+
9849
+ .dm-cookie-consent-category-name {
9850
+ font-weight: 500;
9851
+ margin-bottom: 4px;
9852
+ }
9853
+
9854
+ .dm-cookie-consent-required {
9855
+ color: #666;
9856
+ font-size: 12px;
9857
+ }
9858
+
9859
+ .dm-cookie-consent-category-description {
9860
+ color: #666;
9861
+ font-size: 13px;
9862
+ }
9863
+
9864
+ .dm-cookie-consent-modal-footer {
9865
+ padding: 24px;
9866
+ border-top: 1px solid #e5e5e5;
9867
+ display: flex;
9868
+ justify-content: flex-end;
9869
+ gap: 12px;
9870
+ }
9871
+
9872
+ /* Responsive */
9873
+ @media (max-width: 640px) {
9874
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9875
+ flex-direction: column;
9876
+ align-items: stretch;
9877
+ }
9878
+
9879
+ .dm-cookie-consent-message {
9880
+ margin-right: 0;
9881
+ margin-bottom: 16px;
9882
+ }
9883
+
9884
+ .dm-cookie-consent-buttons {
9885
+ flex-direction: column;
9886
+ }
9887
+
9888
+ .dm-cookie-consent-bottom-left,
9889
+ .dm-cookie-consent-bottom-right {
9890
+ left: 10px;
9891
+ right: 10px;
9892
+ max-width: none;
9893
+ }
9894
+ }
9895
+
7999
9896
 
8000
9897
  /* ============================================
8001
9898
  THEME SYSTEM
@@ -8003,11 +9900,11 @@ code {
8003
9900
  ============================================ */
8004
9901
 
8005
9902
  /*!
8006
- * Domma Themes v0.3.0-alpha.0
9903
+ * Domma Themes v0.5.0-alpha
8007
9904
  * Dynamic Object Manipulation & Modeling API
8008
9905
  * (c) 2026 Darryl Waterhouse & DCBW-IT
8009
- * Built: 2026-01-02T14:32:25.353Z
8010
- * Commit: bc8e519
9906
+ * Built: 2026-01-06T00:30:49.133Z
9907
+ * Commit: 72b7845
8011
9908
  */
8012
9909
 
8013
9910
  /**