domma-js 0.31.0 → 0.33.0

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 (30) hide show
  1. package/package.json +2 -2
  2. package/public/dist/bundles/domma-complete.css +46 -16
  3. package/public/dist/bundles/domma-data-focused.css +46 -16
  4. package/public/dist/bundles/domma-essentials.css +46 -16
  5. package/public/dist/bundles/domma-full.css +46 -16
  6. package/public/dist/bundles/domma-minimal.css +17 -8
  7. package/public/dist/domma-flags.esm.js +3 -3
  8. package/public/dist/domma-flags.min.js +3 -3
  9. package/public/dist/domma-syntax.min.js +3 -3
  10. package/public/dist/domma.css +12 -3
  11. package/public/dist/domma.esm.js +4 -4
  12. package/public/dist/domma.min.js +4 -4
  13. package/public/dist/elements.css +26 -5
  14. package/public/dist/grid.css +3 -3
  15. package/public/dist/syntax.css +3 -3
  16. package/public/dist/themes/domma-themes.css +3 -3
  17. package/templates/kickstart/frontend/pages/about/index.html +33 -33
  18. package/templates/kickstart/frontend/pages/blog/index.html +58 -58
  19. package/templates/kickstart/frontend/pages/contact/index.html +45 -54
  20. package/templates/kickstart/frontend/pages/cookies/index.html +44 -44
  21. package/templates/kickstart/frontend/pages/docs/index.html +49 -58
  22. package/templates/kickstart/frontend/pages/index.html +14 -14
  23. package/templates/kickstart/frontend/pages/privacy/index.html +43 -43
  24. package/templates/kickstart/frontend/pages/terms/index.html +49 -49
  25. package/templates/kickstart-spa/frontend/js/views/templates/404.html +5 -5
  26. package/templates/kickstart-spa/frontend/js/views/templates/about.html +6 -6
  27. package/templates/kickstart-spa/frontend/js/views/templates/contact.html +5 -5
  28. package/templates/kickstart-spa/frontend/js/views/templates/home.html +4 -4
  29. package/templates/page-template/page.html +3 -3
  30. package/templates/view-template/view.html +5 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domma-js",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "Dynamic Object Manipulation & Modeling API - A complete front-end toolkit.",
5
5
  "main": "public/dist/domma.min.js",
6
6
  "module": "public/dist/domma.esm.js",
@@ -79,7 +79,7 @@
79
79
  "@rollup/plugin-terser": "^0.4.4",
80
80
  "@vitest/coverage-v8": "^4.0.16",
81
81
  "cypress": "^15.8.1",
82
- "domma-reactive": "0.1.0",
82
+ "domma-reactive": "0.2.0",
83
83
  "dompurify": "^3.4.13",
84
84
  "dotenv": "^17.2.3",
85
85
  "jsdom": "^24.1.0",
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.31.0
2
+ * Domma Complete CSS Bundle v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.463Z
5
+ * Built: 2026-08-05T08:21:19.351Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.31.0
14
+ * Domma Core CSS v0.33.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T19:27:34.245Z
18
- * Commit: 5a35ae6
17
+ * Built: 2026-08-05T08:21:19.137Z
18
+ * Commit: 18c0b92
19
19
  */
20
20
 
21
21
  /**
@@ -1155,6 +1155,15 @@ code, pre {
1155
1155
  text-align: left;
1156
1156
  }
1157
1157
 
1158
+ .list-none {
1159
+ list-style: none;
1160
+ padding-left: 0;
1161
+ }
1162
+
1163
+ .no-underline {
1164
+ text-decoration: none;
1165
+ }
1166
+
1158
1167
  .text-center {
1159
1168
  text-align: center;
1160
1169
  }
@@ -4829,11 +4838,11 @@ body.dm-cloaked.dm-ready {
4829
4838
  ============================================ */
4830
4839
 
4831
4840
  /*!
4832
- * Domma Grid CSS v0.31.0
4841
+ * Domma Grid CSS v0.33.0
4833
4842
  * Dynamic Object Manipulation & Modeling API
4834
4843
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T19:27:34.249Z
4836
- * Commit: 5a35ae6
4844
+ * Built: 2026-08-05T08:21:19.141Z
4845
+ * Commit: 18c0b92
4837
4846
  */
4838
4847
 
