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,9 +1,9 @@
1
1
  /*!
2
- * Domma Core CSS v0.3.0-alpha.0
2
+ * Domma Core CSS 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.385Z
6
- * Commit: bc8e519
5
+ * Built: 2026-01-06T00:30:49.167Z
6
+ * Commit: 72b7845
7
7
  */
8
8
 
9
9
  /**
@@ -265,6 +265,44 @@
265
265
  --dm-shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
266
266
  --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
267
267
 
268
+ /* Glow effects - STRONG AND VIBRANT */
269
+ --dm-glow-sm: 0 0 15px rgba(59, 130, 246, 0.8),
270
+ 0 0 30px rgba(59, 130, 246, 0.6);
271
+ --dm-glow: 0 0 20px rgba(59, 130, 246, 0.9),
272
+ 0 0 40px rgba(59, 130, 246, 0.7),
273
+ 0 0 60px rgba(59, 130, 246, 0.5);
274
+ --dm-glow-md: 0 0 25px rgba(59, 130, 246, 1),
275
+ 0 0 50px rgba(59, 130, 246, 0.8),
276
+ 0 0 75px rgba(59, 130, 246, 0.6);
277
+ --dm-glow-lg: 0 0 30px rgba(59, 130, 246, 1),
278
+ 0 0 60px rgba(59, 130, 246, 0.9),
279
+ 0 0 90px rgba(59, 130, 246, 0.7),
280
+ 0 0 120px rgba(59, 130, 246, 0.5);
281
+ --dm-glow-xl: 0 0 40px rgba(59, 130, 246, 1),
282
+ 0 0 80px rgba(59, 130, 246, 0.9),
283
+ 0 0 120px rgba(59, 130, 246, 0.7),
284
+ 0 0 160px rgba(59, 130, 246, 0.5);
285
+
286
+ /* Colour-specific glows - INTENSE */
287
+ --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 1),
288
+ 0 0 40px rgba(59, 130, 246, 0.8),
289
+ 0 0 60px rgba(59, 130, 246, 0.6);
290
+ --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 1),
291
+ 0 0 40px rgba(139, 92, 246, 0.8),
292
+ 0 0 60px rgba(139, 92, 246, 0.6);
293
+ --dm-glow-success: 0 0 20px rgba(34, 197, 94, 1),
294
+ 0 0 40px rgba(34, 197, 94, 0.8),
295
+ 0 0 60px rgba(34, 197, 94, 0.6);
296
+ --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 1),
297
+ 0 0 40px rgba(245, 158, 11, 0.8),
298
+ 0 0 60px rgba(245, 158, 11, 0.6);
299
+ --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 1),
300
+ 0 0 40px rgba(239, 68, 68, 0.8),
301
+ 0 0 60px rgba(239, 68, 68, 0.6);
302
+ --dm-glow-info: 0 0 20px rgba(14, 165, 233, 1),
303
+ 0 0 40px rgba(14, 165, 233, 0.8),
304
+ 0 0 60px rgba(14, 165, 233, 0.6);
305
+
268
306
  /* ================================================
269
307
  TRANSPARENCY & OPACITY
270
308
  ================================================ */
@@ -1476,6 +1514,505 @@ code, pre {
1476
1514
  transition: text-shadow 0.3s ease;
1477
1515
  }
1478
1516
 
