domma-js 0.3.1-alpha → 0.7.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +33 -30
  2. package/assets/types/config.d.ts +127 -0
  3. package/assets/types/dates.d.ts +209 -0
  4. package/assets/types/dom.d.ts +448 -0
  5. package/assets/types/elements.d.ts +606 -0
  6. package/assets/types/http.d.ts +97 -0
  7. package/assets/types/icons.d.ts +147 -0
  8. package/assets/types/index.d.ts +197 -0
  9. package/assets/types/models.d.ts +188 -0
  10. package/assets/types/storage.d.ts +93 -0
  11. package/assets/types/tables.d.ts +327 -0
  12. package/assets/types/theme.d.ts +136 -0
  13. package/assets/types/utils.d.ts +675 -0
  14. package/bin/domma-cli.js +144 -0
  15. package/package.json +12 -5
  16. package/public/dist/bundles/domma-complete.css +2316 -170
  17. package/public/dist/bundles/domma-data-focused.css +2686 -321
  18. package/public/dist/bundles/domma-essentials.css +2686 -321
  19. package/public/dist/bundles/domma-full.css +2686 -321
  20. package/public/dist/bundles/domma-grayve.css +13839 -0
  21. package/public/dist/bundles/domma-minimal.css +1591 -9
  22. package/public/dist/domma-syntax.min.js +8 -0
  23. package/public/dist/domma.css +1586 -4
  24. package/public/dist/domma.esm.js +4 -4
  25. package/public/dist/domma.min.js +4 -4
  26. package/public/dist/elements.css +368 -17
  27. package/public/dist/grid.css +3 -3
  28. package/public/dist/syntax.css +3 -3
  29. package/public/dist/themes/domma-themes.css +216 -3
  30. package/public/dist/themes/grayve.css +213 -0
  31. package/templates/kickstart/about/index.html +241 -0
  32. package/templates/kickstart/assets/logo/placeholder.svg +6 -0
  33. package/templates/kickstart/blog/index.html +227 -0
  34. package/templates/kickstart/contact/index.html +218 -0
  35. package/templates/kickstart/css/custom.css +121 -0
  36. package/templates/kickstart/docs/index.html +310 -0
  37. package/templates/kickstart/domma.config.json +47 -0
  38. package/templates/kickstart/index.html +170 -0
  39. package/templates/kickstart/js/app.js +161 -0
@@ -1,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-08T09:15:50.429Z
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-08T09:15:50.022Z
18
+ * Commit: ad86642
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,964 @@ 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);
3998
+ }
3999
+
4000
+ /* ================================================
4001
+ CLOAKING - Prevent flash of unstyled content
4002
+ ================================================ */
4003
+ body.dm-cloaked {
4004
+ opacity: 0;
4005
+ }
4006
+
4007
+ body.dm-cloaked.dm-ready {
4008
+ opacity: 1;
4009
+ transition: opacity 0.3s ease;
2428
4010
  }
2429
4011
 
2430
4012
 
@@ -2434,11 +4016,11 @@ code, pre {
2434
4016
  ============================================ */
2435
4017
 
2436
4018
  /*!
2437
- * Domma Grid CSS v0.3.0-alpha.0
4019
+ * Domma Grid CSS v0.5.0-alpha
2438
4020
  * Dynamic Object Manipulation & Modeling API
2439
4021
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2440
- * Built: 2026-01-02T14:32:25.394Z
2441
- * Commit: bc8e519
4022
+ * Built: 2026-01-08T09:15:50.031Z
4023
+ * Commit: ad86642
2442
4024
  */
2443
4025
 
2444
4026
  /**