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 Complete CSS Bundle v0.3.0-alpha.0
2
+ * Domma Complete CSS Bundle v0.5.0-alpha
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-01-02T14:32:25.779Z
5
+ * Built: 2026-01-08T09:15:50.457Z
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,68 +3049,1019 @@ 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);
2428
- }
2429
3059
 
3060
+ /* ================================================
3061
+ ANIMATION VARIABLES
3062
+ ================================================ */
3063
+ --dm-animate-duration: 1s;
3064
+ --dm-animate-delay: 0s;
3065
+ --dm-animate-timing: ease;
3066
+ }
2430
3067
 
2431
3068
  /* ============================================
2432
- GRID SYSTEM
2433
- Bootstrap + CSS Grid utilities
3069
+ ANIMATION UTILITIES
2434
3070
  ============================================ */
2435
3071
 
2436
- /*!
2437
- * Domma Grid CSS v0.3.0-alpha.0
2438
- * Dynamic Object Manipulation & Modeling API
2439
- * (c) 2026 Darryl Waterhouse & DCBW-IT
2440
- * Built: 2026-01-02T14:32:25.394Z
2441
- * Commit: bc8e519
2442
- */
2443
-
2444
- /**
2445
- * Domma Grid System
2446
- * Bootstrap-style 12-column flexbox grid with mobile-first stacking
2447
- *
2448
- * Usage:
2449
- * <div class="row">
2450
- * <div class="col-4">Column 1</div>
2451
- * <div class="col-4">Column 2</div>
2452
- * <div class="col-4">Column 3</div>
2453
- * </div>
2454
- *
2455
- * Mobile-first: columns stack below 576px, activate grid above
2456
- */
3072
+ /* Animation Keyframes */
2457
3073
 
2458
- /* ============================================
2459
- ROW CONTAINER
2460
- ============================================ */
3074
+ @keyframes dm-fade-in {
3075
+ from {
3076
+ opacity: 0;
3077
+ }
3078
+ to {
3079
+ opacity: 1;
3080
+ }
3081
+ }
2461
3082
 
2462
- .row {
2463
- display: flex;
2464
- flex-wrap: wrap;
2465
- margin-left: calc(var(--dm-space-3, 0.75rem) * -1);
2466
- margin-right: calc(var(--dm-space-3, 0.75rem) * -1);
3083
+ @keyframes dm-fade-out {
3084
+ from {
3085
+ opacity: 1;
3086
+ }
3087
+ to {
3088
+ opacity: 0;
3089
+ }
2467
3090
  }
2468
3091
 
2469
- /* No gutters variant */
2470
- .row.no-gutters {
2471
- margin-left: 0;
2472
- margin-right: 0;
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
+ }
2473
3101
  }
2474
3102
 
2475
- .row.no-gutters > [class*="col"] {
2476
- padding-left: 0;
2477
- padding-right: 0;
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
+ }
2478
3112
  }
2479
3113
 
2480
- /* ============================================
2481
- COLUMN BASE STYLES
2482
- ============================================ */
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;
4010
+ }
4011
+
4012
+
4013
+ /* ============================================
4014
+ GRID SYSTEM
4015
+ Bootstrap + CSS Grid utilities
4016
+ ============================================ */
4017
+
4018
+ /*!
4019
+ * Domma Grid CSS v0.5.0-alpha
4020
+ * Dynamic Object Manipulation & Modeling API
4021
+ * (c) 2026 Darryl Waterhouse & DCBW-IT
4022
+ * Built: 2026-01-08T09:15:50.031Z
4023
+ * Commit: ad86642
4024
+ */
4025
+
4026
+ /**
4027
+ * Domma Grid System
4028
+ * Bootstrap-style 12-column flexbox grid with mobile-first stacking
4029
+ *
4030
+ * Usage:
4031
+ * <div class="row">
4032
+ * <div class="col-4">Column 1</div>
4033
+ * <div class="col-4">Column 2</div>
4034
+ * <div class="col-4">Column 3</div>
4035
+ * </div>
4036
+ *
4037
+ * Mobile-first: columns stack below 576px, activate grid above
4038
+ */
4039
+
4040
+ /* ============================================
4041
+ ROW CONTAINER
4042
+ ============================================ */
4043
+
4044
+ .row {
4045
+ display: flex;
4046
+ flex-wrap: wrap;
4047
+ margin-left: calc(var(--dm-space-3, 0.75rem) * -1);
4048
+ margin-right: calc(var(--dm-space-3, 0.75rem) * -1);
4049
+ }
4050
+
4051
+ /* No gutters variant */
4052
+ .row.no-gutters {
4053
+ margin-left: 0;
4054
+ margin-right: 0;
4055
+ }
4056
+
4057
+ .row.no-gutters > [class*="col"] {
4058
+ padding-left: 0;
4059
+ padding-right: 0;
4060
+ }
4061
+
4062
+ /* ============================================
4063
+ COLUMN BASE STYLES
4064
+ ============================================ */
2483
4065
 
2484
4066
  /* Base column styles - mobile-first (stacked) */
2485
4067
  .col,