1517
+ .glow-secondary-hover:hover {
1518
+ text-shadow: var(--dm-glow-secondary);
1519
+ transition: text-shadow 0.3s ease;
1520
+ }
1521
+
1522
+ .glow-info-hover:hover {
1523
+ text-shadow: var(--dm-glow-info);
1524
+ transition: text-shadow 0.3s ease;
1525
+ }
1526
+
1527
+ /* ============================================
1528
+ FIREWORKS EFFECTS
1529
+ Realistic particle-based fireworks animations
1530
+ ============================================ */
1531
+
1532
+ /* Firework CSS Variables */
1533
+ :root {
1534
+ --dm-fw-launch-height: 200px;
1535
+ --dm-fw-explosion-size: 150px;
1536
+ --dm-fw-particle-size: 2px;
1537
+ --dm-fw-duration: 3s;
1538
+ --dm-fw-delay: 0s;
1539
+
1540
+ /* Default firework colours - bright, vibrant colours */
1541
+ --dm-fw-color-1: #ffeb3b; /* Bright Yellow */
1542
+ --dm-fw-color-2: #ff4444; /* Bright Red */
1543
+ --dm-fw-color-3: #44ffdd; /* Cyan */
1544
+ --dm-fw-color-4: #4488ff; /* Bright Blue */
1545
+ --dm-fw-color-5: #ff8844; /* Orange */
1546
+ --dm-fw-color-6: #ff44ff; /* Magenta */
1547
+ --dm-fw-color-7: #44ff88; /* Lime */
1548
+ --dm-fw-color-8: #ffff88; /* Light Yellow */
1549
+ }
1550
+
1551
+ /* Base firework container */
1552
+ .firework {
1553
+ position: relative;
1554
+ display: inline-block;
1555
+ pointer-events: none;
1556
+ width: var(--dm-fw-explosion-size);
1557
+ height: calc(var(--dm-fw-launch-height) + var(--dm-fw-explosion-size));
1558
+ overflow: visible;
1559
+ }
1560
+
1561
+ /* Rocket trail that launches upward */
1562
+ .firework-launch {
1563
+ position: absolute;
1564
+ bottom: 0;
1565
+ left: 50%;
1566
+ width: 3px;
1567
+ height: 8px;
1568
+ background: linear-gradient(to top, transparent, #ffa500, #fff);
1569
+ transform: translateX(-50%);
1570
+ animation: dm-fw-launch 1s ease-out forwards;
1571
+ }
1572
+
1573
+ .firework-launch::after {
1574
+ content: '';
1575
+ position: absolute;
1576
+ bottom: -10px;
1577
+ left: 50%;
1578
+ width: 2px;
1579
+ height: 20px;
1580
+ background: linear-gradient(to top, transparent, rgba(255, 165, 0, 0.3));
1581
+ transform: translateX(-50%);
1582
+ filter: blur(2px);
1583
+ }
1584
+
1585
+ /* Explosion particles */
1586
+ .firework-particles {
1587
+ position: absolute;
1588
+ top: 0;
1589
+ left: 50%;
1590
+ width: var(--dm-fw-explosion-size);
1591
+ height: var(--dm-fw-explosion-size);
1592
+ transform: translateX(-50%);
1593
+ opacity: 0;
1594
+ animation-delay: 1s; /* Wait for launch */
1595
+ }
1596
+
1597
+ /* Main burst - creates many particles using box-shadow */
1598
+ .firework-burst .firework-particles::before {
1599
+ content: '';
1600
+ position: absolute;
1601
+ top: 50%;
1602
+ left: 50%;
1603
+ width: var(--dm-fw-particle-size);
1604
+ height: var(--dm-fw-particle-size);
1605
+ background: var(--dm-fw-color-1);
1606
+ border-radius: 50%;
1607
+ transform: translate(-50%, -50%);
1608
+ animation: dm-fw-explode 2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1609
+ box-shadow: /* Ring 1 - 8 particles at 30° intervals */ 0 0 3px var(--dm-fw-color-1),
1610
+ 0 -20px 0 0 var(--dm-fw-color-1),
1611
+ 14px -14px 0 0 var(--dm-fw-color-2),
1612
+ 20px 0 0 0 var(--dm-fw-color-3),
1613
+ 14px 14px 0 0 var(--dm-fw-color-4),
1614
+ 0 20px 0 0 var(--dm-fw-color-5),
1615
+ -14px 14px 0 0 var(--dm-fw-color-6),
1616
+ -20px 0 0 0 var(--dm-fw-color-7),
1617
+ -14px -14px 0 0 var(--dm-fw-color-8),
1618
+ /* Ring 2 - 12 particles */ 0 -35px 0 0 var(--dm-fw-color-2),
1619
+ 17px -30px 0 0 var(--dm-fw-color-3),
1620
+ 30px -17px 0 0 var(--dm-fw-color-4),
1621
+ 35px 0 0 0 var(--dm-fw-color-5),
1622
+ 30px 17px 0 0 var(--dm-fw-color-6),
1623
+ 17px 30px 0 0 var(--dm-fw-color-7),
1624
+ 0 35px 0 0 var(--dm-fw-color-8),
1625
+ -17px 30px 0 0 var(--dm-fw-color-1),
1626
+ -30px 17px 0 0 var(--dm-fw-color-2),
1627
+ -35px 0 0 0 var(--dm-fw-color-3),
1628
+ -30px -17px 0 0 var(--dm-fw-color-4),
1629
+ -17px -30px 0 0 var(--dm-fw-color-5),
1630
+ /* Ring 3 - 16 particles */ 0 -50px 0 0 var(--dm-fw-color-6),
1631
+ 19px -46px 0 0 var(--dm-fw-color-7),
1632
+ 35px -35px 0 0 var(--dm-fw-color-8),
1633
+ 46px -19px 0 0 var(--dm-fw-color-1),
1634
+ 50px 0 0 0 var(--dm-fw-color-2),
1635
+ 46px 19px 0 0 var(--dm-fw-color-3),
1636
+ 35px 35px 0 0 var(--dm-fw-color-4),
1637
+ 19px 46px 0 0 var(--dm-fw-color-5),
1638
+ 0 50px 0 0 var(--dm-fw-color-6),
1639
+ -19px 46px 0 0 var(--dm-fw-color-7),
1640
+ -35px 35px 0 0 var(--dm-fw-color-8),
1641
+ -46px 19px 0 0 var(--dm-fw-color-1),
1642
+ -50px 0 0 0 var(--dm-fw-color-2),
1643
+ -46px -19px 0 0 var(--dm-fw-color-3),
1644
+ -35px -35px 0 0 var(--dm-fw-color-4),
1645
+ -19px -46px 0 0 var(--dm-fw-color-5);
1646
+ }
1647
+
1648
+ /* Secondary layer for more particles and trailing effect */
1649
+ .firework-burst .firework-particles::after {
1650
+ content: '';
1651
+ position: absolute;
1652
+ top: 50%;
1653
+ left: 50%;
1654
+ width: calc(var(--dm-fw-particle-size) * 0.8);
1655
+ height: calc(var(--dm-fw-particle-size) * 0.8);
1656
+ background: var(--dm-fw-color-3);
1657
+ border-radius: 50%;
1658
+ transform: translate(-50%, -50%);
1659
+ animation: dm-fw-explode-secondary 2.2s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
1660
+ box-shadow: /* Offset particles for depth */ 0 0 2px var(--dm-fw-color-3),
1661
+ 10px -25px 0 0 var(--dm-fw-color-4),
1662
+ 25px -10px 0 0 var(--dm-fw-color-5),
1663
+ 25px 10px 0 0 var(--dm-fw-color-6),
1664
+ 10px 25px 0 0 var(--dm-fw-color-7),
1665
+ -10px 25px 0 0 var(--dm-fw-color-8),
1666
+ -25px 10px 0 0 var(--dm-fw-color-1),
1667
+ -25px -10px 0 0 var(--dm-fw-color-2),
1668
+ -10px -25px 0 0 var(--dm-fw-color-3),
1669
+ /* Extra sparkles */ 8px -42px 0 0 var(--dm-fw-color-4),
1670
+ 42px -8px 0 0 var(--dm-fw-color-5),
1671
+ 42px 8px 0 0 var(--dm-fw-color-6),
1672
+ 8px 42px 0 0 var(--dm-fw-color-7),
1673
+ -8px 42px 0 0 var(--dm-fw-color-8),
1674
+ -42px 8px 0 0 var(--dm-fw-color-1),
1675
+ -42px -8px 0 0 var(--dm-fw-color-2),
1676
+ -8px -42px 0 0 var(--dm-fw-color-3);
1677
+ }
1678
+
1679
+ /* Sparkle animation - twinkling particles */
1680
+ .firework-sparkle::before {
1681
+ width: 2px;
1682
+ height: 2px;
1683
+ background: white;
1684
+ box-shadow: /* Create sparkle pattern */ 0 0 3px 1px rgba(255, 255, 255, 0.8),
1685
+ 10px -10px 0 0 var(--dm-fw-color-1),
1686
+ 10px -10px 3px 1px var(--dm-fw-color-1),
1687
+ -10px -10px 0 0 var(--dm-fw-color-2),
1688
+ -10px -10px 3px 1px var(--dm-fw-color-2),
1689
+ -10px 10px 0 0 var(--dm-fw-color-3),
1690
+ -10px 10px 3px 1px var(--dm-fw-color-3),
1691
+ 10px 10px 0 0 var(--dm-fw-color-4),
1692
+ 10px 10px 3px 1px var(--dm-fw-color-4),
1693
+ 20px 0 0 0 var(--dm-fw-color-5),
1694
+ 20px 0 3px 1px var(--dm-fw-color-5),
1695
+ -20px 0 0 0 var(--dm-fw-color-6),
1696
+ -20px 0 3px 1px var(--dm-fw-color-6),
1697
+ 0 20px 0 0 var(--dm-fw-color-7),
1698
+ 0 20px 3px 1px var(--dm-fw-color-7),
1699
+ 0 -20px 0 0 var(--dm-fw-color-8),
1700
+ 0 -20px 3px 1px var(--dm-fw-color-8);
1701
+ animation: dm-firework-sparkle var(--dm-fw-duration) ease-out forwards;
1702
+ animation-delay: var(--dm-fw-delay);
1703
+ opacity: 0;
1704
+ }
1705
+
1706
+ .firework-sparkle::after {
1707
+ width: 2px;
1708
+ height: 2px;
1709
+ background: white;
1710
+ box-shadow: /* Secondary sparkle layer */ 15px -15px 0 0 var(--dm-fw-color-1),
1711
+ 15px -15px 4px 2px rgba(255, 235, 59, 0.5),
1712
+ -15px -15px 0 0 var(--dm-fw-color-3),
1713
+ -15px -15px 4px 2px rgba(78, 205, 196, 0.5),
1714
+ -15px 15px 0 0 var(--dm-fw-color-5),
1715
+ -15px 15px 4px 2px rgba(243, 156, 18, 0.5),
1716
+ 15px 15px 0 0 var(--dm-fw-color-7),
1717
+ 15px 15px 4px 2px rgba(253, 121, 168, 0.5);
1718
+ animation: dm-firework-sparkle-alt var(--dm-fw-duration) ease-out forwards;
1719
+ animation-delay: calc(var(--dm-fw-delay) + 0.2s);
1720
+ opacity: 0;
1721
+ }
1722
+
1723
+ /* Trail animation - launch and falling particles */
1724
+ .firework-trail::before {
1725
+ width: 3px;
1726
+ height: 3px;
1727
+ background: var(--dm-fw-color-1);
1728
+ box-shadow: 0 0 10px 2px var(--dm-fw-color-1),
1729
+ 0 5px 2px 0 rgba(255, 235, 59, 0.8),
1730
+ 0 10px 2px 0 rgba(255, 235, 59, 0.6),
1731
+ 0 15px 2px 0 rgba(255, 235, 59, 0.4),
1732
+ 0 20px 2px 0 rgba(255, 235, 59, 0.2);
1733
+ animation: dm-firework-launch var(--dm-fw-duration) ease-out forwards;
1734
+ animation-delay: var(--dm-fw-delay);
1735
+ }
1736
+
1737
+ /* Size variants */
1738
+ .firework-sm::before,
1739
+ .firework-sm::after {
1740
+ width: var(--dm-fw-size-sm);
1741
+ height: var(--dm-fw-size-sm);
1742
+ }
1743
+
1744
+ .firework-md::before,
1745
+ .firework-md::after {
1746
+ width: var(--dm-fw-size-md);
1747
+ height: var(--dm-fw-size-md);
1748
+ }
1749
+
1750
+ .firework-lg::before,
1751
+ .firework-lg::after {
1752
+ width: var(--dm-fw-size-lg);
1753
+ height: var(--dm-fw-size-lg);
1754
+ }
1755
+
1756
+ .firework-xl::before,
1757
+ .firework-xl::after {
1758
+ width: var(--dm-fw-size-xl);
1759
+ height: var(--dm-fw-size-xl);
1760
+ }
1761
+
1762
+ /* Colour variants */
1763
+ .firework-primary {
1764
+ --dm-fw-color-1: var(--dm-primary);
1765
+ --dm-fw-color-2: var(--dm-primary-light);
1766
+ --dm-fw-color-3: var(--dm-primary-dark);
1767
+ --dm-fw-color-4: var(--dm-primary);
1768
+ --dm-fw-color-5: var(--dm-primary);
1769
+ --dm-fw-color-6: var(--dm-primary-light);
1770
+ --dm-fw-color-7: var(--dm-primary-dark);
1771
+ --dm-fw-color-8: var(--dm-primary);
1772
+ }
1773
+
1774
+ .firework-secondary {
1775
+ --dm-fw-color-1: var(--dm-secondary);
1776
+ --dm-fw-color-2: var(--dm-secondary-light);
1777
+ --dm-fw-color-3: var(--dm-secondary-dark);
1778
+ --dm-fw-color-4: var(--dm-secondary);
1779
+ --dm-fw-color-5: var(--dm-secondary);
1780
+ --dm-fw-color-6: var(--dm-secondary-light);
1781
+ --dm-fw-color-7: var(--dm-secondary-dark);
1782
+ --dm-fw-color-8: var(--dm-secondary);
1783
+ }
1784
+
1785
+ .firework-success {
1786
+ --dm-fw-color-1: var(--dm-success);
1787
+ --dm-fw-color-2: var(--dm-success-light);
1788
+ --dm-fw-color-3: var(--dm-success-dark);
1789
+ --dm-fw-color-4: var(--dm-success);
1790
+ --dm-fw-color-5: var(--dm-success);
1791
+ --dm-fw-color-6: var(--dm-success-light);
1792
+ --dm-fw-color-7: var(--dm-success-dark);
1793
+ --dm-fw-color-8: var(--dm-success);
1794
+ }
1795
+
1796
+ .firework-warning {
1797
+ --dm-fw-color-1: var(--dm-warning);
1798
+ --dm-fw-color-2: var(--dm-warning-light);
1799
+ --dm-fw-color-3: var(--dm-warning-dark);
1800
+ --dm-fw-color-4: var(--dm-warning);
1801
+ --dm-fw-color-5: var(--dm-warning);
1802
+ --dm-fw-color-6: var(--dm-warning-light);
1803
+ --dm-fw-color-7: var(--dm-warning-dark);
1804
+ --dm-fw-color-8: var(--dm-warning);
1805
+ }
1806
+
1807
+ .firework-danger {
1808
+ --dm-fw-color-1: var(--dm-danger);
1809
+ --dm-fw-color-2: var(--dm-danger-light);
1810
+ --dm-fw-color-3: var(--dm-danger-dark);
1811
+ --dm-fw-color-4: var(--dm-danger);
1812
+ --dm-fw-color-5: var(--dm-danger);
1813
+ --dm-fw-color-6: var(--dm-danger-light);
1814
+ --dm-fw-color-7: var(--dm-danger-dark);
1815
+ --dm-fw-color-8: var(--dm-danger);
1816
+ }
1817
+
1818
+ .firework-info {
1819
+ --dm-fw-color-1: var(--dm-info);
1820
+ --dm-fw-color-2: var(--dm-info-light);
1821
+ --dm-fw-color-3: var(--dm-info-dark);
1822
+ --dm-fw-color-4: var(--dm-info);
1823
+ --dm-fw-color-5: var(--dm-info);
1824
+ --dm-fw-color-6: var(--dm-info-light);
1825
+ --dm-fw-color-7: var(--dm-info-dark);
1826
+ --dm-fw-color-8: var(--dm-info);
1827
+ }
1828
+
1829
+ .firework-rainbow {
1830
+ --dm-fw-color-1: #ff0000;
1831
+ --dm-fw-color-2: #ff7f00;
1832
+ --dm-fw-color-3: #ffff00;
1833
+ --dm-fw-color-4: #00ff00;
1834
+ --dm-fw-color-5: #0000ff;
1835
+ --dm-fw-color-6: #4b0082;
1836
+ --dm-fw-color-7: #9400d3;
1837
+ --dm-fw-color-8: #ff1493;
1838
+ }
1839
+
1840
+ /* Continuous animation */
1841
+ .firework-continuous::before,
1842
+ .firework-continuous::after {
1843
+ animation-iteration-count: infinite;
1844
+ }
1845
+
1846
+ /* Trigger on hover */
1847
+ .firework-on-hover {
1848
+ position: relative;
1849
+ }
1850
+
1851
+ .firework-on-hover::before,
1852
+ .firework-on-hover::after {
1853
+ content: '';
1854
+ position: absolute;
1855
+ top: 50%;
1856
+ left: 50%;
1857
+ width: var(--dm-fw-size);
1858
+ height: var(--dm-fw-size);
1859
+ transform: translate(-50%, -50%);
1860
+ opacity: 0;
1861
+ pointer-events: none;
1862
+ }
1863
+
1864
+ .firework-on-hover:hover::before {
1865
+ background: var(--dm-fw-color-1);
1866
+ box-shadow: /* Inner ring - 8 particles */ 0 -30px 0 1px var(--dm-fw-color-1),
1867
+ 21px -21px 0 1px var(--dm-fw-color-2),
1868
+ 30px 0 0 1px var(--dm-fw-color-3),
1869
+ 21px 21px 0 1px var(--dm-fw-color-4),
1870
+ 0 30px 0 1px var(--dm-fw-color-5),
1871
+ -21px 21px 0 1px var(--dm-fw-color-6),
1872
+ -30px 0 0 1px var(--dm-fw-color-7),
1873
+ -21px -21px 0 1px var(--dm-fw-color-8),
1874
+ /* Outer ring */ 0 -50px 0 0 var(--dm-fw-color-2),
1875
+ 35px -35px 0 0 var(--dm-fw-color-3),
1876
+ 50px 0 0 0 var(--dm-fw-color-4),
1877
+ 35px 35px 0 0 var(--dm-fw-color-5),
1878
+ 0 50px 0 0 var(--dm-fw-color-6),
1879
+ -35px 35px 0 0 var(--dm-fw-color-7),
1880
+ -50px 0 0 0 var(--dm-fw-color-8),
1881
+ -35px -35px 0 0 var(--dm-fw-color-1);
1882
+ animation: dm-firework-burst 1.5s ease-out forwards;
1883
+ }
1884
+
1885
+ .firework-on-hover:hover::after {
1886
+ background: var(--dm-fw-color-3);
1887
+ box-shadow: 15px -40px 0 0 var(--dm-fw-color-1),
1888
+ 40px -15px 0 0 var(--dm-fw-color-3),
1889
+ 40px 15px 0 0 var(--dm-fw-color-5),
1890
+ 15px 40px 0 0 var(--dm-fw-color-7),
1891
+ -15px 40px 0 0 var(--dm-fw-color-2),
1892
+ -40px 15px 0 0 var(--dm-fw-color-4),
1893
+ -40px -15px 0 0 var(--dm-fw-color-6),
1894
+ -15px -40px 0 0 var(--dm-fw-color-8);
1895
+ animation: dm-firework-burst-secondary 1.5s ease-out forwards;
1896
+ }
1897
+
1898
+ /* Keyframe Animations */
1899
+
1900
+ /* Launch animation - rocket goes up */
1901
+ @keyframes dm-fw-launch {
1902
+ 0% {
1903
+ transform: translateX(-50%) translateY(0);
1904
+ opacity: 1;
1905
+ }
1906
+ 100% {
1907
+ transform: translateX(-50%) translateY(calc(-1 * var(--dm-fw-launch-height)));
1908
+ opacity: 0;
1909
+ }
1910
+ }
1911
+
1912
+ /* Main explosion - particles burst outward then fall with gravity */
1913
+ @keyframes dm-fw-explode {
1914
+ 0% {
1915
+ transform: translate(-50%, -50%) scale(0);
1916
+ opacity: 0;
1917
+ }
1918
+ 5% {
1919
+ transform: translate(-50%, -50%) scale(0.1);
1920
+ opacity: 1;
1921
+ }
1922
+ 25% {
1923
+ transform: translate(-50%, -50%) scale(2.5);
1924
+ opacity: 1;
1925
+ }
1926
+ 50% {
1927
+ transform: translate(-50%, -50%) scale(3.5) translateY(10px);
1928
+ opacity: 0.9;
1929
+ }
1930
+ 75% {
1931
+ transform: translate(-50%, -50%) scale(4) translateY(40px);
1932
+ opacity: 0.6;
1933
+ }
1934
+ 100% {
1935
+ transform: translate(-50%, -50%) scale(4.5) translateY(100px);
1936
+ opacity: 0;
1937
+ }
1938
+ }
1939
+
1940
+ /* Secondary explosion with slight delay and rotation */
1941
+ @keyframes dm-fw-explode-secondary {
1942
+ 0% {
1943
+ transform: translate(-50%, -50%) scale(0) rotate(0deg);
1944
+ opacity: 0;
1945
+ }
1946
+ 10% {
1947
+ transform: translate(-50%, -50%) scale(0.2) rotate(45deg);
1948
+ opacity: 1;
1949
+ }
1950
+ 30% {
1951
+ transform: translate(-50%, -50%) scale(2.2) rotate(90deg);
1952
+ opacity: 1;
1953
+ }
1954
+ 55% {
1955
+ transform: translate(-50%, -50%) scale(3.2) rotate(135deg) translateY(15px);
1956
+ opacity: 0.8;
1957
+ }
1958
+ 80% {
1959
+ transform: translate(-50%, -50%) scale(3.8) rotate(180deg) translateY(50px);
1960
+ opacity: 0.5;
1961
+ }
1962
+ 100% {
1963
+ transform: translate(-50%, -50%) scale(4.2) rotate(225deg) translateY(120px);
1964
+ opacity: 0;
1965
+ }
1966
+ }
1967
+
1968
+ /* Sparkle animation for twinkling effect */
1969
+ @keyframes dm-fw-sparkle {
1970
+ 0%, 100% {
1971
+ transform: translate(-50%, -50%) scale(1);
1972
+ opacity: 0;
1973
+ }
1974
+ 10% {
1975
+ transform: translate(-50%, -50%) scale(0.5);
1976
+ opacity: 1;
1977
+ }
1978
+ 50% {
1979
+ transform: translate(-50%, -50%) scale(1.5);
1980
+ opacity: 1;
1981
+ }
1982
+ 90% {
1983
+ transform: translate(-50%, -50%) scale(2) translateY(30px);
1984
+ opacity: 0;
1985
+ }
1986
+ }
1987
+
1988
+ /* Crackle effect - small rapid sparkles */
1989
+ @keyframes dm-fw-crackle {
1990
+ 0%, 100% {
1991
+ opacity: 0;
1992
+ }
1993
+ 25%, 75% {
1994
+ opacity: 1;
1995
+ }
1996
+ 50% {
1997
+ opacity: 0.5;
1998
+ }
1999
+ }
2000
+
2001
+ /* Multiple fireworks container */
2002
+ .fireworks-container {
2003
+ position: fixed;
2004
+ top: 0;
2005
+ left: 0;
2006
+ width: 100%;
2007
+ height: 100%;
2008
+ pointer-events: none;
2009
+ z-index: 9999;
2010
+ }
2011
+
2012
+ .fireworks-container .firework {
2013
+ position: absolute;
2014
+ }
2015
+
1479
2016
  /* ============================================
1480
2017
  SIZE UTILITIES
1481
2018
  ============================================ */
@@ -1815,6 +2352,43 @@ code, pre {
1815
2352
  color: var(--dm-warning);
1816
2353
  }
1817
2354
 
2355
+ /* Validation State Container Classes */
2356
+ .has-success .form-input,
2357
+ .has-success .form-select,
2358
+ .has-success .form-textarea {
2359
+ border-color: var(--dm-success);
2360
+ }
2361
+
2362
+ .has-success .form-input:focus,
2363
+ .has-success .form-select:focus,
2364
+ .has-success .form-textarea:focus {
2365
+ box-shadow: 0 0 0 3px rgba(22, 163, 74, 0.2);
2366
+ }
2367
+
2368
+ .has-error .form-input,
2369
+ .has-error .form-select,
2370
+ .has-error .form-textarea {
2371
+ border-color: var(--dm-danger);
2372
+ }
2373
+
2374
+ .has-error .form-input:focus,
2375
+ .has-error .form-select:focus,
2376
+ .has-error .form-textarea:focus {
2377
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.2);
2378
+ }
2379
+
2380
+ .has-warning .form-input,
2381
+ .has-warning .form-select,
2382
+ .has-warning .form-textarea {
2383
+ border-color: var(--dm-warning);
2384
+ }
2385
+
2386
+ .has-warning .form-input:focus,
2387
+ .has-warning .form-select:focus,
2388
+ .has-warning .form-textarea:focus {
2389
+ box-shadow: 0 0 0 3px rgba(245, 158, 11, 0.2);
2390
+ }
2391
+
1818
2392
  /* Input Sizes */
