pict-section-flow 0.0.17 → 0.0.19

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 (90) hide show
  1. package/README.md +18 -18
  2. package/docs/Architecture.md +1 -1
  3. package/docs/Data_Model.md +2 -2
  4. package/docs/Getting_Started.md +5 -5
  5. package/docs/Implementation_Reference.md +6 -6
  6. package/docs/Layout_Persistence.md +3 -3
  7. package/docs/README.md +12 -12
  8. package/docs/Theme_Integration.md +150 -0
  9. package/docs/_cover.md +1 -1
  10. package/docs/_sidebar.md +7 -6
  11. package/docs/_version.json +7 -0
  12. package/docs/api/PictFlowCard.md +6 -6
  13. package/docs/api/PictFlowCardPropertiesPanel.md +2 -2
  14. package/docs/api/addConnection.md +4 -4
  15. package/docs/api/addNode.md +6 -6
  16. package/docs/api/autoLayout.md +2 -2
  17. package/docs/api/getFlowData.md +5 -5
  18. package/docs/api/marshalToView.md +3 -3
  19. package/docs/api/openPanel.md +2 -2
  20. package/docs/api/registerHandler.md +3 -3
  21. package/docs/api/registerNodeType.md +3 -3
  22. package/docs/api/removeConnection.md +5 -5
  23. package/docs/api/removeNode.md +6 -6
  24. package/docs/api/saveLayout.md +2 -2
  25. package/docs/api/screenToSVGCoords.md +2 -2
  26. package/docs/api/selectNode.md +3 -3
  27. package/docs/api/setTheme.md +2 -2
  28. package/docs/api/setZoom.md +3 -3
  29. package/docs/api/toggleFullscreen.md +2 -2
  30. package/docs/card-help/EACH.md +3 -3
  31. package/docs/card-help/FREAD.md +5 -5
  32. package/docs/card-help/FWRITE.md +5 -5
  33. package/docs/card-help/GET.md +2 -2
  34. package/docs/card-help/ITE.md +3 -3
  35. package/docs/card-help/LOG.md +4 -4
  36. package/docs/card-help/NOTE.md +1 -1
  37. package/docs/card-help/PREV.md +2 -2
  38. package/docs/card-help/SET.md +5 -5
  39. package/docs/card-help/SPKL.md +2 -2
  40. package/docs/card-help/STAT.md +3 -3
  41. package/docs/card-help/SW.md +4 -4
  42. package/docs/css/docuserve.css +277 -23
  43. package/docs/index.html +2 -2
  44. package/docs/retold-catalog.json +1 -1
  45. package/docs/retold-keyword-index.json +1 -1
  46. package/example_applications/simple_cards/css/flowexample.css +2 -2
  47. package/example_applications/simple_cards/source/card-help-content.js +12 -12
  48. package/example_applications/simple_cards/source/cards/FlowCard-DataPreview.js +1 -1
  49. package/example_applications/simple_cards/source/sample-flows.js +410 -0
  50. package/example_applications/simple_cards/source/views/PictView-FlowExample-About.js +5 -5
  51. package/example_applications/simple_cards/source/views/PictView-FlowExample-Documentation.js +5 -5
  52. package/example_applications/simple_cards/source/views/PictView-FlowExample-FileWriteInfo.js +4 -4
  53. package/example_applications/simple_cards/source/views/PictView-FlowExample-MainWorkspace.js +141 -8
  54. package/example_applications/simple_cards/source/views/PictView-FlowExample-TopBar.js +2 -2
  55. package/package.json +8 -7
  56. package/source/Pict-Section-Flow.js +26 -0
  57. package/source/providers/PictProvider-Flow-CSS.js +435 -61
  58. package/source/providers/PictProvider-Flow-ConnectorShapes.js +9 -5
  59. package/source/providers/PictProvider-Flow-NodeTypes.js +10 -0
  60. package/source/providers/PictProvider-Flow-PanelChrome.js +7 -17
  61. package/source/providers/PictProvider-Flow-Theme.js +7 -7
  62. package/source/providers/edges/Edge-Bezier.js +41 -0
  63. package/source/providers/edges/Edge-Orthogonal.js +37 -0
  64. package/source/providers/edges/Edge-OrthogonalSnap.js +72 -0
  65. package/source/providers/edges/Edge-Perimeter-Linear.js +31 -0
  66. package/source/providers/edges/Edge-Perimeter-Orthogonal.js +39 -0
  67. package/source/providers/edges/Edge-Perimeter.js +48 -0
  68. package/source/providers/edges/Edge-PerimeterMath.js +92 -0
  69. package/source/providers/edges/Edge-Straight.js +24 -0
  70. package/source/providers/layouts/Layout-Circular.js +203 -0
  71. package/source/providers/layouts/Layout-Coerce.js +40 -0
  72. package/source/providers/layouts/Layout-Columnar.js +134 -0
  73. package/source/providers/layouts/Layout-Custom.js +27 -0
  74. package/source/providers/layouts/Layout-ForcedFromCenter.js +256 -0
  75. package/source/providers/layouts/Layout-Grid.js +134 -0
  76. package/source/providers/layouts/Layout-Layered.js +209 -0
  77. package/source/providers/layouts/Layout-Tabular.js +94 -0
  78. package/source/services/PictService-Flow-ConnectionRenderer.js +532 -28
  79. package/source/services/PictService-Flow-DataManager.js +12 -1
  80. package/source/services/PictService-Flow-InteractionManager.js +39 -42
  81. package/source/services/PictService-Flow-Layout.js +305 -121
  82. package/source/services/PictService-Flow-PortRenderer.js +108 -26
  83. package/source/services/PictService-Flow-RenderManager.js +41 -11
  84. package/source/views/PictView-Flow-FloatingToolbar.js +69 -61
  85. package/source/views/PictView-Flow-Node.js +47 -6
  86. package/source/views/PictView-Flow-PropertiesPanel.js +46 -53
  87. package/source/views/PictView-Flow-Toolbar.js +1065 -485
  88. package/source/views/PictView-Flow.js +455 -7
  89. package/test/Layout_tests.js +1400 -0
  90. package/test/PortRenderer_tests.js +11 -2
