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 Minimal CSS Bundle v0.3.0-alpha.0
2
+ * Domma Minimal 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.759Z
5
+ * Built: 2026-01-06T00:30:49.487Z
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
  ============================================ */
@@ -2418,13 +3049,952 @@ code, pre {
2418
3049
  --dm-glow-md: 0 0 20px rgba(255, 255, 255, 0.6);
2419
3050
  --dm-glow-lg: 0 0 30px rgba(255, 255, 255, 0.7);
2420
3051
  --dm-glow-xl: 0 0 40px rgba(255, 255, 255, 0.8);
2421
-
3052
+
2422
3053
  --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 0.6);
2423
3054
  --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 0.6);
2424
3055
  --dm-glow-success: 0 0 20px rgba(34, 197, 94, 0.6);
2425
3056
  --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 0.6);
2426
3057
  --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 0.6);
2427
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
+ }
3983
+
3984
+ .filter-dramatic {
3985
+ filter: contrast(1.5) saturate(1.3);
3986
+ }
3987
+
3988
+ .filter-soft {
3989
+ filter: blur(2px) brightness(1.1);
3990
+ }
3991
+
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
  /**