1819
2393
  .form-input-sm,
1820
2394
  .form-select-sm,
@@ -2193,6 +2767,63 @@ code, pre {
2193
2767
  cursor: pointer;
2194
2768
  }
2195
2769
 
2770
+ /* Form Sections */
2771
+ .domma-form-section {
2772
+ border: 1px solid var(--dm-border, var(--dm-gray-200));
2773
+ border-radius: var(--dm-radius-lg);
2774
+ padding: var(--dm-space-6);
2775
+ margin-bottom: var(--dm-space-6);
2776
+ background-color: var(--dm-surface, var(--dm-white));
2777
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
2778
+ transition: box-shadow 0.15s ease;
2779
+ }
2780
+
2781
+ .domma-form-section:hover {
2782
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
2783
+ }
2784
+
2785
+ .domma-form-section-title {
2786
+ font-size: var(--dm-font-size-lg);
2787
+ font-weight: var(--dm-font-weight-semibold);
2788
+ color: var(--dm-primary);
2789
+ margin: 0 0 var(--dm-space-4) 0;
2790
+ padding: 0 var(--dm-space-4);
2791
+ border-bottom: 2px solid var(--dm-primary);
2792
+ display: inline-block;
2793
+ background-color: var(--dm-surface, var(--dm-white));
2794
+ position: relative;
2795
+ top: calc(-1 * var(--dm-space-6) - 1px);
2796
+ left: 0;
2797
+ border-radius: var(--dm-radius-md) var(--dm-radius-md) 0 0;
2798
+ }
2799
+
2800
+ .domma-form-section-content {
2801
+ margin-top: calc(-1 * var(--dm-space-2));
2802
+ }
2803
+
2804
+ /* Dark theme adjustments */
2805
+ .dm-theme-dark .domma-form-section {
2806
+ background-color: var(--dm-gray-800);
2807
+ border-color: var(--dm-gray-700);
2808
+ }
2809
+
2810
+ .dm-theme-dark .domma-form-section-title {
2811
+ background-color: var(--dm-gray-800);
2812
+ color: var(--dm-primary-light, var(--dm-blue-400));
2813
+ border-color: var(--dm-primary-light, var(--dm-blue-400));
2814
+ }
2815
+
2816
+ /* Compact form sections */
2817
+ .domma-form-section.compact {
2818
+ padding: var(--dm-space-4);
2819
+ margin-bottom: var(--dm-space-4);
2820
+ }
2821
+
2822
+ .domma-form-section.compact .domma-form-section-title {
2823
+ font-size: var(--dm-font-size-base);
2824
+ top: calc(-1 * var(--dm-space-4) - 1px);
2825
+ }
2826
+
2196
2827
  /* ============================================
2197
2828
  COMPONENT: Badge
2198
2829
  ============================================ */