@@ -16,12 +16,12 @@ flowView.removeConnection(pConnectionHash)
16
16
 
17
17
  ## Returns
18
18
 
19
- `boolean` `true` if the connection was found and removed, `false` otherwise.
19
+ `boolean` -- `true` if the connection was found and removed, `false` otherwise.
20
20
 
21
21
  ## Events Fired
22
22
 
23
- - `onConnectionRemoved` with the removed connection object
24
- - `onFlowChanged` with the updated flow data
23
+ - `onConnectionRemoved` -- with the removed connection object
24
+ - `onFlowChanged` -- with the updated flow data
25
25
 
26
26
  ## Examples
27
27
 
@@ -53,5 +53,5 @@ tmpFlowData.Connections.forEach((pConn) =>
53
53
 
54
54
  ## See Also
55
55
 
56
- - [addConnection](addConnection.md) Create a connection
57
- - [removeNode](removeNode.md) Remove a node (cascades connections)
56
+ - [addConnection](addConnection.md) -- Create a connection
57
+ - [removeNode](removeNode.md) -- Remove a node (cascades connections)
@@ -16,13 +16,13 @@ flowView.removeNode(pNodeHash)
16
16
 
17
17
  ## Returns
18
18
 
19
- `boolean` `true` if the node was found and removed, `false` otherwise.
19
+ `boolean` -- `true` if the node was found and removed, `false` otherwise.
20
20
 
21
21
  ## Events Fired
22
22
 
23
- - `onNodeRemoved` with the removed node object
24
- - `onConnectionRemoved` for each connection that was cascaded
25
- - `onFlowChanged` with the updated flow data
23
+ - `onNodeRemoved` -- with the removed node object
24
+ - `onConnectionRemoved` -- for each connection that was cascaded
25
+ - `onFlowChanged` -- with the updated flow data
26
26
 
27
27
  ## Examples
28
28
 
@@ -76,5 +76,5 @@ tmpFlowData.Nodes.forEach((pNode) =>
76
76
 
77
77
  ## See Also
78
78
 
79
- - [addNode](addNode.md) Create a node
80
- - [deleteSelected](selectNode.md) Delete the currently selected element
79
+ - [addNode](addNode.md) -- Create a node
80
+ - [deleteSelected](selectNode.md) -- Delete the currently selected element
@@ -148,5 +148,5 @@ tmpLayoutProvider.loadPersistedLayouts();
148
148
 
149
149
  ## See Also
150
150
 
151
- - [Layout Persistence](../Layout_Persistence.md) Detailed guide on storage backends
152
- - [autoLayout](autoLayout.md) Automatic topological layout
151
+ - [Layout Persistence](../Layout_Persistence.md) -- Detailed guide on storage backends
152
+ - [autoLayout](autoLayout.md) -- Automatic topological layout
@@ -64,5 +64,5 @@ document.getElementById('flow-container').addEventListener('mousemove', (pEvent)
64
64
 
65
65
  ## See Also
66
66
 
67
- - [setZoom](setZoom.md) Viewport zoom (affects coordinate mapping)
68
- - [addNode](addNode.md) Create nodes at specific coordinates
67
+ - [setZoom](setZoom.md) -- Viewport zoom (affects coordinate mapping)
68
+ - [addNode](addNode.md) -- Create nodes at specific coordinates
@@ -50,7 +50,7 @@ Clear all selection state (node, connection, and tether).
50
50
 
51
51
  Delete the currently selected node or connection. If a node is selected, its connections are also removed.
52
52
 
53
- **Returns:** `boolean` `true` if something was deleted.
53
+ **Returns:** `boolean` -- `true` if something was deleted.
54
54
 
55
55
  ## Examples
56
56
 
@@ -112,5 +112,5 @@ function handleDelete()
112
112
 
113
113
  ## See Also
114
114
 
115
- - [addNode](addNode.md) / [removeNode](removeNode.md) Node CRUD
116
- - [registerHandler](registerHandler.md) Event hooks
115
+ - [addNode](addNode.md) / [removeNode](removeNode.md) -- Node CRUD
116
+ - [registerHandler](registerHandler.md) -- Event hooks
@@ -164,5 +164,5 @@ flowView._ThemeProvider.registerTheme('corporate',
164
164
 
165
165
  ## See Also
166
166
 
167
- - [Custom Styling](../Custom-Styling.md) Full CSS custom properties reference
168
- - [registerHandler](registerHandler.md) Listen for `onThemeChanged` events
167
+ - [Custom Styling](../Custom-Styling.md) -- Full CSS custom properties reference
168
+ - [registerHandler](registerHandler.md) -- Listen for `onThemeChanged` events
@@ -92,6 +92,6 @@ Zoom bounds are set in the view configuration:
92
92
 
93
93
  ## See Also
94
94
 
95
- - [screenToSVGCoords](screenToSVGCoords.md) Coordinate conversion
96
- - [toggleFullscreen](toggleFullscreen.md) Fullscreen mode
97
- - [autoLayout](autoLayout.md) Automatic node arrangement
95
+ - [screenToSVGCoords](screenToSVGCoords.md) -- Coordinate conversion
96
+ - [toggleFullscreen](toggleFullscreen.md) -- Fullscreen mode
97
+ - [autoLayout](autoLayout.md) -- Automatic node arrangement
@@ -13,7 +13,7 @@ flowView.exitFullscreen();
13
13
 
14
14
  Toggles between normal and fullscreen modes.
15
15
 
16
- **Returns:** `boolean` the new fullscreen state (`true` if now fullscreen).
16
+ **Returns:** `boolean` -- the new fullscreen state (`true` if now fullscreen).
17
17
 
18
18
  ## exitFullscreen
19
19
 
@@ -65,4 +65,4 @@ setTimeout(() =>
65
65
 
66
66
  ## See Also
67
67
 
68
- - [setZoom / zoomToFit](setZoom.md) Viewport controls
68
+ - [setZoom / zoomToFit](setZoom.md) -- Viewport controls
@@ -4,9 +4,9 @@ The **Each** node iterates over a collection, executing connected downstream nod
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Collection** (input) an array or iterable to loop over
8
- - **Item** (output) fires once per element with the current item
9
- - **Done** (output) fires after all items have been processed
7
+ - **Collection** (input) -- an array or iterable to loop over
8
+ - **Item** (output) -- fires once per element with the current item
9
+ - **Done** (output) -- fires after all items have been processed
10
10
 
11
11
  ## Behavior
12
12
 
@@ -4,14 +4,14 @@ The **File Read** node reads the contents of a file from the filesystem and outp
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Path** (input) the filesystem path to read
8
- - **Data** (output) the file contents on success
9
- - **Error** (output) fires if the read operation fails
7
+ - **Path** (input) -- the filesystem path to read
8
+ - **Data** (output) -- the file contents on success
9
+ - **Error** (output) -- fires if the read operation fails
10
10
 
11
11
  ## Properties
12
12
 
13
- - **FilePath** the path to the file to read
14
- - **Encoding** character encoding for text files (e.g. `utf8`, `ascii`)
13
+ - **FilePath** -- the path to the file to read
14
+ - **Encoding** -- character encoding for text files (e.g. `utf8`, `ascii`)
15
15
 
16
16
  ## Behavior
17
17
 
@@ -4,10 +4,10 @@ The **File Write** node writes data to a file on the filesystem.
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Path** (input) the destination filesystem path
8
- - **Data** (input) the content to write
9
- - **Done** (output) fires after a successful write
10
- - **Error** (output) fires if the write operation fails
7
+ - **Path** (input) -- the destination filesystem path
8
+ - **Data** (input) -- the content to write
9
+ - **Done** (output) -- fires after a successful write
10
+ - **Error** (output) -- fires if the write operation fails
11
11
 
12
12
  ## Behavior
13
13
 
@@ -19,6 +19,6 @@ The properties panel shows a View-based info panel with details about the config
19
19
 
20
20
  ## Tips
21
21
 
22
- - Directories in the path are not created automatically ensure they exist before writing
22
+ - Directories in the path are not created automatically -- ensure they exist before writing
23
23
  - Combine with a Set Value node to format data before writing
24
24
  - Connect the **Error** output to a Log Values node to capture write failures
@@ -4,8 +4,8 @@ The **Get Value** node retrieves a named variable from the flow context and emit
4
4
 
5
5
  ## Ports
6
6
 
7
- - **In** (input) trigger to read the value
8
- - **Value** (output) the retrieved value
7
+ - **In** (input) -- trigger to read the value
8
+ - **Value** (output) -- the retrieved value
9
9
 
10
10
  ## Behavior
11
11
 
@@ -4,9 +4,9 @@ The **If-Then-Else** node evaluates a boolean condition expression and routes th
4
4
 
5
5
  ## Ports
6
6
 
7
- - **In** (input) trigger that starts the evaluation
8
- - **Then** (output) activated when the condition is **true**
9
- - **Else** (output) activated when the condition is **false**
7
+ - **In** (input) -- trigger that starts the evaluation
8
+ - **Then** (output) -- activated when the condition is **true**
9
+ - **Else** (output) -- activated when the condition is **false**
10
10
 
11
11
  ## Behavior
12
12
 
@@ -4,13 +4,13 @@ The **Log Values** node writes incoming data to the console or log output for de
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Values** (input, multi) accepts one or more connections carrying values to log
8
- - **Pass** (output) passes the last received value through unchanged
7
+ - **Values** (input, multi) -- accepts one or more connections carrying values to log
8
+ - **Pass** (output) -- passes the last received value through unchanged
9
9
 
10
10
  ## Properties
11
11
 
12
- - **LogLevel** the severity level for the log entry (e.g. `info`, `warn`, `error`, `trace`)
13
- - **Format** an optional format string controlling how values are serialized
12
+ - **LogLevel** -- the severity level for the log entry (e.g. `info`, `warn`, `error`, `trace`)
13
+ - **Format** -- an optional format string controlling how values are serialized
14
14
 
15
15
  ## Behavior
16
16
 
@@ -8,7 +8,7 @@ Drop a Comment node anywhere on the canvas to add context, explain design decisi
8
8
 
9
9
  ## Properties
10
10
 
11
- - **NoteText** the annotation content displayed in the node body
11
+ - **NoteText** -- the annotation content displayed in the node body
12
12
 
13
13
  ## Tips
14
14
 
@@ -4,8 +4,8 @@ The **Data Preview** node displays a tabular summary of the data flowing through
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Data** (input) the data object to inspect
8
- - **Pass** (output) passes the data through unchanged
7
+ - **Data** (input) -- the data object to inspect
8
+ - **Pass** (output) -- passes the data through unchanged
9
9
 
10
10
  ## Behavior
11
11
 
@@ -4,13 +4,13 @@ The **Set Value** node assigns a value to a named variable in the flow context.
4
4
 
5
5
  ## Ports
6
6
 
7
- - **In** (input) trigger to perform the assignment
8
- - **Out** (output) fires after the value has been set
7
+ - **In** (input) -- trigger to perform the assignment
8
+ - **Out** (output) -- fires after the value has been set
9
9
 
10
10
  ## Properties
11
11
 
12
- - **Variable Name** the key under which the value will be stored
13
- - **Value Expression** the expression to evaluate and assign
12
+ - **Variable Name** -- the key under which the value will be stored
13
+ - **Value Expression** -- the expression to evaluate and assign
14
14
 
15
15
  ## Behavior
16
16
 
@@ -22,6 +22,6 @@ Open the properties panel to configure the variable name and value expression us
22
22
 
23
23
  ## Tips
24
24
 
25
- - Variable names are case-sensitive use consistent naming conventions
25
+ - Variable names are case-sensitive -- use consistent naming conventions
26
26
  - Value expressions have access to the current flow context
27
27
  - Use Set Value at the beginning of a flow to initialize default variables
@@ -4,8 +4,8 @@ The **Sparkline** node renders a live sparkline chart visualizing numeric throug
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Values** (input) a numeric array or stream of values to plot
8
- - **Stats** (output) emits computed statistics (min, max, mean) for the data set
7
+ - **Values** (input) -- a numeric array or stream of values to plot
8
+ - **Stats** (output) -- emits computed statistics (min, max, mean) for the data set
9
9
 
10
10
  ## Behavior
11
11
 
@@ -4,9 +4,9 @@ The **Status Monitor** node monitors the health status of upstream services and
4
4
 
5
5
  ## Ports
6
6
 
7
- - **Check** (input, multi) accepts connections from one or more services to monitor
8
- - **Healthy** (output) fires when all monitored services report healthy
9
- - **Degraded** (output) fires when one or more services report degraded status
7
+ - **Check** (input, multi) -- accepts connections from one or more services to monitor
8
+ - **Healthy** (output) -- fires when all monitored services report healthy
9
+ - **Degraded** (output) -- fires when one or more services report degraded status
10
10
 
11
11
  ## Behavior
12
12
 
@@ -4,10 +4,10 @@ The **Switch** node routes execution to one of multiple outputs based on a match
4
4
 
5
5
  ## Ports
6
6
 
7
- - **In** (input) the value to match against cases
8
- - **Case A** (output) fires when the input matches case A
9
- - **Case B** (output) fires when the input matches case B
10
- - **Default** (output) fires when the input does not match any defined case
7
+ - **In** (input) -- the value to match against cases
8
+ - **Case A** (output) -- fires when the input matches case A
9
+ - **Case B** (output) -- fires when the input matches case B
10
+ - **Default** (output) -- fires when the input does not match any defined case
11
11
 
12
12
  ## Behavior
13
13
 
@@ -1,73 +1,327 @@
1
1
  /* ============================================================================
2
- Pict Docuserve - Base Styles
2
+ Pict Docuserve - Base Styles & Theme Variables
3
3
  ============================================================================ */
4
4
 
5
- /* Reset and base */
6
- *, *::before, *::after {
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
+ {
7
245
  box-sizing: border-box;
8
246
  }
9
247
 
10
- html, body {
248
+ html, body
249
+ {
11
250
  margin: 0;
12
251
  padding: 0;
13
252
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
14
253
  font-size: 16px;
15
254
  line-height: 1.5;
16
- color: #423D37;
17
- background-color: #fff;
255
+ color: var(--docuserve-text);
256
+ background-color: var(--docuserve-bg);
18
257
  -webkit-font-smoothing: antialiased;
19
258
  -moz-osx-font-smoothing: grayscale;
259
+ transition: background-color 0.15s ease, color 0.15s ease;
20
260
  }
21
261
 
22
262
  /* Typography */
23
- h1, h2, h3, h4, h5, h6 {
263
+ h1, h2, h3, h4, h5, h6
264
+ {
24
265
  margin-top: 0;
25
266
  line-height: 1.3;
267
+ color: var(--docuserve-text-strong);
26
268
  }
27
269
 
28
- a {
29
- color: #2E7D74;
270
+ a
271
+ {
272
+ color: var(--docuserve-accent);
30
273
  text-decoration: none;
31
274
  }
32
275
 
33
- a:hover {
34
- color: #256861;
276
+ a:hover
277
+ {
278
+ color: var(--docuserve-accent-hover);
35
279
  }
36
280
 
37
281
  /* Application container */
38
- #Docuserve-Application-Container {
282
+ #Docuserve-Application-Container
283
+ {
39
284
  min-height: 100vh;
40
285
  }
41
286
 
42
287
  /* Utility: scrollbar styling */
43
- ::-webkit-scrollbar {
288
+ ::-webkit-scrollbar
289
+ {
44
290
  width: 8px;
291
+ height: 8px;
45
292
  }
46
293
 
47
- ::-webkit-scrollbar-track {
48
- background: #F5F0E8;
294
+ ::-webkit-scrollbar-track
295
+ {
296
+ background: var(--docuserve-scrollbar-track);
49
297
  }
50
298
 
51
- ::-webkit-scrollbar-thumb {
52
- background: #D4CCBE;
299
+ ::-webkit-scrollbar-thumb
300
+ {
301
+ background: var(--docuserve-scrollbar-thumb);
53
302
  border-radius: 4px;
54
303
  }
55
304
 
56
- ::-webkit-scrollbar-thumb:hover {
57
- background: #B5AA9A;
305
+ ::-webkit-scrollbar-thumb:hover
306
+ {
307
+ background: var(--docuserve-scrollbar-thumb-hover);
58
308
  }
59
309
 
60
310
  /* Responsive adjustments */
61
- @media (max-width: 768px) {
62
- html {
311
+ @media (max-width: 768px)
312
+ {
313
+ html
314
+ {
63
315
  font-size: 14px;
64
316
  }
65
317
 
66
- #Docuserve-Sidebar-Container {
318
+ #Docuserve-Sidebar-Container
319
+ {
67
320
  display: none;
68
321
  }
69
322
 
70
- .docuserve-body {
323
+ .docuserve-body
324
+ {
71
325
  flex-direction: column;
72
326
  }
73
327
  }