meadow-integration 1.0.39 → 1.0.41

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 (32) hide show
  1. package/Dockerfile +1 -1
  2. package/docs/_brand.json +18 -0
  3. package/docs/_version.json +3 -3
  4. package/docs/data-clone/configuration.md +9 -1
  5. package/docs/index.html +6 -7
  6. package/docs/retold-catalog.json +18 -13
  7. package/docs/retold-keyword-index.json +4937 -4775
  8. package/example-applications/mapping-demo/package.json +25 -1
  9. package/example-applications/mapping-demo/server.js +28 -0
  10. package/example-applications/mapping-demo/source/MappingDemoApp.js +42 -3
  11. package/example-applications/mapping-demo/source/MappingDemoBrand.js +17 -0
  12. package/example-applications/mapping-demo/web/favicons/apple-touch-icon.png +0 -0
  13. package/example-applications/mapping-demo/web/favicons/favicon-16.png +0 -0
  14. package/example-applications/mapping-demo/web/favicons/favicon-192.png +0 -0
  15. package/example-applications/mapping-demo/web/favicons/favicon-32.png +0 -0
  16. package/example-applications/mapping-demo/web/favicons/favicon-48.png +0 -0
  17. package/example-applications/mapping-demo/web/favicons/favicon-512.png +0 -0
  18. package/example-applications/mapping-demo/web/favicons/favicon-64.png +0 -0
  19. package/example-applications/mapping-demo/web/favicons/favicon-dark.svg +30 -0
  20. package/example-applications/mapping-demo/web/favicons/favicon-light.svg +30 -0
  21. package/example-applications/mapping-demo/web/favicons/favicon.svg +30 -0
  22. package/example-applications/mapping-demo/web/index.html +46 -32
  23. package/example-applications/mapping-demo/web/mapping-demo-editor.js +3268 -399
  24. package/example-applications/mapping-demo/web/mapping-demo-editor.js.map +1 -1
  25. package/example-applications/mapping-demo/web/mapping-demo-editor.min.js +34 -1
  26. package/example-applications/mapping-demo/web/mapping-demo-editor.min.js.map +1 -1
  27. package/example-applications/mapping-demo/web/pict.min.js +2 -2
  28. package/package.json +12 -9
  29. package/source/views/PictView-MeadowMappingEditor.js +35 -35
  30. package/source/views/flow-cards/FlowCard-SolverExpression.js +2 -2
  31. package/source/views/flow-cards/FlowCard-TemplateExpression.js +2 -2
  32. package/docs/css/docuserve.css +0 -327
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meadow-integration",
3
- "version": "1.0.39",
3
+ "version": "1.0.41",
4
4
  "description": "Meadow Data Integration",
5
5
  "retoldBeacon": {
6
6
  "displayName": "Meadow Integration",
@@ -58,9 +58,9 @@
58
58
  "author": "steven velozo <steven@velozo.com>",
59
59
  "license": "MIT",
60
60
  "devDependencies": {
61
- "meadow-connection-sqlite": "^1.0.19",
62
- "pict-docuserve": "^0.1.5",
63
- "quackage": "^1.2.2"
61
+ "meadow-connection-sqlite": "^1.0.20",
62
+ "pict-docuserve": "^1.3.2",
63
+ "quackage": "^1.2.3"
64
64
  },
65
65
  "mocha": {
66
66
  "diff": true,
@@ -81,15 +81,18 @@
81
81
  ]
82
82
  },