@@ -2406,11 +3037,950 @@ code, pre {
2406
3037
  --dm-glow-md: 0 0 20px rgba(255, 255, 255, 0.6);
2407
3038
  --dm-glow-lg: 0 0 30px rgba(255, 255, 255, 0.7);
2408
3039
  --dm-glow-xl: 0 0 40px rgba(255, 255, 255, 0.8);
2409
-
3040
+
2410
3041
  --dm-glow-primary: 0 0 20px rgba(59, 130, 246, 0.6);
2411
3042
  --dm-glow-secondary: 0 0 20px rgba(139, 92, 246, 0.6);
2412
3043
  --dm-glow-success: 0 0 20px rgba(34, 197, 94, 0.6);
2413
3044
  --dm-glow-warning: 0 0 20px rgba(245, 158, 11, 0.6);
2414
3045
  --dm-glow-danger: 0 0 20px rgba(239, 68, 68, 0.6);
2415
3046
  --dm-glow-info: 0 0 20px rgba(14, 165, 233, 0.6);
3047
+
3048
+ /* ================================================
3049
+ ANIMATION VARIABLES
3050
+ ================================================ */
3051
+ --dm-animate-duration: 1s;
3052
+ --dm-animate-delay: 0s;
3053
+ --dm-animate-timing: ease;
3054
+ }
3055
+
3056
+ /* ============================================
3057
+ ANIMATION UTILITIES
3058
+ ============================================ */
3059
+
3060
+ /* Animation Keyframes */
3061
+
3062
+ @keyframes dm-fade-in {
3063
+ from {
3064
+ opacity: 0;
3065
+ }
3066
+ to {
3067
+ opacity: 1;
3068
+ }
3069
+ }
3070
+
3071
+ @keyframes dm-fade-out {
3072
+ from {
3073
+ opacity: 1;
3074
+ }
3075
+ to {
3076
+ opacity: 0;
3077
+ }
3078
+ }
3079
+
3080
+ @keyframes dm-fade-in-up {
3081
+ from {
3082
+ opacity: 0;
3083
+ transform: translateY(20px);
3084
+ }
3085
+ to {
3086
+ opacity: 1;
3087
+ transform: translateY(0);
3088
+ }
3089
+ }
3090
+
3091
+ @keyframes dm-fade-in-down {
3092
+ from {
3093
+ opacity: 0;
3094
+ transform: translateY(-20px);
3095
+ }
3096
+ to {
3097
+ opacity: 1;
3098
+ transform: translateY(0);
3099
+ }
3100
+ }
3101
+
3102
+ @keyframes dm-fade-in-left {
3103
+ from {
3104
+ opacity: 0;
3105
+ transform: translateX(-20px);
3106
+ }
3107
+ to {
3108
+ opacity: 1;
3109
+ transform: translateX(0);
3110
+ }
3111
+ }
3112
+
3113
+ @keyframes dm-fade-in-right {
3114
+ from {
3115
+ opacity: 0;
3116
+ transform: translateX(20px);
3117
+ }
3118
+ to {
3119
+ opacity: 1;
3120
+ transform: translateX(0);
3121
+ }
3122
+ }
3123
+
3124
+ @keyframes dm-slide-in-up {
3125
+ from {
3126
+ transform: translateY(100%);
3127
+ }
3128
+ to {
3129
+ transform: translateY(0);
3130
+ }
3131
+ }
3132
+
3133
+ @keyframes dm-slide-in-down {
3134
+ from {
3135
+ transform: translateY(-100%);
3136
+ }
3137
+ to {
3138
+ transform: translateY(0);
3139
+ }
3140
+ }
3141
+
3142
+ @keyframes dm-slide-in-left {
3143
+ from {
3144
+ transform: translateX(-100%);
3145
+ }
3146
+ to {
3147
+ transform: translateX(0);
3148
+ }
3149
+ }
3150
+
3151
+ @keyframes dm-slide-in-right {
3152
+ from {
3153
+ transform: translateX(100%);
3154
+ }
3155
+ to {
3156
+ transform: translateX(0);
3157
+ }
3158
+ }
3159
+
3160
+ @keyframes dm-zoom-in {
3161
+ from {
3162
+ opacity: 0;
3163
+ transform: scale(0.8);
3164
+ }
3165
+ to {
3166
+ opacity: 1;
3167
+ transform: scale(1);
3168
+ }
3169
+ }
3170
+
3171
+ @keyframes dm-zoom-out {
3172
+ from {
3173
+ opacity: 1;
3174
+ transform: scale(1);
3175
+ }
3176
+ to {
3177
+ opacity: 0;
3178
+ transform: scale(0.8);
3179
+ }
3180
+ }
3181
+
3182
+ @keyframes dm-bounce {
3183
+ 0%, 20%, 50%, 80%, 100% {
3184
+ transform: translateY(0);
3185
+ }
3186
+ 40% {
3187
+ transform: translateY(-20px);
3188
+ }
3189
+ 60% {
3190
+ transform: translateY(-10px);
3191
+ }
3192
+ }
3193
+
3194
+ @keyframes dm-pulse {
3195
+ 0%, 100% {
3196
+ opacity: 1;
3197
+ }
3198
+ 50% {
3199
+ opacity: 0.5;
3200
+ }
3201
+ }
3202
+
3203
+ @keyframes dm-shake {
3204
+ 0%, 100% {
3205
+ transform: translateX(0);
3206
+ }
3207
+ 10%, 30%, 50%, 70%, 90% {
3208
+ transform: translateX(-5px);
3209
+ }
3210
+ 20%, 40%, 60%, 80% {
3211
+ transform: translateX(5px);
3212
+ }
3213
+ }
3214
+
3215
+ @keyframes dm-spin {
3216
+ from {
3217
+ transform: rotate(0deg);
3218
+ }
3219
+ to {
3220
+ transform: rotate(360deg);
3221
+ }
3222
+ }
3223
+
3224
+ @keyframes dm-rotate-in {
3225
+ from {
3226
+ opacity: 0;
3227
+ transform: rotate(-180deg) scale(0.8);
3228
+ }
3229
+ to {
3230
+ opacity: 1;
3231
+ transform: rotate(0) scale(1);
3232
+ }
3233
+ }
3234
+
3235
+ @keyframes dm-flip {
3236
+ from {
3237
+ transform: perspective(400px) rotateY(90deg);
3238
+ opacity: 0;
3239
+ }
3240
+ to {
3241
+ transform: perspective(400px) rotateY(0);
3242
+ opacity: 1;
3243
+ }
3244
+ }
3245
+
3246
+ /* Animation Classes */
3247
+
3248
+ .animate-fade-in {
3249
+ animation-name: dm-fade-in;
3250
+ animation-duration: var(--dm-animate-duration, 1s);
3251
+ animation-timing-function: var(--dm-animate-timing, ease);
3252
+ animation-delay: var(--dm-animate-delay, 0s);
3253
+ animation-fill-mode: both;
3254
+ }
3255
+
3256
+ .animate-fade-out {
3257
+ animation-name: dm-fade-out;
3258
+ animation-duration: var(--dm-animate-duration, 1s);
3259
+ animation-timing-function: var(--dm-animate-timing, ease);
3260
+ animation-delay: var(--dm-animate-delay, 0s);
3261
+ animation-fill-mode: both;
3262
+ }
3263
+
3264
+ .animate-fade-in-up {
3265
+ animation-name: dm-fade-in-up;
3266
+ animation-duration: var(--dm-animate-duration, 1s);
3267
+ animation-timing-function: var(--dm-animate-timing, ease);
3268
+ animation-delay: var(--dm-animate-delay, 0s);
3269
+ animation-fill-mode: both;
3270
+ }
3271
+
3272
+ .animate-fade-in-down {
3273
+ animation-name: dm-fade-in-down;
3274
+ animation-duration: var(--dm-animate-duration, 1s);
3275
+ animation-timing-function: var(--dm-animate-timing, ease);
3276
+ animation-delay: var(--dm-animate-delay, 0s);
3277
+ animation-fill-mode: both;
3278
+ }
3279
+
3280
+ .animate-fade-in-left {
3281
+ animation-name: dm-fade-in-left;
3282
+ animation-duration: var(--dm-animate-duration, 1s);
3283
+ animation-timing-function: var(--dm-animate-timing, ease);
3284
+ animation-delay: var(--dm-animate-delay, 0s);
3285
+ animation-fill-mode: both;
3286
+ }
3287
+
3288
+ .animate-fade-in-right {
3289
+ animation-name: dm-fade-in-right;
3290
+ animation-duration: var(--dm-animate-duration, 1s);
3291
+ animation-timing-function: var(--dm-animate-timing, ease);
3292
+ animation-delay: var(--dm-animate-delay, 0s);
3293
+ animation-fill-mode: both;
3294
+ }
3295
+
3296
+ .animate-slide-in-up {
3297
+ animation-name: dm-slide-in-up;
3298
+ animation-duration: var(--dm-animate-duration, 1s);
3299
+ animation-timing-function: var(--dm-animate-timing, ease);
3300
+ animation-delay: var(--dm-animate-delay, 0s);
3301
+ animation-fill-mode: both;
3302
+ }
3303
+
3304
+ .animate-slide-in-down {
3305
+ animation-name: dm-slide-in-down;
3306
+ animation-duration: var(--dm-animate-duration, 1s);
3307
+ animation-timing-function: var(--dm-animate-timing, ease);
3308
+ animation-delay: var(--dm-animate-delay, 0s);
3309
+ animation-fill-mode: both;
3310
+ }
3311
+
3312
+ .animate-slide-in-left {
3313
+ animation-name: dm-slide-in-left;
3314
+ animation-duration: var(--dm-animate-duration, 1s);
3315
+ animation-timing-function: var(--dm-animate-timing, ease);
3316
+ animation-delay: var(--dm-animate-delay, 0s);
3317
+ animation-fill-mode: both;
3318
+ }
3319
+
3320
+ .animate-slide-in-right {
3321
+ animation-name: dm-slide-in-right;
3322
+ animation-duration: var(--dm-animate-duration, 1s);
3323
+ animation-timing-function: var(--dm-animate-timing, ease);
3324
+ animation-delay: var(--dm-animate-delay, 0s);
3325
+ animation-fill-mode: both;
3326
+ }
3327
+
3328
+ .animate-zoom-in {
3329
+ animation-name: dm-zoom-in;
3330
+ animation-duration: var(--dm-animate-duration, 1s);
3331
+ animation-timing-function: var(--dm-animate-timing, ease);
3332
+ animation-delay: var(--dm-animate-delay, 0s);
3333
+ animation-fill-mode: both;
3334
+ }
3335
+
3336
+ .animate-zoom-out {
3337
+ animation-name: dm-zoom-out;
3338
+ animation-duration: var(--dm-animate-duration, 1s);
3339
+ animation-timing-function: var(--dm-animate-timing, ease);
3340
+ animation-delay: var(--dm-animate-delay, 0s);
3341
+ animation-fill-mode: both;
3342
+ }
3343
+
3344
+ .animate-bounce {
3345
+ animation-name: dm-bounce;
3346
+ animation-duration: var(--dm-animate-duration, 1s);
3347
+ animation-timing-function: var(--dm-animate-timing, ease);
3348
+ animation-delay: var(--dm-animate-delay, 0s);
3349
+ animation-fill-mode: both;
3350
+ }
3351
+
3352
+ .animate-pulse {
3353
+ animation-name: dm-pulse;
3354
+ animation-duration: var(--dm-animate-duration, 1s);
3355
+ animation-timing-function: var(--dm-animate-timing, ease);
3356
+ animation-delay: var(--dm-animate-delay, 0s);
3357
+ animation-fill-mode: both;
3358
+ }
3359
+
3360
+ .animate-shake {
3361
+ animation-name: dm-shake;
3362
+ animation-duration: 0.5s;
3363
+ animation-timing-function: ease;
3364
+ animation-fill-mode: both;
3365
+ }
3366
+
3367
+ .animate-spin {
3368
+ animation-name: dm-spin;
3369
+ animation-duration: var(--dm-animate-duration, 1s);
3370
+ animation-timing-function: linear;
3371
+ animation-delay: var(--dm-animate-delay, 0s);
3372
+ animation-fill-mode: both;
3373
+ }
3374
+
3375
+ .animate-rotate-in {
3376
+ animation-name: dm-rotate-in;
3377
+ animation-duration: var(--dm-animate-duration, 1s);
3378
+ animation-timing-function: var(--dm-animate-timing, ease);
3379
+ animation-delay: var(--dm-animate-delay, 0s);
3380
+ animation-fill-mode: both;
3381
+ }
3382
+
3383
+ .animate-flip {
3384
+ animation-name: dm-flip;
3385
+ animation-duration: var(--dm-animate-duration, 1s);
3386
+ animation-timing-function: var(--dm-animate-timing, ease);
3387
+ animation-delay: var(--dm-animate-delay, 0s);
3388
+ animation-fill-mode: both;
3389
+ }
3390
+
3391
+ /* Animation Control Classes */
3392
+
3393
+ .animate-infinite {
3394
+ animation-iteration-count: infinite;
3395
+ }
3396
+
3397
+ .animate-once {
3398
+ animation-iteration-count: 1;
3399
+ }
3400
+
3401
+ .animate-repeat-2 {
3402
+ animation-iteration-count: 2;
3403
+ }
3404
+
3405
+ .animate-repeat-3 {
3406
+ animation-iteration-count: 3;
3407
+ }
3408
+
3409
+ /* Animation Durations */
3410
+
3411
+ .animate-duration-fast {
3412
+ --dm-animate-duration: 0.3s;
3413
+ }
3414
+
3415
+ .animate-duration-normal {
3416
+ --dm-animate-duration: 0.6s;
3417
+ }
3418
+
3419
+ .animate-duration-slow {
3420
+ --dm-animate-duration: 1s;
3421
+ }
3422
+
3423
+ .animate-duration-slower {
3424
+ --dm-animate-duration: 2s;
3425
+ }
3426
+
3427
+ /* Animation Delays */
3428
+
3429
+ .animate-delay-100 {
3430
+ --dm-animate-delay: 0.1s;
3431
+ }
3432
+
3433
+ .animate-delay-200 {
3434
+ --dm-animate-delay: 0.2s;
3435
+ }
3436
+
3437
+ .animate-delay-300 {
3438
+ --dm-animate-delay: 0.3s;
3439
+ }
3440
+
3441
+ .animate-delay-500 {
3442
+ --dm-animate-delay: 0.5s;
3443
+ }
3444
+
3445
+ .animate-delay-1000 {
3446
+ --dm-animate-delay: 1s;
3447
+ }
3448
+
3449
+ /* Hover Animations */
3450
+
3451
+ .animate-fade-in-hover:hover {
3452
+ animation-name: dm-fade-in;
3453
+ animation-duration: 0.3s;
3454
+ animation-timing-function: ease;
3455
+ animation-fill-mode: both;
3456
+ }
3457
+
3458
+ .animate-bounce-hover:hover {
3459
+ animation-name: dm-bounce;
3460
+ animation-duration: 0.6s;
3461
+ animation-timing-function: ease;
3462
+ animation-fill-mode: both;
3463
+ }
3464
+
3465
+ .animate-pulse-hover:hover {
3466
+ animation-name: dm-pulse;
3467
+ animation-duration: 1s;
3468
+ animation-timing-function: ease;
3469
+ animation-fill-mode: both;
3470
+ }
3471
+
3472
+ .animate-shake-hover:hover {
3473
+ animation-name: dm-shake;
3474
+ animation-duration: 0.5s;
3475
+ animation-timing-function: ease;
3476
+ animation-fill-mode: both;
3477
+ }
3478
+
3479
+ .animate-spin-hover:hover {
3480
+ animation-name: dm-spin;
3481
+ animation-duration: 1s;
3482
+ animation-timing-function: linear;
3483
+ animation-fill-mode: both;
3484
+ }
3485
+
3486
+ /* ============================================
3487
+ GRADIENT UTILITIES
3488
+ ============================================ */
3489
+
3490
+ /* Background Gradients */
3491
+
3492
+ .bg-gradient-primary {
3493
+ background: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3494
+ }
3495
+
3496
+ .bg-gradient-secondary {
3497
+ background: linear-gradient(135deg, var(--dm-secondary) 0%, var(--dm-secondary-dark) 100%);
3498
+ }
3499
+
3500
+ .bg-gradient-success {
3501
+ background: linear-gradient(135deg, var(--dm-success) 0%, var(--dm-success-dark) 100%);
3502
+ }
3503
+
3504
+ .bg-gradient-danger {
3505
+ background: linear-gradient(135deg, var(--dm-danger) 0%, var(--dm-danger-dark) 100%);
3506
+ }
3507
+
3508
+ .bg-gradient-warning {
3509
+ background: linear-gradient(135deg, var(--dm-warning) 0%, var(--dm-warning-dark) 100%);
3510
+ }
3511
+
3512
+ .bg-gradient-info {
3513
+ background: linear-gradient(135deg, var(--dm-info) 0%, var(--dm-info-dark) 100%);
3514
+ }
3515
+
3516
+ /* Directional Gradients */
3517
+
3518
+ .bg-gradient-to-t {
3519
+ background: linear-gradient(to top, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3520
+ }
3521
+
3522
+ .bg-gradient-to-tr {
3523
+ background: linear-gradient(to top right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3524
+ }
3525
+
3526
+ .bg-gradient-to-r {
3527
+ background: linear-gradient(to right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3528
+ }
3529
+
3530
+ .bg-gradient-to-br {
3531
+ background: linear-gradient(to bottom right, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3532
+ }
3533
+
3534
+ .bg-gradient-to-b {
3535
+ background: linear-gradient(to bottom, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3536
+ }
3537
+
3538
+ .bg-gradient-to-bl {
3539
+ background: linear-gradient(to bottom left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3540
+ }
3541
+
3542
+ .bg-gradient-to-l {
3543
+ background: linear-gradient(to left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3544
+ }
3545
+
3546
+ .bg-gradient-to-tl {
3547
+ background: linear-gradient(to top left, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3548
+ }
3549
+
3550
+ /* Radial Gradients */
3551
+
3552
+ .bg-gradient-radial {
3553
+ background: radial-gradient(circle, var(--dm-gradient-from, transparent), var(--dm-gradient-to, transparent));
3554
+ }
3555
+
3556
+ /* Named Gradient Presets */
3557
+
3558
+ .bg-gradient-purple {
3559
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3560
+ }
3561
+
3562
+ .bg-gradient-blue {
3563
+ background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
3564
+ }
3565
+
3566
+ .bg-gradient-green {
3567
+ background: linear-gradient(135deg, #10b981 0%, #059669 100%);
3568
+ }
3569
+
3570
+ .bg-gradient-sunset {
3571
+ background: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3572
+ }
3573
+
3574
+ .bg-gradient-ocean {
3575
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3576
+ }
3577
+
3578
+ .bg-gradient-rose {
3579
+ background: linear-gradient(135deg, #ec4899 0%, #db2777 100%);
3580
+ }
3581
+
3582
+ .bg-gradient-forest {
3583
+ background: linear-gradient(135deg, #10b981 0%, #065f46 100%);
3584
+ }
3585
+
3586
+ .bg-gradient-night {
3587
+ background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
3588
+ }
3589
+
3590
+ .bg-gradient-warm {
3591
+ background: linear-gradient(135deg, #f59e0b 0%, #f97316 0%, #dc2626 100%);
3592
+ }
3593
+
3594
+ .bg-gradient-cool {
3595
+ background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 0%, #8b5cf6 100%);
3596
+ }
3597
+
3598
+ /* Animated Gradients */
3599
+
3600
+ @keyframes dm-gradient-shift {
3601
+ 0% {
3602
+ background-position: 0% 50%;
3603
+ }
3604
+ 50% {
3605
+ background-position: 100% 50%;
3606
+ }
3607
+ 100% {
3608
+ background-position: 0% 50%;
3609
+ }
3610
+ }
3611
+
3612
+ .bg-gradient-animated {
3613
+ background-size: 200% 200%;
3614
+ animation: dm-gradient-shift 3s ease infinite;
3615
+ }
3616
+
3617
+ /* Text Gradients */
3618
+
3619
+ .text-gradient {
3620
+ background-clip: text;
3621
+ -webkit-background-clip: text;
3622
+ -webkit-text-fill-color: transparent;
3623
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-secondary) 100%);
3624
+ }
3625
+
3626
+ .text-gradient-primary {
3627
+ background-clip: text;
3628
+ -webkit-background-clip: text;
3629
+ -webkit-text-fill-color: transparent;
3630
+ background-image: linear-gradient(135deg, var(--dm-primary) 0%, var(--dm-primary-dark) 100%);
3631
+ }
3632
+
3633
+ .text-gradient-sunset {
3634
+ background-clip: text;
3635
+ -webkit-background-clip: text;
3636
+ -webkit-text-fill-color: transparent;
3637
+ background-image: linear-gradient(135deg, #f59e0b 0%, #ef4444 100%);
3638
+ }
3639
+
3640
+ .text-gradient-ocean {
3641
+ background-clip: text;
3642
+ -webkit-background-clip: text;
3643
+ -webkit-text-fill-color: transparent;
3644
+ background-image: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%);
3645
+ }
3646
+
3647
+ .text-gradient-purple {
3648
+ background-clip: text;
3649
+ -webkit-background-clip: text;
3650
+ -webkit-text-fill-color: transparent;
3651
+ background-image: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
3652
+ }
3653
+
3654
+ /* ============================================
3655
+ FILTER UTILITIES
3656
+ ============================================ */
3657
+
3658
+ /* Blur */
3659
+
3660
+ .blur-none {
3661
+ filter: blur(0);
3662
+ }
3663
+
3664
+ .blur-sm {
3665
+ filter: blur(4px);
3666
+ }
3667
+
3668
+ .blur {
3669
+ filter: blur(8px);
3670
+ }
3671
+
3672
+ .blur-md {
3673
+ filter: blur(12px);
3674
+ }
3675
+
3676
+ .blur-lg {
3677
+ filter: blur(16px);
3678
+ }
3679
+
3680
+ .blur-xl {
3681
+ filter: blur(24px);
3682
+ }
3683
+
3684
+ .blur-2xl {
3685
+ filter: blur(40px);
3686
+ }
3687
+
3688
+ .blur-3xl {
3689
+ filter: blur(64px);
3690
+ }
3691
+
3692
+ /* Brightness */
3693
+
3694
+ .brightness-0 {
3695
+ filter: brightness(0);
3696
+ }
3697
+
3698
+ .brightness-50 {
3699
+ filter: brightness(0.5);
3700
+ }
3701
+
3702
+ .brightness-75 {
3703
+ filter: brightness(0.75);
3704
+ }
3705
+
3706
+ .brightness-90 {
3707
+ filter: brightness(0.9);
3708
+ }
3709
+
3710
+ .brightness-100 {
3711
+ filter: brightness(1);
3712
+ }
3713
+
3714
+ .brightness-110 {
3715
+ filter: brightness(1.1);
3716
+ }
3717
+
3718
+ .brightness-125 {
3719
+ filter: brightness(1.25);
3720
+ }
3721
+
3722
+ .brightness-150 {
3723
+ filter: brightness(1.5);
3724
+ }
3725
+
3726
+ .brightness-200 {
3727
+ filter: brightness(2);
3728
+ }
3729
+
3730
+ /* Contrast */
3731
+
3732
+ .contrast-0 {
3733
+ filter: contrast(0);
3734
+ }
3735
+
3736
+ .contrast-50 {
3737
+ filter: contrast(0.5);
3738
+ }
3739
+
3740
+ .contrast-75 {
3741
+ filter: contrast(0.75);
3742
+ }
3743
+
3744
+ .contrast-100 {
3745
+ filter: contrast(1);
3746
+ }
3747
+
3748
+ .contrast-125 {
3749
+ filter: contrast(1.25);
3750
+ }
3751
+
3752
+ .contrast-150 {
3753
+ filter: contrast(1.5);
3754
+ }
3755
+
3756
+ .contrast-200 {
3757
+ filter: contrast(2);
3758
+ }
3759
+
3760
+ /* Grayscale */
3761
+
3762
+ .grayscale-0 {
3763
+ filter: grayscale(0);
3764
+ }
3765
+
3766
+ .grayscale {
3767
+ filter: grayscale(1);
3768
+ }
3769
+
3770
+ .grayscale-50 {
3771
+ filter: grayscale(0.5);
3772
+ }
3773
+
3774
+ /* Hue Rotate */
3775
+
3776
+ .hue-rotate-15 {
3777
+ filter: hue-rotate(15deg);
3778
+ }
3779
+
3780
+ .hue-rotate-30 {
3781
+ filter: hue-rotate(30deg);
3782
+ }
3783
+
3784
+ .hue-rotate-60 {
3785
+ filter: hue-rotate(60deg);
3786
+ }
3787
+
3788
+ .hue-rotate-90 {
3789
+ filter: hue-rotate(90deg);
3790
+ }
3791
+
3792
+ .hue-rotate-180 {
3793
+ filter: hue-rotate(180deg);
3794
+ }
3795
+
3796
+ /* Invert */
3797
+
3798
+ .invert-0 {
3799
+ filter: invert(0);
3800
+ }
3801
+
3802
+ .invert {
3803
+ filter: invert(1);
3804
+ }
3805
+
3806
+ .invert-50 {
3807
+ filter: invert(0.5);
3808
+ }
3809
+
3810
+ /* Saturate */
3811
+
3812
+ .saturate-0 {
3813
+ filter: saturate(0);
3814
+ }
3815
+
3816
+ .saturate-50 {
3817
+ filter: saturate(0.5);
3818
+ }
3819
+
3820
+ .saturate-100 {
3821
+ filter: saturate(1);
3822
+ }
3823
+
3824
+ .saturate-150 {
3825
+ filter: saturate(1.5);
3826
+ }
3827
+
3828
+ .saturate-200 {
3829
+ filter: saturate(2);
3830
+ }
3831
+
3832
+ /* Sepia */
3833
+
3834
+ .sepia-0 {
3835
+ filter: sepia(0);
3836
+ }
3837
+
3838
+ .sepia {
3839
+ filter: sepia(1);
3840
+ }
3841
+
3842
+ .sepia-50 {
3843
+ filter: sepia(0.5);
3844
+ }
3845
+
3846
+ /* Drop Shadow */
3847
+
3848
+ .drop-shadow-sm {
3849
+ filter: drop-shadow(0 1px 1px rgb(0 0 0 / 0.05));
3850
+ }
3851
+
3852
+ .drop-shadow {
3853
+ filter: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
3854
+ }
3855
+
3856
+ .drop-shadow-md {
3857
+ filter: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
3858
+ }
3859
+
3860
+ .drop-shadow-lg {
3861
+ filter: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1));
3862
+ }
3863
+
3864
+ .drop-shadow-xl {
3865
+ filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
3866
+ }
3867
+
3868
+ .drop-shadow-2xl {
3869
+ filter: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
3870
+ }
3871
+
3872
+ .drop-shadow-none {
3873
+ filter: drop-shadow(0 0 #0000);
3874
+ }
3875
+
3876
+ /* Backdrop Blur */
3877
+
3878
+ .backdrop-blur-none {
3879
+ backdrop-filter: blur(0);
3880
+ }
3881
+
3882
+ .backdrop-blur-sm {
3883
+ backdrop-filter: blur(4px);
3884
+ }
3885
+
3886
+ .backdrop-blur {
3887
+ backdrop-filter: blur(8px);
3888
+ }
3889
+
3890
+ .backdrop-blur-md {
3891
+ backdrop-filter: blur(12px);
3892
+ }
3893
+
3894
+ .backdrop-blur-lg {
3895
+ backdrop-filter: blur(16px);
3896
+ }
3897
+
3898
+ .backdrop-blur-xl {
3899
+ backdrop-filter: blur(24px);
3900
+ }
3901
+
3902
+ .backdrop-blur-2xl {
3903
+ backdrop-filter: blur(40px);
3904
+ }
3905
+
3906
+ .backdrop-blur-3xl {
3907
+ backdrop-filter: blur(64px);
3908
+ }
3909
+
3910
+ /* Backdrop Brightness */
3911
+
3912
+ .backdrop-brightness-50 {
3913
+ backdrop-filter: brightness(0.5);
3914
+ }
3915
+
3916
+ .backdrop-brightness-75 {
3917
+ backdrop-filter: brightness(0.75);
3918
+ }
3919
+
3920
+ .backdrop-brightness-90 {
3921
+ backdrop-filter: brightness(0.9);
3922
+ }
3923
+
3924
+ .backdrop-brightness-100 {
3925
+ backdrop-filter: brightness(1);
3926
+ }
3927
+
3928
+ .backdrop-brightness-110 {
3929
+ backdrop-filter: brightness(1.1);
3930
+ }
3931
+
3932
+ .backdrop-brightness-125 {
3933
+ backdrop-filter: brightness(1.25);
3934
+ }
3935
+
3936
+ .backdrop-brightness-150 {
3937
+ backdrop-filter: brightness(1.5);
3938
+ }
3939
+
3940
+ /* Backdrop Saturate */
3941
+
3942
+ .backdrop-saturate-0 {
3943
+ backdrop-filter: saturate(0);
3944
+ }
3945
+
3946
+ .backdrop-saturate-50 {
3947
+ backdrop-filter: saturate(0.5);
3948
+ }
3949
+
3950
+ .backdrop-saturate-100 {
3951
+ backdrop-filter: saturate(1);
3952
+ }
3953
+
3954
+ .backdrop-saturate-150 {
3955
+ backdrop-filter: saturate(1.5);
3956
+ }
3957
+
3958
+ .backdrop-saturate-200 {
3959
+ backdrop-filter: saturate(2);
3960
+ }
3961
+
3962
+ /* Combined Filter Presets */
3963
+
3964
+ .filter-none {
3965
+ filter: none;
3966
+ }
3967
+
3968
+ .filter-vintage {
3969
+ filter: sepia(0.5) contrast(1.2) brightness(0.9);
3970
+ }
3971
+
3972
+ .filter-dramatic {
3973
+ filter: contrast(1.5) saturate(1.3);
3974
+ }
3975
+
3976
+ .filter-soft {
3977
+ filter: blur(2px) brightness(1.1);
3978
+ }
3979
+
3980
+ .filter-cold {
3981
+ filter: saturate(0.8) hue-rotate(15deg);
3982
+ }
3983
+
3984
+ .filter-warm {
3985
+ filter: saturate(1.2) hue-rotate(-15deg);
2416
3986
  }