@@ -2979,11 +4561,11 @@ code, pre {
2979
4561
  ============================================ */
2980
4562
 
2981
4563
  /*!
2982
- * Domma Elements CSS v0.3.0-alpha.0
4564
+ * Domma Elements CSS v0.5.0-alpha
2983
4565
  * Dynamic Object Manipulation & Modeling API
2984
4566
  * (c) 2026 Darryl Waterhouse & DCBW-IT
2985
- * Built: 2026-01-02T14:32:25.401Z
2986
- * Commit: bc8e519
4567
+ * Built: 2026-01-08T09:15:50.041Z
4568
+ * Commit: ad86642
2987
4569
  */
2988
4570
 
2989
4571
  /**
@@ -3238,6 +4820,40 @@ code, pre {
3238
4820
  text-decoration: none;
3239
4821
  }
3240
4822
 
4823
+ /* Collapsible card styles */
4824
+ .card-collapsible .card-header {
4825
+ cursor: pointer;
4826
+ display: flex;
4827
+ align-items: center;
4828
+ justify-content: space-between;
4829
+ user-select: none;
4830
+ }
4831
+
4832
+ .card-header-content {
4833
+ flex: 1;
4834
+ }
4835
+
4836
+ .card-collapse-icon {
4837
+ transition: transform var(--dm-transition-normal);
4838
+ flex-shrink: 0;
4839
+ margin-left: var(--dm-space-2);
4840
+ }
4841
+
4842
+ .card-collapsed .card-collapse-icon {
4843
+ transform: rotate(-90deg);
4844
+ }
4845
+
4846
+ .card-collapsible .card-body {
4847
+ overflow: hidden;
4848
+ transition: height var(--dm-transition-normal);
4849
+ }
4850
+
4851
+ .card-collapsed .card-body {
4852
+ height: 0 !important;
4853
+ padding-top: 0;
4854
+ padding-bottom: 0;
4855
+ }
4856
+
3241
4857
 
3242
4858
  /* ============================================
3243
4859
  MODAL
@@ -3251,7 +4867,7 @@ code, pre {
3251
4867
  border-radius: var(--dm-radius-lg);
3252
4868
  box-shadow: var(--dm-shadow-xl);
3253
4869
  z-index: 50;
3254
- max-width: 500px;
4870
+ max-width: 700px;
3255
4871
  width: 90%;
3256
4872
  max-height: 90vh;
3257
4873
  overflow: auto;
@@ -3323,6 +4939,23 @@ code, pre {
3323
4939
  max-width: 1140px;
3324
4940
  }
3325
4941
 
4942
+ /* Modal Factory Dialog Sizes */
4943
+ .dm-dialog-small {
4944
+ max-width: 400px !important;
4945
+ }
4946
+
4947
+ .dm-dialog-medium {
4948
+ max-width: 700px !important;
4949
+ }
4950
+
4951
+ .dm-dialog-large {
4952
+ max-width: 900px !important;
4953
+ }
4954
+
4955
+ .dm-dialog-xl {
4956
+ max-width: 1200px !important;
4957
+ }
4958
+
3326
4959
 
3327
4960
  /* ============================================
3328
4961
  TABS
@@ -3770,16 +5403,18 @@ textarea:not([class])::placeholder {
3770
5403
  .form-check {
3771
5404
  display: flex;
3772
5405
  align-items: flex-start;
3773
- gap: var(--dm-space-2);
5406
+ gap: var(--dm-space-3);
3774
5407
  cursor: pointer;
3775
5408
  position: relative;
5409
+ padding: var(--dm-space-1) 0;
5410
+ min-height: 1.5rem;
3776
5411
  }
3777
5412
 
3778
5413
  .form-check-input {
3779
5414
  appearance: none;
3780
5415
  -webkit-appearance: none;
3781
- width: 1.125rem;
3782
- height: 1.125rem;
5416
+ width: 1.25rem;
5417
+ height: 1.25rem;
3783
5418
  border: 2px solid var(--dm-border, var(--dm-gray-400));
3784
5419
  border-radius: var(--dm-radius-sm);
3785
5420
  background-color: var(--dm-surface, var(--dm-white));
@@ -3787,6 +5422,8 @@ textarea:not([class])::placeholder {
3787
5422
  position: relative;
3788
5423
  flex-shrink: 0;
3789
5424
  margin-top: 0.125rem;
5425
+ margin-right: var(--dm-space-1);
5426
+ padding: 0;
3790
5427
  transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
3791
5428
  }
3792
5429
 
@@ -3808,10 +5445,10 @@ textarea:not([class])::placeholder {
3808
5445
  .form-check-input:checked::after {
3809
5446
  content: '';
3810
5447
  position: absolute;
3811
- left: 5px;
3812
- top: 2px;
3813
- width: 5px;
3814
- height: 9px;
5448
+ left: 5.5px;
5449
+ top: 2.5px;
5450
+ width: 6px;
5451
+ height: 10px;
3815
5452
  border: solid var(--dm-white);
3816
5453
  border-width: 0 2px 2px 0;
3817
5454
  transform: rotate(45deg);
@@ -3830,6 +5467,9 @@ textarea:not([class])::placeholder {
3830
5467
  .form-check-label {
3831
5468
  cursor: pointer;
3832
5469
  color: var(--dm-text, var(--dm-gray-900));
5470
+ line-height: 1.5;
5471
+ padding-top: 0.125rem;
5472
+ user-select: none;
3833
5473
  }
3834
5474
 
3835
5475
  /* Custom Radio */
@@ -7854,146 +9494,439 @@ code {
7854
9494
  transform: translateX(-50%);
7855
9495
  }
7856
9496
 
7857
- .dm-timeline-centered .dm-timeline-item {
7858
- width: 50%;
7859
- padding-right: var(--dm-space-8);
7860
- justify-content: flex-end;
9497
+ .dm-timeline-centered .dm-timeline-item {
9498
+ width: 50%;
9499
+ padding-right: var(--dm-space-8);
9500
+ justify-content: flex-end;
9501
+ }
9502
+
9503
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) {
9504
+ left: 50%;
9505
+ padding-left: var(--dm-space-8);
9506
+ padding-right: 0;
9507
+ justify-content: flex-start;
9508
+ }
9509
+
9510
+ .dm-timeline-centered .dm-timeline-year {
9511
+ order: 2;
9512
+ margin-left: var(--dm-space-6);
9513
+ margin-right: 0;
9514
+ }
9515
+
9516
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
9517
+ order: 0;
9518
+ margin-left: 0;
9519
+ margin-right: var(--dm-space-6);
9520
+ }
9521
+
9522
+ /* Horizontal Layout */
9523
+ .dm-timeline-horizontal {
9524
+ display: flex;
9525
+ overflow-x: auto;
9526
+ padding-bottom: var(--dm-space-4);
9527
+ max-width: 100%;
9528
+ gap: var(--dm-space-6);
9529
+ }
9530
+
9531
+ .dm-timeline-horizontal .dm-timeline-item {
9532
+ flex-direction: column;
9533
+ margin-bottom: 0;
9534
+ min-width: 250px;
9535
+ flex-shrink: 0;
9536
+ }
9537
+
9538
+ .dm-timeline-horizontal .dm-timeline-year {
9539
+ width: auto;
9540
+ margin-right: 0;
9541
+ margin-bottom: var(--dm-space-4);
9542
+ }
9543
+
9544
+ /* Theme Variants */
9545
+ .dm-timeline-minimal .dm-timeline-content {
9546
+ box-shadow: none;
9547
+ border: 1px solid var(--dm-gray-200);
9548
+ background: var(--dm-gray-50);
9549
+ }
9550
+
9551
+ .dm-timeline-minimal .dm-timeline-year {
9552
+ background: var(--dm-gray-600);
9553
+ }
9554
+
9555
+ .dm-timeline-corporate .dm-timeline-year {
9556
+ background: var(--dm-slate-700);
9557
+ font-size: var(--dm-font-size-xs);
9558
+ text-transform: uppercase;
9559
+ letter-spacing: 0.05em;
9560
+ }
9561
+
9562
+ .dm-timeline-corporate .dm-timeline-content {
9563
+ background: var(--dm-slate-50);
9564
+ border-color: var(--dm-slate-200);
9565
+ }
9566
+
9567
+ /* Responsive Design */
9568
+ @media (max-width: 768px) {
9569
+ .dm-timeline-centered {
9570
+ /* Switch to vertical layout on mobile */
9571
+ }
9572
+
9573
+ .dm-timeline-centered::before {
9574
+ left: 30px;
9575
+ transform: none;
9576
+ }
9577
+
9578
+ .dm-timeline-centered .dm-timeline-item,
9579
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) {
9580
+ width: 100%;
9581
+ left: 0;
9582
+ padding-left: var(--dm-space-16);
9583
+ padding-right: 0;
9584
+ justify-content: flex-start;
9585
+ }
9586
+
9587
+ .dm-timeline-centered .dm-timeline-year,
9588
+ .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
9589
+ order: 0;
9590
+ margin-right: var(--dm-space-6);
9591
+ margin-left: 0;
9592
+ position: absolute;
9593
+ left: 0;
9594
+ width: 80px;
9595
+ }
9596
+
9597
+ .dm-timeline-horizontal {
9598
+ flex-direction: column;
9599
+ }
9600
+
9601
+ .dm-timeline-horizontal .dm-timeline-item {
9602
+ flex-direction: row;
9603
+ min-width: auto;
9604
+ margin-bottom: var(--dm-space-6);
9605
+ }
9606
+
9607
+ .dm-timeline-horizontal .dm-timeline-year {
9608
+ margin-bottom: 0;
9609
+ margin-right: var(--dm-space-4);
9610
+ width: 100px;
9611
+ }
9612
+ }
9613
+
9614
+ /* Dark Theme Support */
9615
+ [data-theme="dark"] .dm-timeline-content {
9616
+ background: var(--dm-slate-800);
9617
+ border-color: var(--dm-slate-700);
9618
+ color: var(--dm-slate-200);
9619
+ }
9620
+
9621
+ [data-theme="dark"] .dm-timeline-title {
9622
+ color: var(--dm-white);
9623
+ }
9624
+
9625
+ [data-theme="dark"] .dm-timeline-description {
9626
+ color: var(--dm-slate-300);
9627
+ }
9628
+
9629
+ [data-theme="dark"] .dm-timeline-minimal .dm-timeline-content {
9630
+ background: var(--dm-slate-900);
9631
+ border-color: var(--dm-slate-700);
9632
+ }
9633
+
9634
+ [data-theme="dark"] .dm-timeline-corporate .dm-timeline-content {
9635
+ background: var(--dm-slate-800);
9636
+ border-color: var(--dm-slate-600);
9637
+ }
9638
+
9639
+ /* ==============================================
9640
+ Cookie Consent Component
9641
+ ============================================== */
9642
+
9643
+ .dm-cookie-consent {
9644
+ position: fixed;
9645
+ z-index: 9999;
9646
+ font-size: 14px;
9647
+ line-height: 1.5;
9648
+ }
9649
+
9650
+ /* Position variants */
9651
+ .dm-cookie-consent-bottom {
9652
+ bottom: 0;
9653
+ left: 0;
9654
+ right: 0;
9655
+ }
9656
+
9657
+ .dm-cookie-consent-top {
9658
+ top: 0;
9659
+ left: 0;
9660
+ right: 0;
9661
+ }
9662
+
9663
+ .dm-cookie-consent-bottom-left {
9664
+ bottom: 20px;
9665
+ left: 20px;
9666
+ max-width: 400px;
9667
+ }
9668
+
9669
+ .dm-cookie-consent-bottom-right {
9670
+ bottom: 20px;
9671
+ right: 20px;
9672
+ max-width: 400px;
9673
+ }
9674
+
9675
+ .dm-cookie-consent-center-modal {
9676
+ top: 50%;
9677
+ left: 50%;
9678
+ transform: translate(-50%, -50%);
9679
+ max-width: 600px;
9680
+ width: 90%;
9681
+ }
9682
+
9683
+ /* Layout variants */
9684
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9685
+ display: flex;
9686
+ align-items: center;
9687
+ justify-content: space-between;
9688
+ padding: 16px 20px;
9689
+ gap: 20px;
9690
+ }
9691
+
9692
+ .dm-cookie-consent-box .dm-cookie-consent-content {
9693
+ padding: 24px;
9694
+ border-radius: 8px;
9695
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
9696
+ }
9697
+
9698
+ .dm-cookie-consent-modal .dm-cookie-consent-content {
9699
+ padding: 32px;
9700
+ border-radius: 12px;
9701
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
9702
+ }
9703
+
9704
+ /* Theme variants */
9705
+ .dm-cookie-consent-light .dm-cookie-consent-content {
9706
+ background: white;
9707
+ color: #333;
9708
+ border: 1px solid #e5e5e5;
9709
+ }
9710
+
9711
+ .dm-cookie-consent-light a {
9712
+ color: var(--dm-primary);
9713
+ }
9714
+
9715
+ .dm-cookie-consent-dark .dm-cookie-consent-content {
9716
+ background: #1f2937;
9717
+ color: #f3f4f6;
9718
+ border: 1px solid #374151;
9719
+ }
9720
+
9721
+ .dm-cookie-consent-dark a {
9722
+ color: #60a5fa;
9723
+ }
9724
+
9725
+ /* Message styles */
9726
+ .dm-cookie-consent-message {
9727
+ flex: 1;
9728
+ margin-right: 20px;
9729
+ }
9730
+
9731
+ .dm-cookie-consent-message a {
9732
+ text-decoration: underline;
9733
+ margin: 0 4px;
9734
+ }
9735
+
9736
+ .dm-cookie-consent-message a:hover {
9737
+ opacity: 0.8;
9738
+ }
9739
+
9740
+ /* Button styles */
9741
+ .dm-cookie-consent-buttons {
9742
+ display: flex;
9743
+ gap: 12px;
9744
+ flex-shrink: 0;
9745
+ }
9746
+
9747
+ /* Animation */
9748
+ .dm-cookie-consent-animated {
9749
+ transition: all 0.3s ease;
9750
+ }
9751
+
9752
+ .dm-cookie-consent-bottom.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9753
+ transform: translateY(100%);
9754
+ }
9755
+
9756
+ .dm-cookie-consent-top.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9757
+ transform: translateY(-100%);
9758
+ }
9759
+
9760
+ .dm-cookie-consent-bottom-left.dm-cookie-consent-animated:not(.dm-cookie-consent-visible),
9761
+ .dm-cookie-consent-bottom-right.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9762
+ transform: translateY(20px);
9763
+ opacity: 0;
9764
+ }
9765
+
9766
+ .dm-cookie-consent-center-modal.dm-cookie-consent-animated:not(.dm-cookie-consent-visible) {
9767
+ transform: translate(-50%, -50%) scale(0.95);
9768
+ opacity: 0;
9769
+ }
9770
+
9771
+ /* Backdrop */
9772
+ .dm-cookie-consent-backdrop {
9773
+ position: fixed;
9774
+ top: 0;
9775
+ left: 0;
9776
+ right: 0;
9777
+ bottom: 0;
9778
+ background: rgba(0, 0, 0, 0.5);
9779
+ z-index: -1;
9780
+ }
9781
+
9782
+ /* Customize Modal */
9783
+ .dm-cookie-consent-modal {
9784
+ display: none;
9785
+ position: fixed;
9786
+ top: 0;
9787
+ left: 0;
9788
+ right: 0;
9789
+ bottom: 0;
9790
+ z-index: 10000;
9791
+ align-items: center;
9792
+ justify-content: center;
9793
+ }
9794
+
9795
+ .dm-cookie-consent-modal-backdrop {
9796
+ position: absolute;
9797
+ top: 0;
9798
+ left: 0;
9799
+ right: 0;
9800
+ bottom: 0;
9801
+ background: rgba(0, 0, 0, 0.5);
9802
+ }
9803
+
9804
+ .dm-cookie-consent-modal-content {
9805
+ position: relative;
9806
+ background: white;
9807
+ border-radius: 12px;
9808
+ max-width: 600px;
9809
+ width: 90%;
9810
+ max-height: 80vh;
9811
+ overflow: auto;
9812
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
7861
9813
  }