83
83
  "dependencies": {
84
- "fable": "^3.1.71",
84
+ "fable": "^3.1.75",
85
85
  "fable-serviceproviderbase": "^3.0.19",
86
86
  "fast-xml-parser": "^4.4.1",
87
- "meadow": "^2.0.37",
87
+ "meadow": "^2.0.41",
88
88
  "meadow-connection-mssql": "^1.0.23",
89
89
  "meadow-connection-mysql": "^1.0.19",
90
- "orator": "^6.1.1",
91
- "orator-serviceserver-restify": "^2.0.10",
92
- "pict-section-flow": "^0.0.17",
90
+ "orator": "^6.1.2",
91
+ "orator-serviceserver-restify": "^2.0.11",
92
+ "pict-provider-theme": "^1.0.1",
93
+ "pict-section-flow": "^1.0.1",
94
+ "pict-section-modal": "^1.1.1",
95
+ "pict-section-theme": "^1.0.5",
93
96
  "pict-service-commandlineutility": "^1.0.19",
94
97
  "pict-sessionmanager": "^1.0.2",
95
98
  "pict-view": "^1.0.68",
@@ -40,21 +40,21 @@ const _ViewConfiguration =
40
40
  font-weight: 600;
41
41
  text-transform: uppercase;
42
42
  letter-spacing: 0.5px;
43
- color: var(--facto-text-tertiary, #a09070);
43
+ color: var(--theme-color-text-muted, #a09070);
44
44
  padding: 0.5em 0.4em;
45
- border-bottom: 1px solid var(--facto-border, #d6c8ae);
45
+ border-bottom: 1px solid var(--theme-color-border-default, #d6c8ae);
46
46
  }
47
47
  .meadow-mapping-list-table td {
48
48
  padding: 0.35em 0.4em;
49
- border-bottom: 1px solid var(--facto-border-subtle, #e8ddc8);
49
+ border-bottom: 1px solid var(--theme-color-border-light, #e8ddc8);
50
50
  vertical-align: middle;
51
51
  }
52
52
  .meadow-flow-container {
53
53
  width: 100%;
54
54
  height: 500px;
55
- border: 1px solid var(--facto-border, #d6c8ae);
55
+ border: 1px solid var(--theme-color-border-default, #d6c8ae);
56
56
  border-radius: 6px;
57
- background: var(--facto-bg-surface, #fcf8f0);
57
+ background: var(--theme-color-background-secondary, #fcf8f0);
58
58
  margin-bottom: 0.75em;
59
59
  }
60
60
  .meadow-mapping-json-editor {
@@ -63,10 +63,10 @@ const _ViewConfiguration =
63
63
  font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
64
64
  font-size: 0.85em;
65
65
  padding: 0.75em;
66
- border: 1px solid var(--facto-border, #d6c8ae);
66
+ border: 1px solid var(--theme-color-border-default, #d6c8ae);
67
67
  border-radius: 6px;
68
- background: var(--facto-bg-input, #fcf8f0);
69
- color: var(--facto-text, #3a3020);
68
+ background: var(--theme-color-background-panel, #fcf8f0);
69
+ color: var(--theme-color-text-primary, #3a3020);
70
70
  resize: vertical;
71
71
  tab-size: 4;
72
72
  }
@@ -83,13 +83,13 @@ const _ViewConfiguration =
83
83
  font-size: 0.82em;
84
84
  cursor: pointer;
85
85
  padding: 0.3em 0.5em;
86
- border: 1px solid var(--facto-border-subtle, #e8ddc8);
86
+ border: 1px solid var(--theme-color-border-light, #e8ddc8);
87
87
  border-radius: 4px;
88
- background: var(--facto-bg-input, #fcf8f0);
88
+ background: var(--theme-color-background-panel, #fcf8f0);
89
89
  }
90
90
  .meadow-mapping-store-checklist label:has(input:checked) {
91
- border-color: var(--facto-brand, #18a5a0);
92
- background: var(--facto-brand-a12, rgba(24,165,160,0.12));
91
+ border-color: var(--theme-color-brand-primary, #18a5a0);
92
+ background: var(--theme-color-background-selected, rgba(24,165,160,0.12));
93
93
  }
94
94
  .meadow-mapping-btn {
95
95
  display: inline-flex;
@@ -105,25 +105,25 @@ const _ViewConfiguration =
105
105
  line-height: 1.4;
106
106
  }
107
107
  .meadow-mapping-btn-primary {
108
- background: var(--facto-brand, #18a5a0);
109
- color: #fff;
110
- border-color: var(--facto-brand, #18a5a0);
108
+ background: var(--theme-color-brand-primary, #18a5a0);
109
+ color: var(--theme-color-background-panel, #fff);
110
+ border-color: var(--theme-color-brand-primary, #18a5a0);
111
111
  }
112
112
  .meadow-mapping-btn-primary:hover {
113
113
  opacity: 0.88;
114
114
  }
115
115
  .meadow-mapping-btn-secondary {
116
- background: var(--facto-bg-input, #fcf8f0);
117
- color: var(--facto-text, #3a3020);
118
- border-color: var(--facto-border, #d6c8ae);
116
+ background: var(--theme-color-background-panel, #fcf8f0);
117
+ color: var(--theme-color-text-primary, #3a3020);
118
+ border-color: var(--theme-color-border-default, #d6c8ae);
119
119
  }
120
120
  .meadow-mapping-btn-secondary:hover {
121
- background: var(--facto-border-subtle, #e8ddc8);
121
+ background: var(--theme-color-border-light, #e8ddc8);
122
122
  }
123
123
  .meadow-mapping-btn-danger {
124
- background: #e74c3c;
125
- color: #fff;
126
- border-color: #e74c3c;
124
+ background: var(--theme-color-status-error, #e74c3c);
125
+ color: var(--theme-color-background-panel, #fff);
126
+ border-color: var(--theme-color-status-error, #e74c3c);
127
127
  }
128
128
  .meadow-mapping-btn-danger:hover {
129
129
  opacity: 0.88;
@@ -139,23 +139,23 @@ const _ViewConfiguration =
139
139
  .meadow-schema-mode-tab {
140
140
  padding: 0.25em 0.75em;
141
141
  font-size: 0.8em;
142
- border: 1px solid var(--facto-border, #d6c8ae);
142
+ border: 1px solid var(--theme-color-border-default, #d6c8ae);
143
143
  border-radius: 4px;
144
144
  cursor: pointer;
145
- background: var(--facto-bg-input, #fcf8f0);
146
- color: var(--facto-text, #3a3020);
145
+ background: var(--theme-color-background-panel, #fcf8f0);
146
+ color: var(--theme-color-text-primary, #3a3020);
147
147
  }
148
148
  .meadow-schema-mode-tab.active {
149
- background: var(--facto-brand, #18a5a0);
150
- color: #fff;
151
- border-color: var(--facto-brand, #18a5a0);
149
+ background: var(--theme-color-brand-primary, #18a5a0);
150
+ color: var(--theme-color-background-panel, #fff);
151
+ border-color: var(--theme-color-brand-primary, #18a5a0);
152
152
  }
153
153
  .meadow-section-title {
154
154
  font-size: 0.72em;
155
155
  font-weight: 600;
156
156
  text-transform: uppercase;
157
157
  letter-spacing: 0.5px;
158
- color: var(--facto-text-tertiary, #a09070);
158
+ color: var(--theme-color-text-muted, #a09070);
159
159
  }
160
160
  `,
161
161
 
@@ -186,12 +186,12 @@ const _ViewConfiguration =
186
186
  <div id="MeadowMap-Detail" style="display:none;">
187
187
  <div style="display:flex; gap:0.5em; align-items:center; margin-bottom:0.75em;">
188
188
  <label style="font-size:0.78em; font-weight:600;">Mapping Name</label>
189
- <input type="text" id="MeadowMap-Name" placeholder="Mapping name" style="flex:1; padding:0.3em 0.5em; font-size:0.85em; border:1px solid var(--facto-border); border-radius:4px; background:var(--facto-bg-input); color:var(--facto-text);">
189
+ <input type="text" id="MeadowMap-Name" placeholder="Mapping name" style="flex:1; padding:0.3em 0.5em; font-size:0.85em; border:1px solid var(--theme-color-border-default); border-radius:4px; background:var(--theme-color-background-panel); color:var(--theme-color-text-primary);">
190
190
  </div>
191
191
 
192
192
  <div style="display:flex; gap:0.5em; align-items:center; margin-bottom:0.75em;">
193
193
  <label style="font-size:0.78em; font-weight:600;">Source</label>
194
- <select id="MeadowMap-Source" style="flex:1; padding:0.3em 0.5em; font-size:0.85em; border:1px solid var(--facto-border); border-radius:4px;"></select>
194
+ <select id="MeadowMap-Source" style="flex:1; padding:0.3em 0.5em; font-size:0.85em; border:1px solid var(--theme-color-border-default); border-radius:4px;"></select>
195
195
  <button class="meadow-mapping-btn meadow-mapping-btn-secondary meadow-mapping-btn-small" onclick="{~P~}.views['MeadowMappingEditor'].discoverSourceFields()">Discover Fields</button>
196
196
  </div>
197
197
 
@@ -204,7 +204,7 @@ const _ViewConfiguration =
204
204
  </div>
205
205
 
206
206
  <div style="margin-top:0.75em;">
207
- <div style="font-size:0.72em; font-weight:600; text-transform:uppercase; letter-spacing:0.5px; color:var(--facto-text-tertiary); margin-bottom:0.35em;">Target Stores</div>
207
+ <div style="font-size:0.72em; font-weight:600; text-transform:uppercase; letter-spacing:0.5px; color:var(--theme-color-text-muted); margin-bottom:0.35em;">Target Stores</div>
208
208
  <div id="MeadowMap-Stores" class="meadow-mapping-store-checklist"></div>
209
209
  </div>
210
210
 
@@ -428,7 +428,7 @@ class MeadowMappingEditorView extends libPictView
428
428
 
429
429
  if (this._CurrentMappings.length === 0)
430
430
  {
431
- tmpContainer.innerHTML = '<div style="text-align:center; padding:1.5em; color:var(--facto-text-tertiary, #a09070);">No mappings yet. Create one to map source fields to target columns.</div>';
431
+ tmpContainer.innerHTML = '<div style="text-align:center; padding:1.5em; color:var(--theme-color-text-muted, #a09070);">No mappings yet. Create one to map source fields to target columns.</div>';
432
432
  return;
433
433
  }
434
434
 
@@ -725,7 +725,7 @@ class MeadowMappingEditorView extends libPictView
725
725
 
726
726
  if (this._MappingStores.length === 0)
727
727
  {
728
- tmpContainer.innerHTML = '<div style="font-size:0.82em; color:var(--facto-text-tertiary, #a09070);">No stores configured yet.</div>';
728
+ tmpContainer.innerHTML = '<div style="font-size:0.82em; color:var(--theme-color-text-muted, #a09070);">No stores configured yet.</div>';
729
729
  return;
730
730
  }
731
731
 
@@ -1035,7 +1035,7 @@ class MeadowMappingEditorView extends libPictView
1035
1035
  catch (pFlowError)
1036
1036
  {
1037
1037
  this.log.error('Failed to initialize flow view: ' + pFlowError.message);
1038
- tmpFlowContainer.innerHTML = '<div style="padding:2em; text-align:center; color:var(--facto-text-tertiary, #a09070);">Flow editor could not be loaded. Use JSON Config mode instead.</div>';
1038
+ tmpFlowContainer.innerHTML = '<div style="padding:2em; text-align:center; color:var(--theme-color-text-muted, #a09070);">Flow editor could not be loaded. Use JSON Config mode instead.</div>';
1039
1039
  }
1040
1040
  }
1041
1041
 
@@ -43,7 +43,7 @@ class FlowCardSolverExpression extends libPictFlowCard
43
43
  BodyContent:
44
44
  {
45
45
  ContentType: 'html',
46
- Template: '<div style="font-size:10px; padding:2px 4px; color:#ccc; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:200px;">{~D:Record.Data.SolverExpression~}</div>'
46
+ Template: '<div style="font-size:10px; padding:2px 4px; color:var(--theme-color-border-default, #ccc); overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:200px;">{~D:Record.Data.SolverExpression~}</div>'
47
47
  },
48
48
  PropertiesPanel:
49
49
  {
@@ -53,7 +53,7 @@ class FlowCardSolverExpression extends libPictFlowCard
53
53
  Title: 'Solver Expression',
54
54
  Configuration:
55
55
  {
56
- Template: '<div style="padding:8px;"><label style="display:block; margin-bottom:4px; font-weight:bold; font-size:12px;">Solver Expression</label><textarea id="FlowCard-SOL-{~D:Record.Hash~}" style="width:100%; height:80px; font-family:monospace; font-size:12px; resize:vertical; background:#1a1a2e; color:#e0e0e0; border:1px solid #444; border-radius:4px; padding:6px;" onchange="(function(el){var n=pict.views[\'MeadowMapping-Flow\'];if(n&&n._FlowData){for(var i=0;i<n._FlowData.Nodes.length;i++){if(n._FlowData.Nodes[i].Hash===\'{~D:Record.Hash~}\'){n._FlowData.Nodes[i].Data.SolverExpression=el.value;if(typeof n.renderFlow===\'function\')n.renderFlow();break;}}}})(this)">{~D:Record.Data.SolverExpression~}</textarea><div style="font-size:10px; color:#888; margin-top:4px;">Example: IF(IncomingRecord.Type == \'Premium\', \'GOLD\', \'SILVER\')</div></div>'
56
+ Template: '<div style="padding:8px;"><label style="display:block; margin-bottom:4px; font-weight:bold; font-size:12px;">Solver Expression</label><textarea id="FlowCard-SOL-{~D:Record.Hash~}" style="width:100%; height:80px; font-family:monospace; font-size:12px; resize:vertical; background:#1a1a2e; color:var(--theme-color-border-default, #e0e0e0); border:1px solid var(--theme-color-text-secondary, #444); border-radius:4px; padding:6px;" onchange="(function(el){var n=pict.views[\'MeadowMapping-Flow\'];if(n&&n._FlowData){for(var i=0;i<n._FlowData.Nodes.length;i++){if(n._FlowData.Nodes[i].Hash===\'{~D:Record.Hash~}\'){n._FlowData.Nodes[i].Data.SolverExpression=el.value;if(typeof n.renderFlow===\'function\')n.renderFlow();break;}}}})(this)">{~D:Record.Data.SolverExpression~}</textarea><div style="font-size:10px; color:var(--theme-color-text-muted, #888); margin-top:4px;">Example: IF(IncomingRecord.Type == \'Premium\', \'GOLD\', \'SILVER\')</div></div>'
57
57
  }
58
58
  }
59
59
  },
@@ -42,7 +42,7 @@ class FlowCardTemplateExpression extends libPictFlowCard
42
42
  BodyContent:
43
43
  {
44
44
  ContentType: 'html',
45
- Template: '<div style="font-size:10px; padding:2px 4px; color:#ccc; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:200px;">{~D:Record.Data.TemplateExpression~}</div>'
45
+ Template: '<div style="font-size:10px; padding:2px 4px; color:var(--theme-color-border-default, #ccc); overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:200px;">{~D:Record.Data.TemplateExpression~}</div>'
46
46
  },
47
47
  PropertiesPanel:
48
48
  {
@@ -52,7 +52,7 @@ class FlowCardTemplateExpression extends libPictFlowCard
52
52
  Title: 'Template Expression',
53
53
  Configuration:
54
54
  {
55
- Template: '<div style="padding:8px;"><label style="display:block; margin-bottom:4px; font-weight:bold; font-size:12px;">Template Expression</label><textarea id="FlowCard-TPL-{~D:Record.Hash~}" style="width:100%; height:80px; font-family:monospace; font-size:12px; resize:vertical; background:#1a1a2e; color:#e0e0e0; border:1px solid #444; border-radius:4px; padding:6px;" onchange="(function(el){var n=pict.views[\'MeadowMapping-Flow\'];if(n&&n._FlowData){for(var i=0;i<n._FlowData.Nodes.length;i++){if(n._FlowData.Nodes[i].Hash===\'{~D:Record.Hash~}\'){n._FlowData.Nodes[i].Data.TemplateExpression=el.value;if(typeof n.renderFlow===\'function\')n.renderFlow();break;}}}})(this)">{~D:Record.Data.TemplateExpression~}</textarea><div style="font-size:10px; color:#888; margin-top:4px;">Use {~D:Record.FieldName~} syntax. Example: {~D:Record.Name~} in {~D:Record.City~}</div></div>'
55
+ Template: '<div style="padding:8px;"><label style="display:block; margin-bottom:4px; font-weight:bold; font-size:12px;">Template Expression</label><textarea id="FlowCard-TPL-{~D:Record.Hash~}" style="width:100%; height:80px; font-family:monospace; font-size:12px; resize:vertical; background:#1a1a2e; color:var(--theme-color-border-default, #e0e0e0); border:1px solid var(--theme-color-text-secondary, #444); border-radius:4px; padding:6px;" onchange="(function(el){var n=pict.views[\'MeadowMapping-Flow\'];if(n&&n._FlowData){for(var i=0;i<n._FlowData.Nodes.length;i++){if(n._FlowData.Nodes[i].Hash===\'{~D:Record.Hash~}\'){n._FlowData.Nodes[i].Data.TemplateExpression=el.value;if(typeof n.renderFlow===\'function\')n.renderFlow();break;}}}})(this)">{~D:Record.Data.TemplateExpression~}</textarea><div style="font-size:10px; color:var(--theme-color-text-muted, #888); margin-top:4px;">Use {~D:Record.FieldName~} syntax. Example: {~D:Record.Name~} in {~D:Record.City~}</div></div>'
56
56
  }
57
57
  }
58
58
  },
@@ -1,327 +0,0 @@
1
- /* ============================================================================
2
- Pict Docuserve - Base Styles & Theme Variables
3
- ============================================================================ */
4
-
5
- /* ----------------------------------------------------------------------------
6
- Theme variables — light defaults on :root.
7
- Dark mode applies when either:
8
- (a) the user explicitly selected dark via <html data-theme="dark">
9
- (b) the user hasn't chosen anything AND the system prefers dark
10
- An explicit <html data-theme="light"> pins the light palette regardless.
11
- ---------------------------------------------------------------------------- */
12
-
13
- :root
14
- {
15
- /* Surfaces */
16
- --docuserve-bg: #FDFBF7;
17
- --docuserve-bg-elevated: #FFFFFF;
18
- --docuserve-border: #DDD6CA;
19
- --docuserve-border-soft: #EAE3D8;
20
-
21
- /* Text */
22
- --docuserve-text: #2A241E;
23
- --docuserve-text-strong: #3D3229;
24
- --docuserve-text-muted: #5E5549;
25
- --docuserve-text-dim: #8A7F72;
26
-
27
- /* Accent / links */
28
- --docuserve-accent: #2E7D74;
29
- --docuserve-accent-hover: #236660;
30
-
31
- /* Top bar */
32
- --docuserve-topbar-bg: #3D3229;
33
- --docuserve-topbar-text: #E8E0D4;
34
- --docuserve-topbar-text-muted: #B5AA9A;
35
- --docuserve-topbar-text-dim: #8A7F72;
36
- --docuserve-topbar-hover-bg: #524438;
37
- --docuserve-topbar-version-bg: rgba(255, 255, 255, 0.06);
38
- --docuserve-topbar-version-border: rgba(255, 255, 255, 0.08);
39
- --docuserve-topbar-version-text: #B5AA9A;
40
-
41
- /* Sidebar */
42
- --docuserve-sidebar-bg: #FAF7F1;
43
- --docuserve-sidebar-border: #DDD6CA;
44
- --docuserve-sidebar-border-soft: #E5DED1;
45
- --docuserve-sidebar-text: #423D37;
46
- --docuserve-sidebar-group-title: #3D3229;
47
- --docuserve-sidebar-module-text: #5E5549;
48
- --docuserve-sidebar-hover-bg: #EAE3D8;
49
- --docuserve-sidebar-hover-text: #2E7D74;
50
- --docuserve-sidebar-active-bg: #E5DED1;
51
- --docuserve-sidebar-active-text: #2E7D74;
52
- --docuserve-sidebar-search-bg: #FFFFFF;
53
- --docuserve-sidebar-search-border: #DDD6CA;
54
-
55
- /* Inline code */
56
- --docuserve-inline-code-bg: #F0ECE4;
57
- --docuserve-inline-code-text: #9E3A50;
58
-
59
- /* Code block panel */
60
- --docuserve-code-bg: #F6F3EE;
61
- --docuserve-code-border: #E5DED1;
62
- --docuserve-code-gutter-bg: #EFEAE0;
63
- --docuserve-code-gutter-border: #DDD6CA;
64
- --docuserve-code-gutter-text: #A59986;
65
- --docuserve-code-text: #2A241E;
66
-
67
- /* Syntax tokens — low-chroma dark-on-light palette */
68
- --docuserve-tok-keyword: #A03472;
69
- --docuserve-tok-string: #1A6640;
70
- --docuserve-tok-number: #B25A00;
71
- --docuserve-tok-comment: #8A7F72;
72
- --docuserve-tok-operator: #2E7D74;
73
- --docuserve-tok-punctuation: #2A241E;
74
- --docuserve-tok-function: #2A5DB0;
75
- --docuserve-tok-property: #9E3A50;
76
- --docuserve-tok-tag: #9E3A50;
77
- --docuserve-tok-attr-name: #B25A00;
78
- --docuserve-tok-attr-value: #1A6640;
79
-
80
- /* Tables, blockquotes, mermaid */
81
- --docuserve-table-header-bg: #F5F0E8;
82
- --docuserve-table-row-alt-bg: #F9F6F0;
83
- --docuserve-blockquote-bg: #F7F5F0;
84
- --docuserve-blockquote-border: #2E7D74;
85
- --docuserve-blockquote-text: #5E5549;
86
- --docuserve-mermaid-bg: #FFFFFF;
87
-
88
- /* Scrollbars */
89
- --docuserve-scrollbar-track: #F5F0E8;
90
- --docuserve-scrollbar-thumb: #D4CCBE;
91
- --docuserve-scrollbar-thumb-hover: #B5AA9A;
92
- }
93
-
94
- @media (prefers-color-scheme: dark)
95
- {
96
- :root:not([data-theme="light"])
97
- {
98
- --docuserve-bg: #15120F;
99
- --docuserve-bg-elevated: #1B1814;
100
- --docuserve-border: #2F2823;
101
- --docuserve-border-soft: #26211C;
102
-
103
- --docuserve-text: #E8E0D4;
104
- --docuserve-text-strong: #F2ECE0;
105
- --docuserve-text-muted: #B5AA9A;
106
- --docuserve-text-dim: #7A6F62;
107
-
108
- --docuserve-accent: #5DB8A8;
109
- --docuserve-accent-hover: #7FCCB8;
110
-
111
- --docuserve-topbar-bg: #1A1612;
112
- --docuserve-topbar-text: #E8E0D4;
113
- --docuserve-topbar-text-muted: #B5AA9A;
114
- --docuserve-topbar-text-dim: #7A6F62;
115
- --docuserve-topbar-hover-bg: #2A241E;
116
- --docuserve-topbar-version-bg: rgba(255, 255, 255, 0.05);
117
- --docuserve-topbar-version-border: rgba(255, 255, 255, 0.09);
118
- --docuserve-topbar-version-text: #B5AA9A;
119
-
120
- --docuserve-sidebar-bg: #1B1814;
121
- --docuserve-sidebar-border: #2F2823;
122
- --docuserve-sidebar-border-soft: #26211C;
123
- --docuserve-sidebar-text: #C9C0B3;
124
- --docuserve-sidebar-group-title: #F2ECE0;
125
- --docuserve-sidebar-module-text: #B5AA9A;
126
- --docuserve-sidebar-hover-bg: #2A241E;
127
- --docuserve-sidebar-hover-text: #7FCCB8;
128
- --docuserve-sidebar-active-bg: #2F2823;
129
- --docuserve-sidebar-active-text: #7FCCB8;
130
- --docuserve-sidebar-search-bg: #26211C;
131
- --docuserve-sidebar-search-border: #2F2823;
132
-
133
- --docuserve-inline-code-bg: #2A241E;
134
- --docuserve-inline-code-text: #E8B07A;
135
-
136
- --docuserve-code-bg: #1E1A17;
137
- --docuserve-code-border: #2F2823;
138
- --docuserve-code-gutter-bg: #17130F;
139
- --docuserve-code-gutter-border: #2F2823;
140
- --docuserve-code-gutter-text: #6A6052;
141
- --docuserve-code-text: #E8E0D4;
142
-
143
- --docuserve-tok-keyword: #C678DD;
144
- --docuserve-tok-string: #98C379;
145
- --docuserve-tok-number: #D19A66;
146
- --docuserve-tok-comment: #7F848E;
147
- --docuserve-tok-operator: #56B6C2;
148
- --docuserve-tok-punctuation: #E8E0D4;
149
- --docuserve-tok-function: #61AFEF;
150
- --docuserve-tok-property: #E06C75;
151
- --docuserve-tok-tag: #E06C75;
152
- --docuserve-tok-attr-name: #D19A66;
153
- --docuserve-tok-attr-value: #98C379;
154
-
155
- --docuserve-table-header-bg: #26211C;
156
- --docuserve-table-row-alt-bg: #1F1B17;
157
- --docuserve-blockquote-bg: #1F1B17;
158
- --docuserve-blockquote-border: #5DB8A8;
159
- --docuserve-blockquote-text: #C9C0B3;
160
- --docuserve-mermaid-bg: #E8E0D4;
161
-
162
- --docuserve-scrollbar-track: #1B1814;
163
- --docuserve-scrollbar-thumb: #3A322B;
164
- --docuserve-scrollbar-thumb-hover: #524438;
165
- }
166
- }
167
-
168
- :root[data-theme="dark"]
169
- {
170
- --docuserve-bg: #15120F;
171
- --docuserve-bg-elevated: #1B1814;
172
- --docuserve-border: #2F2823;
173
- --docuserve-border-soft: #26211C;
174
-
175
- --docuserve-text: #E8E0D4;
176
- --docuserve-text-strong: #F2ECE0;
177
- --docuserve-text-muted: #B5AA9A;
178
- --docuserve-text-dim: #7A6F62;
179
-
180
- --docuserve-accent: #5DB8A8;
181
- --docuserve-accent-hover: #7FCCB8;
182
-
183
- --docuserve-topbar-bg: #1A1612;
184
- --docuserve-topbar-text: #E8E0D4;
185
- --docuserve-topbar-text-muted: #B5AA9A;
186
- --docuserve-topbar-text-dim: #7A6F62;
187
- --docuserve-topbar-hover-bg: #2A241E;
188
- --docuserve-topbar-version-bg: rgba(255, 255, 255, 0.05);
189
- --docuserve-topbar-version-border: rgba(255, 255, 255, 0.09);
190
- --docuserve-topbar-version-text: #B5AA9A;
191
-
192
- --docuserve-sidebar-bg: #1B1814;
193
- --docuserve-sidebar-border: #2F2823;
194
- --docuserve-sidebar-border-soft: #26211C;
195
- --docuserve-sidebar-text: #C9C0B3;
196
- --docuserve-sidebar-group-title: #F2ECE0;
197
- --docuserve-sidebar-module-text: #B5AA9A;
198
- --docuserve-sidebar-hover-bg: #2A241E;
199
- --docuserve-sidebar-hover-text: #7FCCB8;
200
- --docuserve-sidebar-active-bg: #2F2823;
201
- --docuserve-sidebar-active-text: #7FCCB8;
202
- --docuserve-sidebar-search-bg: #26211C;
203
- --docuserve-sidebar-search-border: #2F2823;
204
-
205
- --docuserve-inline-code-bg: #2A241E;
206
- --docuserve-inline-code-text: #E8B07A;
207
-
208
- --docuserve-code-bg: #1E1A17;
209
- --docuserve-code-border: #2F2823;
210
- --docuserve-code-gutter-bg: #17130F;
211
- --docuserve-code-gutter-border: #2F2823;
212
- --docuserve-code-gutter-text: #6A6052;
213
- --docuserve-code-text: #E8E0D4;
214
-
215
- --docuserve-tok-keyword: #C678DD;
216
- --docuserve-tok-string: #98C379;
217
- --docuserve-tok-number: #D19A66;
218
- --docuserve-tok-comment: #7F848E;
219
- --docuserve-tok-operator: #56B6C2;
220
- --docuserve-tok-punctuation: #E8E0D4;
221
- --docuserve-tok-function: #61AFEF;
222
- --docuserve-tok-property: #E06C75;
223
- --docuserve-tok-tag: #E06C75;
224
- --docuserve-tok-attr-name: #D19A66;
225
- --docuserve-tok-attr-value: #98C379;
226
-
227
- --docuserve-table-header-bg: #26211C;
228
- --docuserve-table-row-alt-bg: #1F1B17;
229
- --docuserve-blockquote-bg: #1F1B17;
230
- --docuserve-blockquote-border: #5DB8A8;
231
- --docuserve-blockquote-text: #C9C0B3;
232
- --docuserve-mermaid-bg: #E8E0D4;
233
-
234
- --docuserve-scrollbar-track: #1B1814;
235
- --docuserve-scrollbar-thumb: #3A322B;
236
- --docuserve-scrollbar-thumb-hover: #524438;
237
- }
238
-
239
- /* ----------------------------------------------------------------------------
240
- Reset and base
241
- ---------------------------------------------------------------------------- */
242
-
243
- *, *::before, *::after
244
- {
245
- box-sizing: border-box;
246
- }
247
-
248
- html, body
249
- {
250
- margin: 0;
251
- padding: 0;
252
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
253
- font-size: 16px;
254
- line-height: 1.5;
255
- color: var(--docuserve-text);
256
- background-color: var(--docuserve-bg);
257
- -webkit-font-smoothing: antialiased;
258
- -moz-osx-font-smoothing: grayscale;
259
- transition: background-color 0.15s ease, color 0.15s ease;
260
- }
261
-
262
- /* Typography */
263
- h1, h2, h3, h4, h5, h6
264
- {
265
- margin-top: 0;
266
- line-height: 1.3;
267
- color: var(--docuserve-text-strong);
268
- }
269
-
270
- a
271
- {
272
- color: var(--docuserve-accent);
273
- text-decoration: none;
274
- }
275
-
276
- a:hover
277
- {
278
- color: var(--docuserve-accent-hover);
279
- }
280
-
281
- /* Application container */
282
- #Docuserve-Application-Container
283
- {
284
- min-height: 100vh;
285
- }
286
-
287
- /* Utility: scrollbar styling */
288
- ::-webkit-scrollbar
289
- {
290
- width: 8px;
291
- height: 8px;
292
- }
293
-
294
- ::-webkit-scrollbar-track
295
- {
296
- background: var(--docuserve-scrollbar-track);
297
- }
298
-
299
- ::-webkit-scrollbar-thumb
300
- {
301
- background: var(--docuserve-scrollbar-thumb);
302
- border-radius: 4px;
303
- }
304
-
305
- ::-webkit-scrollbar-thumb:hover
306
- {
307
- background: var(--docuserve-scrollbar-thumb-hover);
308
- }
309
-
310
- /* Responsive adjustments */
311
- @media (max-width: 768px)
312
- {
313
- html
314
- {
315
- font-size: 14px;
316
- }
317
-
318
- #Docuserve-Sidebar-Container
319
- {
320
- display: none;
321
- }
322
-
323
- .docuserve-body
324
- {
325
- flex-direction: column;
326
- }
327
- }