4839
4848
  /**
@@ -5454,11 +5463,11 @@ body.dm-cloaked.dm-ready {
5454
5463
  ============================================ */
5455
5464
 
5456
5465
  /*!
5457
- * Domma Elements CSS v0.31.0
5466
+ * Domma Elements CSS v0.33.0
5458
5467
  * Dynamic Object Manipulation & Modeling API
5459
5468
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T19:27:34.254Z
5461
- * Commit: 5a35ae6
5469
+ * Built: 2026-08-05T08:21:19.146Z
5470
+ * Commit: 18c0b92
5462
5471
  */
5463
5472
 
5464
5473
  /**
@@ -5493,6 +5502,10 @@ body.dm-cloaked.dm-ready {
5493
5502
  cursor: pointer;
5494
5503
  transition: all var(--dm-transition-fast);
5495
5504
  text-decoration: none;
5505
+ /* Base colour so a variant whose own colour declaration fails to resolve
5506
+ inherits a readable value rather than whatever surrounds it. Without
5507
+ this, an outline button could render white-on-white. */
5508
+ color: var(--dm-text);
5496
5509
  }
5497
5510
 
5498
5511
  .btn:focus {
@@ -5570,9 +5583,17 @@ body.dm-cloaked.dm-ready {
5570
5583
  }
5571
5584
 
5572
5585
  .btn-outline {
5573
- background-color: transparent;
5586
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5587
+ blend. Transparent meant the contrast depended on whatever sat behind
5588
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5589
+ the label landed on top of its own background. Both vars below are
5590
+ redefined by all 32 theme blocks, so this tracks the theme and is
5591
+ always legible. */
5592
+ background-color: var(--dm-surface);
5574
5593
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5594
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5595
+ readable because it is the same colour as the surrounding prose. */
5596
+ color: var(--dm-text);
5576
5597
  }
5577
5598
 
5578
5599
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6106,15 @@ body.dm-cloaked.dm-ready {
6085
6106
  }
6086
6107
 
6087
6108
 
6109
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6110
+ page to. Used in 14 places across the showcase and previously undefined, so
6111
+ those tables simply overflowed on narrow screens. */
6112
+ .table-responsive {
6113
+ width: 100%;
6114
+ overflow-x: auto;
6115
+ -webkit-overflow-scrolling: touch;
6116
+ }
6117
+
6088
6118
  .table {
6089
6119
  width: 100%;
6090
6120
  border-collapse: collapse;
@@ -13439,11 +13469,11 @@ code {
13439
13469
  ============================================ */
13440
13470
 
13441
13471
  /*!
13442
- * Domma Themes v0.31.0
13472
+ * Domma Themes v0.33.0
13443
13473
  * Dynamic Object Manipulation & Modeling API
13444
13474
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T19:27:34.226Z
13446
- * Commit: 5a35ae6
13475
+ * Built: 2026-08-05T08:21:19.120Z
13476
+ * Commit: 18c0b92
13447
13477
  */
13448
13478
 
13449
13479
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.31.0
2
+ * Domma Data-Focused CSS Bundle v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.458Z
5
+ * Built: 2026-08-05T08:21:19.346Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.31.0
14
+ * Domma Core CSS v0.33.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T19:27:34.245Z
18
- * Commit: 5a35ae6
17
+ * Built: 2026-08-05T08:21:19.137Z
18
+ * Commit: 18c0b92
19
19
  */
20
20
 
21
21
  /**
@@ -1155,6 +1155,15 @@ code, pre {
1155
1155
  text-align: left;
1156
1156
  }
1157
1157
 
1158
+ .list-none {
1159
+ list-style: none;
1160
+ padding-left: 0;
1161
+ }
1162
+
1163
+ .no-underline {
1164
+ text-decoration: none;
1165
+ }
1166
+
1158
1167
  .text-center {
1159
1168
  text-align: center;
1160
1169
  }
@@ -4829,11 +4838,11 @@ body.dm-cloaked.dm-ready {
4829
4838
  ============================================ */
4830
4839
 
4831
4840
  /*!
4832
- * Domma Grid CSS v0.31.0
4841
+ * Domma Grid CSS v0.33.0
4833
4842
  * Dynamic Object Manipulation & Modeling API
4834
4843
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T19:27:34.249Z
4836
- * Commit: 5a35ae6
4844
+ * Built: 2026-08-05T08:21:19.141Z
4845
+ * Commit: 18c0b92
4837
4846
  */
4838
4847
 
4839
4848
  /**
@@ -5454,11 +5463,11 @@ body.dm-cloaked.dm-ready {
5454
5463
  ============================================ */
5455
5464
 
5456
5465
  /*!
5457
- * Domma Elements CSS v0.31.0
5466
+ * Domma Elements CSS v0.33.0
5458
5467
  * Dynamic Object Manipulation & Modeling API
5459
5468
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T19:27:34.254Z
5461
- * Commit: 5a35ae6
5469
+ * Built: 2026-08-05T08:21:19.146Z
5470
+ * Commit: 18c0b92
5462
5471
  */
5463
5472
 
5464
5473
  /**
@@ -5493,6 +5502,10 @@ body.dm-cloaked.dm-ready {
5493
5502
  cursor: pointer;
5494
5503
  transition: all var(--dm-transition-fast);
5495
5504
  text-decoration: none;
5505
+ /* Base colour so a variant whose own colour declaration fails to resolve
5506
+ inherits a readable value rather than whatever surrounds it. Without
5507
+ this, an outline button could render white-on-white. */
5508
+ color: var(--dm-text);
5496
5509
  }
5497
5510
 
5498
5511
  .btn:focus {
@@ -5570,9 +5583,17 @@ body.dm-cloaked.dm-ready {
5570
5583
  }
5571
5584
 
5572
5585
  .btn-outline {
5573
- background-color: transparent;
5586
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5587
+ blend. Transparent meant the contrast depended on whatever sat behind
5588
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5589
+ the label landed on top of its own background. Both vars below are
5590
+ redefined by all 32 theme blocks, so this tracks the theme and is
5591
+ always legible. */
5592
+ background-color: var(--dm-surface);
5574
5593
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5594
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5595
+ readable because it is the same colour as the surrounding prose. */
5596
+ color: var(--dm-text);
5576
5597
  }
5577
5598
 
5578
5599
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6106,15 @@ body.dm-cloaked.dm-ready {
6085
6106
  }
6086
6107
 
6087
6108
 
6109
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6110
+ page to. Used in 14 places across the showcase and previously undefined, so
6111
+ those tables simply overflowed on narrow screens. */
6112
+ .table-responsive {
6113
+ width: 100%;
6114
+ overflow-x: auto;
6115
+ -webkit-overflow-scrolling: touch;
6116
+ }
6117
+
6088
6118
  .table {
6089
6119
  width: 100%;
6090
6120
  border-collapse: collapse;
@@ -13439,11 +13469,11 @@ code {
13439
13469
  ============================================ */
13440
13470
 
13441
13471
  /*!
13442
- * Domma Themes v0.31.0
13472
+ * Domma Themes v0.33.0
13443
13473
  * Dynamic Object Manipulation & Modeling API
13444
13474
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T19:27:34.226Z
13446
- * Commit: 5a35ae6
13475
+ * Built: 2026-08-05T08:21:19.120Z
13476
+ * Commit: 18c0b92
13447
13477
  */
13448
13478
 
13449
13479
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Essentials CSS Bundle v0.31.0
2
+ * Domma Essentials CSS Bundle v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.446Z
5
+ * Built: 2026-08-05T08:21:19.334Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.31.0
14
+ * Domma Core CSS v0.33.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T19:27:34.245Z
18
- * Commit: 5a35ae6
17
+ * Built: 2026-08-05T08:21:19.137Z
18
+ * Commit: 18c0b92
19
19
  */
20
20
 
21
21
  /**
@@ -1155,6 +1155,15 @@ code, pre {
1155
1155
  text-align: left;
1156
1156
  }
1157
1157
 
1158
+ .list-none {
1159
+ list-style: none;
1160
+ padding-left: 0;
1161
+ }
1162
+
1163
+ .no-underline {
1164
+ text-decoration: none;
1165
+ }
1166
+
1158
1167
  .text-center {
1159
1168
  text-align: center;
1160
1169
  }
@@ -4829,11 +4838,11 @@ body.dm-cloaked.dm-ready {
4829
4838
  ============================================ */
4830
4839
 
4831
4840
  /*!
4832
- * Domma Grid CSS v0.31.0
4841
+ * Domma Grid CSS v0.33.0
4833
4842
  * Dynamic Object Manipulation & Modeling API
4834
4843
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T19:27:34.249Z
4836
- * Commit: 5a35ae6
4844
+ * Built: 2026-08-05T08:21:19.141Z
4845
+ * Commit: 18c0b92
4837
4846
  */
4838
4847
 
4839
4848
  /**
@@ -5454,11 +5463,11 @@ body.dm-cloaked.dm-ready {
5454
5463
  ============================================ */
5455
5464
 
5456
5465
  /*!
5457
- * Domma Elements CSS v0.31.0
5466
+ * Domma Elements CSS v0.33.0
5458
5467
  * Dynamic Object Manipulation & Modeling API
5459
5468
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T19:27:34.254Z
5461
- * Commit: 5a35ae6
5469
+ * Built: 2026-08-05T08:21:19.146Z
5470
+ * Commit: 18c0b92
5462
5471
  */
5463
5472
 
5464
5473
  /**
@@ -5493,6 +5502,10 @@ body.dm-cloaked.dm-ready {
5493
5502
  cursor: pointer;
5494
5503
  transition: all var(--dm-transition-fast);
5495
5504
  text-decoration: none;
5505
+ /* Base colour so a variant whose own colour declaration fails to resolve
5506
+ inherits a readable value rather than whatever surrounds it. Without
5507
+ this, an outline button could render white-on-white. */
5508
+ color: var(--dm-text);
5496
5509
  }
5497
5510
 
5498
5511
  .btn:focus {
@@ -5570,9 +5583,17 @@ body.dm-cloaked.dm-ready {
5570
5583
  }
5571
5584
 
5572
5585
  .btn-outline {
5573
- background-color: transparent;
5586
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5587
+ blend. Transparent meant the contrast depended on whatever sat behind
5588
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5589
+ the label landed on top of its own background. Both vars below are
5590
+ redefined by all 32 theme blocks, so this tracks the theme and is
5591
+ always legible. */
5592
+ background-color: var(--dm-surface);
5574
5593
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5594
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5595
+ readable because it is the same colour as the surrounding prose. */
5596
+ color: var(--dm-text);
5576
5597
  }
5577
5598
 
5578
5599
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6106,15 @@ body.dm-cloaked.dm-ready {
6085
6106
  }
6086
6107
 
6087
6108
 
6109
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6110
+ page to. Used in 14 places across the showcase and previously undefined, so
6111
+ those tables simply overflowed on narrow screens. */
6112
+ .table-responsive {
6113
+ width: 100%;
6114
+ overflow-x: auto;
6115
+ -webkit-overflow-scrolling: touch;
6116
+ }
6117
+
6088
6118
  .table {
6089
6119
  width: 100%;
6090
6120
  border-collapse: collapse;
@@ -13439,11 +13469,11 @@ code {
13439
13469
  ============================================ */
13440
13470
 
13441
13471
  /*!
13442
- * Domma Themes v0.31.0
13472
+ * Domma Themes v0.33.0
13443
13473
  * Dynamic Object Manipulation & Modeling API
13444
13474
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T19:27:34.226Z
13446
- * Commit: 5a35ae6
13475
+ * Built: 2026-08-05T08:21:19.120Z
13476
+ * Commit: 18c0b92
13447
13477
  */
13448
13478
 
13449
13479
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Full CSS Bundle v0.31.0
2
+ * Domma Full CSS Bundle v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.453Z
5
+ * Built: 2026-08-05T08:21:19.341Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.31.0
14
+ * Domma Core CSS v0.33.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T19:27:34.245Z
18
- * Commit: 5a35ae6
17
+ * Built: 2026-08-05T08:21:19.137Z
18
+ * Commit: 18c0b92
19
19
  */
20
20
 
21
21
  /**
@@ -1155,6 +1155,15 @@ code, pre {
1155
1155
  text-align: left;
1156
1156
  }
1157
1157
 
1158
+ .list-none {
1159
+ list-style: none;
1160
+ padding-left: 0;
1161
+ }
1162
+
1163
+ .no-underline {
1164
+ text-decoration: none;
1165
+ }
1166
+
1158
1167
  .text-center {
1159
1168
  text-align: center;
1160
1169
  }
@@ -4829,11 +4838,11 @@ body.dm-cloaked.dm-ready {
4829
4838
  ============================================ */
4830
4839
 
4831
4840
  /*!
4832
- * Domma Grid CSS v0.31.0
4841
+ * Domma Grid CSS v0.33.0
4833
4842
  * Dynamic Object Manipulation & Modeling API
4834
4843
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T19:27:34.249Z
4836
- * Commit: 5a35ae6
4844
+ * Built: 2026-08-05T08:21:19.141Z
4845
+ * Commit: 18c0b92
4837
4846
  */
4838
4847
 
4839
4848
  /**
@@ -5454,11 +5463,11 @@ body.dm-cloaked.dm-ready {
5454
5463
  ============================================ */
5455
5464
 
5456
5465
  /*!
5457
- * Domma Elements CSS v0.31.0
5466
+ * Domma Elements CSS v0.33.0
5458
5467
  * Dynamic Object Manipulation & Modeling API
5459
5468
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T19:27:34.254Z
5461
- * Commit: 5a35ae6
5469
+ * Built: 2026-08-05T08:21:19.146Z
5470
+ * Commit: 18c0b92
5462
5471
  */
5463
5472
 
5464
5473
  /**
@@ -5493,6 +5502,10 @@ body.dm-cloaked.dm-ready {
5493
5502
  cursor: pointer;
5494
5503
  transition: all var(--dm-transition-fast);
5495
5504
  text-decoration: none;
5505
+ /* Base colour so a variant whose own colour declaration fails to resolve
5506
+ inherits a readable value rather than whatever surrounds it. Without
5507
+ this, an outline button could render white-on-white. */
5508
+ color: var(--dm-text);
5496
5509
  }
5497
5510
 
5498
5511
  .btn:focus {
@@ -5570,9 +5583,17 @@ body.dm-cloaked.dm-ready {
5570
5583
  }
5571
5584
 
5572
5585
  .btn-outline {
5573
- background-color: transparent;
5586
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5587
+ blend. Transparent meant the contrast depended on whatever sat behind
5588
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5589
+ the label landed on top of its own background. Both vars below are
5590
+ redefined by all 32 theme blocks, so this tracks the theme and is
5591
+ always legible. */
5592
+ background-color: var(--dm-surface);
5574
5593
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5594
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5595
+ readable because it is the same colour as the surrounding prose. */
5596
+ color: var(--dm-text);
5576
5597
  }
5577
5598
 
5578
5599
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6106,15 @@ body.dm-cloaked.dm-ready {
6085
6106
  }
6086
6107
 
6087
6108
 
6109
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6110
+ page to. Used in 14 places across the showcase and previously undefined, so
6111
+ those tables simply overflowed on narrow screens. */
6112
+ .table-responsive {
6113
+ width: 100%;
6114
+ overflow-x: auto;
6115
+ -webkit-overflow-scrolling: touch;
6116
+ }
6117
+
6088
6118
  .table {
6089
6119
  width: 100%;
6090
6120
  border-collapse: collapse;
@@ -13439,11 +13469,11 @@ code {
13439
13469
  ============================================ */
13440
13470
 
13441
13471
  /*!
13442
- * Domma Themes v0.31.0
13472
+ * Domma Themes v0.33.0
13443
13473
  * Dynamic Object Manipulation & Modeling API
13444
13474
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T19:27:34.226Z
13446
- * Commit: 5a35ae6
13475
+ * Built: 2026-08-05T08:21:19.120Z
13476
+ * Commit: 18c0b92
13447
13477
  */
13448
13478
 
13449
13479
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Minimal CSS Bundle v0.31.0
2
+ * Domma Minimal CSS Bundle v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.444Z
5
+ * Built: 2026-08-05T08:21:19.332Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.31.0
14
+ * Domma Core CSS v0.33.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T19:27:34.245Z
18
- * Commit: 5a35ae6
17
+ * Built: 2026-08-05T08:21:19.137Z
18
+ * Commit: 18c0b92
19
19
  */
20
20
 
21
21
  /**
@@ -1155,6 +1155,15 @@ code, pre {
1155
1155
  text-align: left;
1156
1156
  }
1157
1157
 
1158
+ .list-none {
1159
+ list-style: none;
1160
+ padding-left: 0;
1161
+ }
1162
+
1163
+ .no-underline {
1164
+ text-decoration: none;
1165
+ }
1166
+
1158
1167
  .text-center {
1159
1168
  text-align: center;
1160
1169
  }
@@ -4829,11 +4838,11 @@ body.dm-cloaked.dm-ready {
4829
4838
  ============================================ */
4830
4839
 
4831
4840
  /*!
4832
- * Domma Grid CSS v0.31.0
4841
+ * Domma Grid CSS v0.33.0
4833
4842
  * Dynamic Object Manipulation & Modeling API
4834
4843
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T19:27:34.249Z
4836
- * Commit: 5a35ae6
4844
+ * Built: 2026-08-05T08:21:19.141Z
4845
+ * Commit: 18c0b92
4837
4846
  */
4838
4847
 
4839
4848
  /**
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.31.0
2
+ * Domma Flags v0.33.0
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:21.632Z
6
- * Commit: 5a35ae6
5
+ * Built: 2026-08-05T08:21:06.074Z
6
+ * Commit: 18c0b92
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.31.0
2
+ * Domma Flags v0.33.0
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:21.632Z
6
- * Commit: 5a35ae6
5
+ * Built: 2026-08-05T08:21:06.074Z
6
+ * Commit: 18c0b92
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Syntax Highlighter v0.31.0
2
+ * Domma Syntax Highlighter v0.33.0
3
3
  * Lightweight code syntax highlighting for JavaScript, HTML, and CSS
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:21.628Z
6
- * Commit: 5a35ae6
5
+ * Built: 2026-08-05T08:21:06.071Z
6
+ * Commit: 18c0b92
7
7
  */
8
8
  !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).DommaSyntax={})}(this,function(t){"use strict";const e={javascript:[{type:"comment",pattern:/\/\*[\s\S]*?\*\//g},{type:"comment",pattern:/\/\/.*/g},{type:"template-string",pattern:/`(?:\\.|[^`\\])*`/g},{type:"string",pattern:/"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/g},{type:"keyword",pattern:/\b(const|let|var|function|return|if|else|for|while|do|break|continue|switch|case|default|try|catch|finally|throw|async|await|class|extends|static|new|this|super|import|export|from|as|default|yield|typeof|instanceof|in|of|delete|void)\b/g},{type:"boolean",pattern:/\b(true|false|null|undefined|NaN|Infinity)\b/g},{type:"number",pattern:/\b\d+\.?\d*([eE][+-]?\d+)?\b/g},{type:"function",pattern:/\b([a-zA-Z_$][\w$]*)\s*(?=\()/g},{type:"class-name",pattern:/\b[A-Z][\w$]*\b/g},{type:"operator",pattern:/[+\-*/%=<>!&|^~?:]+|===|!==|==|!=|<=|>=|&&|\|\||<<|>>|>>>/g},{type:"punctuation",pattern:/[{}[\]();,.]/g}],html:[{type:"comment",pattern:/<!--[\s\S]*?-->/g},{type:"doctype",pattern:/<!DOCTYPE[^>]*>/gi},{type:"tag-open",pattern:/<\/?[a-zA-Z][\w-]*/g},{type:"tag-close",pattern:/\/?>/g},{type:"attr-name",pattern:/\s+[a-zA-Z:@][\w:.-]*(?=\s*=)/g},{type:"attr-value",pattern:/=\s*"[^"]*"|=\s*'[^']*'/g},{type:"entity",pattern:/&[#\w]+;/g}],css:[{type:"comment",pattern:/\/\*[\s\S]*?\*\//g},{type:"at-rule",pattern:/@[\w-]+/g},{type:"selector",pattern:/[.#]?[a-zA-Z][\w-]*(?=\s*[{,])/g},{type:"property",pattern:/\b[\w-]+(?=\s*:)/g},{type:"string",pattern:/"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/g},{type:"function",pattern:/\b[\w-]+(?=\()/g},{type:"important",pattern:/!important\b/g},{type:"number",pattern:/\b\d+\.?\d*(px|em|rem|%|vh|vw|pt|cm|mm|in|pc|ex|ch|vmin|vmax|fr)?\b/g},{type:"color",pattern:/#[\da-fA-F]{3,8}\b/g},{type:"punctuation",pattern:/[{}:;,()]/g}]};function n(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};return t.replace(/[&<>"']/g,t=>e[t])}class a{constructor(){this.config={autoDetect:!0,preserveOriginal:!0,selector:".code-block",showLanguageBadge:!1,languagePrefix:"language-"}}highlight(t,a=null){const r="string"==typeof t?document.querySelector(t):t;if(!r||r.hasAttribute("data-syntax-highlighted"))return!1;if(!a&&this.config.autoDetect){const t=Array.from(r.classList).find(t=>t.startsWith(this.config.languagePrefix));t&&(a=t.substring(this.config.languagePrefix.length))}if(!a||!e[a])return!1;const o=r.textContent||"";this.config.preserveOriginal&&r.setAttribute("data-original-code",o);const i=function(t,a){const r=e[a];if(!r)return n(t);const o=[];for(const{type:e,pattern:n}of r){if("html"===a&&"entity"===e)continue;let r;for(n.lastIndex=0;null!==(r=n.exec(t));)o.push({start:r.index,end:r.index+r[0].length,text:r[0],type:e})}o.sort((t,e)=>t.start-e.start);const i=[];let s=0;for(const t of o)t.start>=s&&(i.push(t),s=t.end);let c="",p=0;for(const e of i)e.start>p&&(c+=n(t.substring(p,e.start))),c+=`<span class="syntax-${e.type}">${n(e.text)}</span>`,p=e.end;return p<t.length&&(c+=n(t.substring(p))),c}(o,a);return r.innerHTML=i,r.setAttribute("data-syntax-highlighted","true"),r.setAttribute("data-language",a),this.config.showLanguageBadge&&this.addLanguageBadge(r,a),!0}scan(t={}){const e=t.selector||this.config.selector,n=document.querySelectorAll(e);let a=0;return n.forEach(e=>{this.highlight(e,t.language||null)&&(this.addCopyButton(e),a++)}),a}register(t,n){t&&Array.isArray(n)?e[t]=n:console.error("SyntaxHighlighter: Invalid language registration")}configure(t){return t?(Object.assign(this.config,t),this.config):{...this.config}}addLanguageBadge(t,e){if(t.querySelector(".syntax-language-badge"))return;const n=document.createElement("div");n.className="syntax-language-badge",n.textContent=e.toUpperCase(),t.style.position="relative",t.insertBefore(n,t.firstChild)}getLanguages(){return Object.keys(e)}isLanguageSupported(t){return t in e}addCopyButton(t){if(t.parentElement&&t.parentElement.classList.contains("code-block-wrapper"))return;const e=document.createElement("div");e.className="code-block-wrapper";const n=document.createElement("button");n.className="code-block-copy",n.setAttribute("aria-label","Copy code to clipboard"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>',n.addEventListener("click",async()=>{const e=t.getAttribute("data-original-code")||t.textContent;try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(e);else{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}n.classList.add("copied"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg>',setTimeout(()=>{n.classList.remove("copied"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>'},2e3)}catch(t){console.error("Failed to copy code:",t)}}),t.parentNode.insertBefore(e,t),e.appendChild(t),e.appendChild(n)}}const r=new a;"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{r.scan()}):setTimeout(()=>r.scan(),0)),"undefined"!=typeof window&&(window.Domma&&(window.Domma.syntax=r),window.DommaSyntax=r),t.LANGUAGES=e,t.SyntaxHighlighter=a,t.default=r,t.syntax=r,Object.defineProperty(t,"__esModule",{value:!0})});
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Core CSS v0.31.0
2
+ * Domma Core CSS v0.33.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T19:27:34.245Z
6
- * Commit: 5a35ae6
5
+ * Built: 2026-08-05T08:21:19.137Z
6
+ * Commit: 18c0b92
7
7
  */
8
8
 
9
9
  /**
@@ -1143,6 +1143,15 @@ code, pre {
1143
1143
  text-align: left;
1144
1144
  }
1145
1145
 
1146
+ .list-none {
1147
+ list-style: none;
1148
+ padding-left: 0;
1149
+ }
1150
+
1151
+ .no-underline {
1152
+ text-decoration: none;
1153
+ }
1154
+
1146
1155
  .text-center {
1147
1156
  text-align: center;
1148
1157
  }