7862
9814
 
7863
- .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7864
- left: 50%;
7865
- padding-left: var(--dm-space-8);
7866
- padding-right: 0;
7867
- justify-content: flex-start;
9815
+ .dm-cookie-consent-modal-header {
9816
+ padding: 24px;
9817
+ border-bottom: 1px solid #e5e5e5;
9818
+ display: flex;
9819
+ justify-content: space-between;
9820
+ align-items: center;
7868
9821
  }
7869
9822
 
7870
- .dm-timeline-centered .dm-timeline-year {
7871
- order: 2;
7872
- margin-left: var(--dm-space-6);
7873
- margin-right: 0;
9823
+ .dm-cookie-consent-modal-header h3 {
9824
+ margin: 0;
9825
+ font-size: 20px;
9826
+ font-weight: 600;
7874
9827
  }
7875
9828
 
7876
- .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7877
- order: 0;
7878
- margin-left: 0;
7879
- margin-right: var(--dm-space-6);
9829
+ .dm-cookie-consent-modal-close {
9830
+ background: none;
9831
+ border: none;
9832
+ font-size: 24px;
9833
+ cursor: pointer;
9834
+ color: #666;
9835
+ padding: 0;
9836
+ width: 32px;
9837
+ height: 32px;
9838
+ display: flex;
9839
+ align-items: center;
9840
+ justify-content: center;
9841
+ border-radius: 4px;
9842
+ transition: all 0.2s;
7880
9843
  }
7881
9844
 
7882
- /* Horizontal Layout */
7883
- .dm-timeline-horizontal {
7884
- display: flex;
7885
- overflow-x: auto;
7886
- padding-bottom: var(--dm-space-4);
7887
- max-width: 100%;
7888
- gap: var(--dm-space-6);
9845
+ .dm-cookie-consent-modal-close:hover {
9846
+ background: #f5f5f5;
7889
9847
  }
7890
9848
 
7891
- .dm-timeline-horizontal .dm-timeline-item {
7892
- flex-direction: column;
7893
- margin-bottom: 0;
7894
- min-width: 250px;
7895
- flex-shrink: 0;
9849
+ .dm-cookie-consent-modal-body {
9850
+ padding: 24px;
7896
9851
  }
7897
9852
 
7898
- .dm-timeline-horizontal .dm-timeline-year {
7899
- width: auto;
7900
- margin-right: 0;
7901
- margin-bottom: var(--dm-space-4);
9853
+ .dm-cookie-consent-category {
9854
+ margin-bottom: 20px;
9855
+ padding-bottom: 20px;
9856
+ border-bottom: 1px solid #e5e5e5;
7902
9857
  }
7903
9858
 
7904
- /* Theme Variants */
7905
- .dm-timeline-minimal .dm-timeline-content {
7906
- box-shadow: none;
7907
- border: 1px solid var(--dm-gray-200);
7908
- background: var(--dm-gray-50);
9859
+ .dm-cookie-consent-category:last-child {
9860
+ border-bottom: none;
9861
+ margin-bottom: 0;
9862
+ padding-bottom: 0;
7909
9863
  }
7910
9864
 
7911
- .dm-timeline-minimal .dm-timeline-year {
7912
- background: var(--dm-gray-600);
9865
+ .dm-cookie-consent-category-label {
9866
+ display: flex;
9867
+ align-items: flex-start;
9868
+ cursor: pointer;
7913
9869
  }
7914
9870
 
7915
- .dm-timeline-corporate .dm-timeline-year {
7916
- background: var(--dm-slate-700);
7917
- font-size: var(--dm-font-size-xs);
7918
- text-transform: uppercase;
7919
- letter-spacing: 0.05em;
9871
+ .dm-cookie-consent-category-toggle {
9872
+ margin-right: 12px;
9873
+ margin-top: 2px;
7920
9874
  }
7921
9875
 
7922
- .dm-timeline-corporate .dm-timeline-content {
7923
- background: var(--dm-slate-50);
7924
- border-color: var(--dm-slate-200);
9876
+ .dm-cookie-consent-category-toggle:disabled {
9877
+ cursor: not-allowed;
9878
+ opacity: 0.5;
7925
9879
  }
7926
9880
 
7927
- /* Responsive Design */
7928
- @media (max-width: 768px) {
7929
- .dm-timeline-centered {
7930
- /* Switch to vertical layout on mobile */
7931
- }
7932
-
7933
- .dm-timeline-centered::before {
7934
- left: 30px;
7935
- transform: none;
7936
- }
7937
-
7938
- .dm-timeline-centered .dm-timeline-item,
7939
- .dm-timeline-centered .dm-timeline-item:nth-child(even) {
7940
- width: 100%;
7941
- left: 0;
7942
- padding-left: var(--dm-space-16);
7943
- padding-right: 0;
7944
- justify-content: flex-start;
7945
- }
7946
-
7947
- .dm-timeline-centered .dm-timeline-year,
7948
- .dm-timeline-centered .dm-timeline-item:nth-child(even) .dm-timeline-year {
7949
- order: 0;
7950
- margin-right: var(--dm-space-6);
7951
- margin-left: 0;
7952
- position: absolute;
7953
- left: 0;
7954
- width: 80px;
7955
- }
7956
-
7957
- .dm-timeline-horizontal {
7958
- flex-direction: column;
7959
- }
7960
-
7961
- .dm-timeline-horizontal .dm-timeline-item {
7962
- flex-direction: row;
7963
- min-width: auto;
7964
- margin-bottom: var(--dm-space-6);
7965
- }
7966
-
7967
- .dm-timeline-horizontal .dm-timeline-year {
7968
- margin-bottom: 0;
7969
- margin-right: var(--dm-space-4);
7970
- width: 100px;
7971
- }
9881
+ .dm-cookie-consent-category-info {
9882
+ flex: 1;
7972
9883
  }
7973
9884
 
7974
- /* Dark Theme Support */
7975
- [data-theme="dark"] .dm-timeline-content {
7976
- background: var(--dm-slate-800);
7977
- border-color: var(--dm-slate-700);
7978
- color: var(--dm-slate-200);
9885
+ .dm-cookie-consent-category-name {
9886
+ font-weight: 500;
9887
+ margin-bottom: 4px;
7979
9888
  }
7980
9889
 
7981
- [data-theme="dark"] .dm-timeline-title {
7982
- color: var(--dm-white);
9890
+ .dm-cookie-consent-required {
9891
+ color: #666;
9892
+ font-size: 12px;
7983
9893
  }
7984
9894
 
7985
- [data-theme="dark"] .dm-timeline-description {
7986
- color: var(--dm-slate-300);
9895
+ .dm-cookie-consent-category-description {
9896
+ color: #666;
9897
+ font-size: 13px;
7987
9898
  }
7988
9899
 
7989
- [data-theme="dark"] .dm-timeline-minimal .dm-timeline-content {
7990
- background: var(--dm-slate-900);
7991
- border-color: var(--dm-slate-700);
9900
+ .dm-cookie-consent-modal-footer {
9901
+ padding: 24px;
9902
+ border-top: 1px solid #e5e5e5;
9903
+ display: flex;
9904
+ justify-content: flex-end;
9905
+ gap: 12px;
7992
9906
  }
7993
9907
 
7994
- [data-theme="dark"] .dm-timeline-corporate .dm-timeline-content {
7995
- background: var(--dm-slate-800);
7996
- border-color: var(--dm-slate-600);
9908
+ /* Responsive */
9909
+ @media (max-width: 640px) {
9910
+ .dm-cookie-consent-bar .dm-cookie-consent-content {
9911
+ flex-direction: column;
9912
+ align-items: stretch;
9913
+ }
9914
+
9915
+ .dm-cookie-consent-message {
9916
+ margin-right: 0;
9917
+ margin-bottom: 16px;
9918
+ }
9919
+
9920
+ .dm-cookie-consent-buttons {
9921
+ flex-direction: column;
9922
+ }
9923
+
9924
+ .dm-cookie-consent-bottom-left,
9925
+ .dm-cookie-consent-bottom-right {
9926
+ left: 10px;
9927
+ right: 10px;
9928
+ max-width: none;
9929
+ }
7997
9930
  }
7998
9931
 
7999
9932
 
@@ -8003,11 +9936,11 @@ code {
8003
9936
  ============================================ */
8004
9937
 
8005
9938
  /*!
8006
- * Domma Themes v0.3.0-alpha.0
9939
+ * Domma Themes v0.5.0-alpha
8007
9940
  * Dynamic Object Manipulation & Modeling API
8008
9941
  * (c) 2026 Darryl Waterhouse & DCBW-IT
8009
- * Built: 2026-01-02T14:32:25.353Z
8010
- * Commit: bc8e519
9942
+ * Built: 2026-01-08T09:15:49.994Z
9943
+ * Commit: ad86642
8011
9944
  */
8012
9945
 
8013
9946
  /**
@@ -11470,5 +13403,218 @@ code {
11470
13403
  --dm-shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
11471
13404
 
11472
13405
  }
13406
+ .dm-theme-grayve {
13407
+ color-scheme: dark; /* Slate is typically a dark theme */
13408
+
13409
+ /* Tailwind-based color palette - adapting for grayve */
13410
+ /* Slate (using bootswatch values) */
13411
+ --dm-slate-50: #F8F9FA; /* Off-white */
13412
+ --dm-slate-100: #E9ECEF;
13413
+ --dm-slate-200: #DEE2E6;
13414
+ --dm-slate-300: #CED4DA;
13415
+ --dm-slate-400: #ADB5BD;
13416
+ --dm-slate-500: #6C757D; /* Medium Gray */
13417
+ --dm-slate-600: #495057;
13418
+ --dm-slate-700: #343A40;
13419
+ --dm-slate-800: #212529;
13420
+ --dm-slate-900: #1a1e21; /* Dark Gray */
13421
+ --dm-slate-950: #141619; /* Very Dark Gray */
13422
+
13423
+ /* Blues (for primary/info, etc.) */
13424
+ --dm-blue-50: #e0f7fa;
13425
+ --dm-blue-100: #b2ebf2;
13426
+ --dm-blue-200: #80deea;
13427
+ --dm-blue-300: #4dd0e1;
13428
+ --dm-blue-400: #26c6da;
13429
+ --dm-blue-500: #00bcd4; /* Bootswatch primary might be close to this or lighter */
13430
+ --dm-blue-600: #00acc1;
13431
+ --dm-blue-700: #0097a7;
13432
+ --dm-blue-800: #00838f;
13433
+ --dm-blue-900: #006064;
13434
+ --dm-blue-950: #004d40;
13435
+
13436
+ /* Green (Success) */
13437
+ --dm-green-500: #28a745;
13438
+ --dm-green-400: #49cc61;
13439
+ --dm-green-300: #6fd180;
13440
+ --dm-green-600: #218838;
13441
+
13442
+ /* Red (Danger) */
13443
+ --dm-red-500: #dc3545;
13444
+ --dm-red-400: #e35a67;
13445
+ --dm-red-300: #eb808a;
13446
+ --dm-red-600: #c82333;
13447
+
13448
+ /* Amber (Warning) */
13449
+ --dm-amber-500: #ffc107;
13450
+ --dm-amber-400: #ffcd38;
13451
+ --dm-amber-300: #ffd865;
13452
+ --dm-amber-600: #e0a800;
13453
+
13454
+ /* Sky (Info - often similar to primary but distinct) */
13455
+ --dm-sky-500: #17a2b8;
13456
+ --dm-sky-400: #26d2e9;
13457
+ --dm-sky-300: #51daec;
13458
+ --dm-sky-600: #138496;
13459
+
13460
+ /* Semantic colors */
13461
+ --dm-background: var(--dm-slate-900);
13462
+ --dm-background-alt: var(--dm-slate-800);
13463
+ --dm-surface: var(--dm-slate-800);
13464
+ --dm-surface-raised: var(--dm-slate-700);
13465
+ --dm-surface-overlay: rgba(0, 0, 0, 0.7);
13466
+
13467
+ /* Text */
13468
+ --dm-text: var(--dm-slate-200);
13469
+ --dm-text-secondary: var(--dm-slate-400);
13470
+ --dm-text-muted: var(--dm-slate-500);
13471
+ --dm-text-disabled: var(--dm-slate-600);
13472
+ --dm-text-inverse: var(--dm-slate-900);
13473
+
13474
+ /* Borders */
13475
+ --dm-border: var(--dm-slate-700);
13476
+ --dm-border-light: var(--dm-slate-800);
13477
+ --dm-border-dark: var(--dm-slate-600);
13478
+ --dm-border-focus: var(--dm-blue-500); /* Use a vibrant blue for focus */
13479
+ --dm-focus-ring: rgba(0, 188, 212, 0.3); /* Based on dm-blue-500 */
13480
+ --dm-focus-ring-danger: rgba(220, 53, 69, 0.3); /* Based on dm-red-500 */
13481
+
13482
+ /* Interactive States */
13483
+ --dm-hover-bg: rgba(255, 255, 255, 0.07);
13484
+ --dm-active-bg: rgba(255, 255, 255, 0.1);
13485
+ --dm-selected-bg: var(--dm-blue-600);
13486
+ --dm-disabled-opacity: 0.4;
13487
+
13488
+ /* Brand Colors */
13489
+ --dm-primary: var(--dm-blue-500);
13490
+ --dm-primary-dark: var(--dm-blue-700);
13491
+ --dm-primary-light: var(--dm-blue-300);
13492
+ --dm-primary-hover: var(--dm-blue-400);
13493
+ --dm-primary-active: var(--dm-blue-600);
13494
+
13495
+ --dm-secondary: var(--dm-slate-500);
13496
+ --dm-secondary-hover: var(--dm-slate-400);
13497
+ --dm-secondary-active: var(--dm-slate-300);
13498
+
13499
+ /* Status Colors */
13500
+ --dm-success: var(--dm-green-500);
13501
+ --dm-success-hover: var(--dm-green-400);
13502
+ --dm-success-active: var(--dm-green-600);
13503
+ --dm-success-light: rgba(40, 167, 69, 0.2);
13504
+ --dm-success-dark: var(--dm-green-600);
13505
+
13506
+ --dm-danger: var(--dm-red-500);
13507
+ --dm-danger-hover: var(--dm-red-400);
13508
+ --dm-danger-active: var(--dm-red-600);
13509
+ --dm-danger-light: rgba(220, 53, 69, 0.2);
13510
+ --dm-danger-dark: var(--dm-red-600);
13511
+
13512
+ --dm-warning: var(--dm-amber-400);
13513
+ --dm-warning-hover: var(--dm-amber-300);
13514
+ --dm-warning-active: var(--dm-amber-500);
13515
+ --dm-warning-text: var(--dm-amber-900);
13516
+ --dm-warning-light: rgba(255, 193, 7, 0.2);
13517
+ --dm-warning-dark: var(--dm-amber-600);
13518
+
13519
+ --dm-info: var(--dm-sky-500);
13520
+ --dm-info-hover: var(--dm-sky-400);
13521
+ --dm-info-active: var(--dm-sky-600);
13522
+ --dm-info-light: rgba(23, 162, 184, 0.2);
13523
+ --dm-info-dark: var(--dm-sky-600);
13524
+
13525
+ /* Background Tints */
13526
+ --dm-primary-bg: rgba(0, 188, 212, 0.15);
13527
+ --dm-secondary-bg: rgba(108, 117, 125, 0.15);
13528
+ --dm-success-bg: rgba(40, 167, 69, 0.15);
13529
+ --dm-danger-bg: rgba(220, 53, 69, 0.15);
13530
+ --dm-warning-bg: rgba(255, 193, 7, 0.15);
13531
+ --dm-info-bg: rgba(23, 162, 184, 0.15);
13532
+
13533
+ /* Semantic Surface Colors */
13534
+ --dm-surface-secondary: var(--dm-slate-900);
13535
+ --dm-card-bg: var(--dm-slate-800);
13536
+ --dm-card-border: var(--dm-slate-700);
13537
+
13538
+ /* Legacy color names (kept for backwards compatibility) */
13539
+ --dm-light: var(--dm-slate-200);
13540
+ --dm-dark: var(--dm-slate-800);
13541
+ --dm-white: #ffffff;
13542
+ --dm-black: #000000;
13543
+
13544
+ /* Grays (mapped to Slate) */
13545
+ --dm-gray-50: var(--dm-slate-50);
13546
+ --dm-gray-100: var(--dm-slate-100);
13547
+ --dm-gray-200: var(--dm-slate-200);
13548
+ --dm-gray-300: var(--dm-slate-300);
13549
+ --dm-gray-400: var(--dm-slate-400);
13550
+ --dm-gray-500: var(--dm-slate-500);
13551
+ --dm-gray-600: var(--dm-slate-600);
13552
+ --dm-gray-700: var(--dm-slate-700);
13553
+ --dm-gray-800: var(--dm-slate-800);
13554
+ --dm-gray-900: var(--dm-slate-900);
13555
+ --dm-gray-950: var(--dm-slate-950);
13556
+
13557
+ /* Component-specific variables */
13558
+ --dm-input-bg: var(--dm-surface);
13559
+ --dm-input-border: var(--dm-border-dark);
13560
+ --dm-input-text: var(--dm-text);
13561
+ --dm-input-placeholder: var(--dm-text-muted);
13562
+ --dm-input-focus-border: var(--dm-primary);
13563
+ --dm-input-disabled-bg: var(--dm-slate-800);
13564
+
13565
+ --dm-table-border: var(--dm-border);
13566
+ --dm-table-hover-bg: var(--dm-hover-bg);
13567
+ --dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
13568
+
13569
+ --dm-navbar-bg: var(--dm-surface);
13570
+ --dm-navbar-text: var(--dm-text);
13571
+ --dm-navbar-border: var(--dm-border);
13572
+
13573
+ --dm-dropdown-bg: var(--dm-surface-raised);
13574
+ --dm-dropdown-border: var(--dm-border);
13575
+ --dm-dropdown-item-hover: var(--dm-hover-bg);
13576
+ --dm-dropdown-item-active: var(--dm-selected-bg);
13577
+
13578
+ --dm-sidebar-bg: var(--dm-surface);
13579
+ --dm-sidebar-border: var(--dm-border);
13580
+ --dm-sidebar-item-hover: var(--dm-hover-bg);
13581
+ --dm-sidebar-item-active: var(--dm-selected-bg);
13582
+
13583
+ --dm-autocomplete-bg: var(--dm-surface);
13584
+ --dm-autocomplete-border: var(--dm-border);
13585
+ --dm-autocomplete-shadow: var(--dm-shadow-md);
13586
+ --dm-autocomplete-item-hover: var(--dm-hover-bg);
13587
+ --dm-autocomplete-item-active: var(--dm-selected-bg);
13588
+ --dm-autocomplete-highlight: var(--dm-primary-light);
13589
+
13590
+ --dm-pillbox-bg: var(--dm-surface);
13591
+ --dm-pillbox-border: var(--dm-border);
13592
+ --dm-pill-bg: var(--dm-gray-700); /* Darker pill background for dark theme */
13593
+ --dm-pill-color: var(--dm-text);
13594
+ --dm-pill-hover-bg: var(--dm-gray-600);
13595
+
13596
+ --dm-tab-border: var(--dm-border);
13597
+ --dm-tab-hover-bg: var(--dm-hover-bg);
13598
+ --dm-tab-active-border: var(--dm-primary);
13599
+ --dm-tab-active-text: var(--dm-primary);
13600
+
13601
+ --dm-accordion-border: var(--dm-border);
13602
+ --dm-accordion-header-hover: var(--dm-hover-bg);
13603
+ }
13604
+
13605
+ /* Syntax highlighting tokens for grayve (assuming similar to dark theme) */
13606
+ .dm-theme-grayve .code-block .syntax-keyword {
13607
+ color: #c792ea; /* Purple */
13608
+ font-weight: 500;
13609
+ }
13610
+
13611
+ .dm-theme-grayve .code-block .syntax-string,
13612
+ .dm-theme-grayve .code-block .syntax-template-string {
13613
+ color: #c3e88d; /* Green */
13614
+ }
13615
+
13616
+ .dm-theme-grayve .code-block .syntax-function {
13617
+ color: #82aaff; /* Light Blue */
13618
+ }
11473
13619
 
11474
13620