@stephen-netu/design-system 0.2.0 → 0.2.2

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 (198) hide show
  1. package/dist/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte +10 -2
  2. package/dist/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte.d.ts.map +1 -1
  3. package/dist/b0-app-shell/{command-bar/CommandBar.svelte → global-command-bar/GlobalCommandBar.svelte} +75 -75
  4. package/dist/b0-app-shell/{command-bar/CommandBar.svelte.d.ts → global-command-bar/GlobalCommandBar.svelte.d.ts} +6 -6
  5. package/dist/b0-app-shell/global-command-bar/GlobalCommandBar.svelte.d.ts.map +1 -0
  6. package/dist/b0-app-shell/index.d.ts +1 -1
  7. package/dist/b0-app-shell/index.d.ts.map +1 -1
  8. package/dist/b0-app-shell/index.js +1 -1
  9. package/dist/d0-data-viz/CheckpointPill.svelte +7 -2
  10. package/dist/d0-data-viz/CheckpointPill.svelte.d.ts.map +1 -1
  11. package/dist/d0-data-viz/theme-integration.d.ts +3 -3
  12. package/dist/d0-data-viz/theme-integration.js +3 -3
  13. package/dist/d0-data-viz/theme-integration.test.js +41 -0
  14. package/dist/demos/BspSizingInfographic.svelte +3 -32
  15. package/dist/editor/CodeEditor.test.js +38 -0
  16. package/dist/editor/FindReplaceDialog.svelte +32 -32
  17. package/dist/editor/MarkdownEditor.svelte +71 -58
  18. package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
  19. package/dist/editor/MarkdownEditor.test.js +38 -0
  20. package/dist/editor/components/CorrectionTooltip.svelte +0 -1
  21. package/dist/editor/extensions/expansion.d.ts.map +1 -1
  22. package/dist/editor/extensions/expansion.js +16 -10
  23. package/dist/entity-graph-view/WorldView.svelte +1 -1
  24. package/dist/fabric/ai/ChatPanel.svelte +31 -31
  25. package/dist/fabric/ai/ResearchPanel.svelte +6 -3
  26. package/dist/fabric/ai/ResearchPanel.svelte.d.ts.map +1 -1
  27. package/dist/fabric/index.d.ts +4 -5
  28. package/dist/fabric/index.d.ts.map +1 -1
  29. package/dist/fabric/index.js +3 -3
  30. package/dist/fabric/input/{CommandBar.svelte → AppHeaderBar.svelte} +13 -13
  31. package/dist/fabric/input/{CommandBar.svelte.d.ts → AppHeaderBar.svelte.d.ts} +5 -5
  32. package/dist/fabric/input/AppHeaderBar.svelte.d.ts.map +1 -0
  33. package/dist/fabric/input/{CommandBar.test.js → AppHeaderBar.test.js} +9 -9
  34. package/dist/fabric/input/index.d.ts +2 -2
  35. package/dist/fabric/input/index.d.ts.map +1 -1
  36. package/dist/fabric/input/index.js +1 -1
  37. package/dist/fabric/layout/KanbanBoard.svelte +25 -155
  38. package/dist/fabric/layout/KanbanBoard.svelte.d.ts +2 -26
  39. package/dist/fabric/layout/KanbanBoard.svelte.d.ts.map +1 -1
  40. package/dist/fabric/layout/KanbanBoard.test.js +125 -10
  41. package/dist/fabric/layout/KanbanCard.svelte +27 -223
  42. package/dist/fabric/layout/KanbanCard.svelte.d.ts +2 -19
  43. package/dist/fabric/layout/KanbanCard.svelte.d.ts.map +1 -1
  44. package/dist/fabric/layout/KanbanColumn.svelte +41 -275
  45. package/dist/fabric/layout/KanbanColumn.svelte.d.ts +2 -22
  46. package/dist/fabric/layout/KanbanColumn.svelte.d.ts.map +1 -1
  47. package/dist/fabric/layout/index.d.ts +2 -5
  48. package/dist/fabric/layout/index.d.ts.map +1 -1
  49. package/dist/fabric/layout/index.js +1 -1
  50. package/dist/g0-generative/renderer/OpenUIRenderer.svelte +3 -3
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +4 -2
  53. package/dist/l0-layout/SectionSplitter.svelte +5 -5
  54. package/dist/l0-layout/block-writer/BlockItem.svelte +6 -4
  55. package/dist/l0-layout/card/CompactCard.svelte +4 -3
  56. package/dist/l0-layout/grant/GrantCard.svelte +15 -5
  57. package/dist/l0-layout/grant/GrantCard.svelte.d.ts.map +1 -1
  58. package/dist/l0-layout/index.d.ts +2 -0
  59. package/dist/l0-layout/index.d.ts.map +1 -1
  60. package/dist/l0-layout/index.js +1 -0
  61. package/dist/l0-layout/kanban/KanbanBoard.svelte +246 -29
  62. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts +28 -2
  63. package/dist/l0-layout/kanban/KanbanBoard.svelte.d.ts.map +1 -1
  64. package/dist/l0-layout/kanban/KanbanCard.svelte +175 -150
  65. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts +16 -18
  66. package/dist/l0-layout/kanban/KanbanCard.svelte.d.ts.map +1 -1
  67. package/dist/l0-layout/kanban/KanbanColumn.svelte +152 -78
  68. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts +28 -7
  69. package/dist/l0-layout/kanban/KanbanColumn.svelte.d.ts.map +1 -1
  70. package/dist/l0-layout/kanban/index.d.ts +6 -0
  71. package/dist/l0-layout/kanban/index.d.ts.map +1 -0
  72. package/dist/l0-layout/kanban/index.js +3 -0
  73. package/dist/n0-node-graph/Node.svelte +2 -2
  74. package/dist/n0-node-graph/NodePalette.svelte +2 -2
  75. package/dist/n1-flow-canvas/graph-state.test.js +69 -0
  76. package/dist/n1-flow-canvas/utils.test.js +116 -0
  77. package/dist/n3-force-graph/GraphTooltip.svelte +2 -2
  78. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +12 -11
  79. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
  80. package/dist/n4-adaptive-manifold/classifier.test.js +104 -0
  81. package/dist/n4-adaptive-manifold/n4-tokens.css +2 -2
  82. package/dist/p0-primitives/ThemeProvider.svelte +10 -11
  83. package/dist/p0-primitives/ThemeProvider.svelte.d.ts +1 -1
  84. package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
  85. package/dist/p0-primitives/canvas-theme.d.ts +12 -0
  86. package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
  87. package/dist/p0-primitives/canvas-theme.js +10 -0
  88. package/dist/p0-primitives/index.d.ts +2 -1
  89. package/dist/p0-primitives/index.d.ts.map +1 -1
  90. package/dist/p0-primitives/index.js +1 -0
  91. package/dist/p0-primitives/theme-context.d.ts +9 -0
  92. package/dist/p0-primitives/theme-context.d.ts.map +1 -0
  93. package/dist/p0-primitives/theme-context.js +8 -0
  94. package/dist/p0-primitives/tokens/tokens.css +22 -11
  95. package/dist/p0-primitives/utils/index.d.ts +2 -2
  96. package/dist/p0-primitives/utils/index.d.ts.map +1 -1
  97. package/dist/s0-state/SyncStatus.svelte +1 -1
  98. package/dist/s0-state/ThemeStore.svelte.d.ts +3 -2
  99. package/dist/s0-state/ThemeStore.svelte.d.ts.map +1 -1
  100. package/dist/s0-state/ThemeStore.svelte.js +20 -1
  101. package/dist/s0-state/index.d.ts +0 -1
  102. package/dist/s0-state/index.d.ts.map +1 -1
  103. package/dist/s0-state/index.js +1 -0
  104. package/dist/s0-state/modal-stack-store.svelte.d.ts +25 -0
  105. package/dist/s0-state/modal-stack-store.svelte.d.ts.map +1 -1
  106. package/dist/s0-state/modal-stack-store.svelte.js +19 -0
  107. package/dist/showcase/Showcase.svelte +43 -34
  108. package/dist/showcase/Showcase.svelte.d.ts.map +1 -1
  109. package/dist/spatial/BspTilingCanvas.svelte +7 -5
  110. package/dist/spatial/BspTilingCanvas.svelte.d.ts +1 -0
  111. package/dist/spatial/BspTilingCanvas.svelte.d.ts.map +1 -1
  112. package/dist/spatial/BspTilingSimulation.test.js +88 -0
  113. package/dist/spatial/CameraController.test.js +120 -0
  114. package/dist/spatial/ForceCanvas.svelte +20 -13
  115. package/dist/spatial/ForceCanvas.svelte.d.ts +1 -0
  116. package/dist/spatial/ForceCanvas.svelte.d.ts.map +1 -1
  117. package/dist/spatial/ForceSimulation.svelte.d.ts.map +1 -1
  118. package/dist/spatial/ForceSimulation.svelte.js +32 -21
  119. package/dist/spatial/LodRenderer.svelte +16 -1
  120. package/dist/spatial/LodRenderer.svelte.d.ts +1 -0
  121. package/dist/spatial/LodRenderer.svelte.d.ts.map +1 -1
  122. package/dist/spatial/SnapZoomCamera.svelte +25 -13
  123. package/dist/spatial/SnapZoomCamera.svelte.d.ts +1 -0
  124. package/dist/spatial/SnapZoomCamera.svelte.d.ts.map +1 -1
  125. package/dist/spatial/ZoneTiler.svelte +5 -2
  126. package/dist/spatial/ZoneTiler.svelte.d.ts +1 -0
  127. package/dist/spatial/ZoneTiler.svelte.d.ts.map +1 -1
  128. package/dist/spatial/d3-types.d.ts +31 -0
  129. package/dist/spatial/d3-types.d.ts.map +1 -0
  130. package/dist/spatial/d3-types.js +19 -0
  131. package/dist/ssr-import-clean.test.js +37 -0
  132. package/dist/t0-transport/fs.d.ts +12 -0
  133. package/dist/t0-transport/fs.d.ts.map +1 -0
  134. package/dist/t0-transport/fs.js +55 -0
  135. package/dist/t0-transport/index.d.ts +1 -0
  136. package/dist/t0-transport/index.d.ts.map +1 -1
  137. package/dist/t0-transport/index.js +1 -0
  138. package/dist/t0-transport/invoke.d.ts.map +1 -1
  139. package/dist/t0-transport/invoke.js +5 -2
  140. package/dist/t0-transport/quality.d.ts +12 -3
  141. package/dist/t0-transport/quality.d.ts.map +1 -1
  142. package/dist/t0-transport/quality.js +17 -4
  143. package/dist/t0-transport/substrate.svelte.d.ts +27 -0
  144. package/dist/t0-transport/substrate.svelte.d.ts.map +1 -0
  145. package/dist/t0-transport/substrate.svelte.js +49 -0
  146. package/dist/u0-primitives/LockIndicator.svelte +1 -1
  147. package/dist/u0-primitives/VerticalToolbar.svelte +1 -1
  148. package/dist/u0-primitives/accordion/Accordion.svelte +10 -9
  149. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts +0 -7
  150. package/dist/u0-primitives/accordion/Accordion.svelte.d.ts.map +1 -1
  151. package/dist/u0-primitives/accordion/Accordion.test.js +5 -5
  152. package/dist/u0-primitives/badge/Badge.test.js +10 -10
  153. package/dist/u0-primitives/badge/ValidityBadge.test.js +9 -9
  154. package/dist/u0-primitives/button/Button.svelte +3 -1
  155. package/dist/u0-primitives/button/Button.svelte.d.ts +1 -0
  156. package/dist/u0-primitives/button/Button.svelte.d.ts.map +1 -1
  157. package/dist/u0-primitives/button/Button.test.js +11 -11
  158. package/dist/u0-primitives/card/Card.svelte +26 -20
  159. package/dist/u0-primitives/card/Card.svelte.d.ts.map +1 -1
  160. package/dist/u0-primitives/command-palette/CommandPalette.svelte +27 -0
  161. package/dist/u0-primitives/command-palette/CommandPalette.svelte.d.ts.map +1 -1
  162. package/dist/u0-primitives/command-palette/commandStore.svelte.d.ts.map +1 -1
  163. package/dist/u0-primitives/command-palette/commandStore.svelte.js +2 -1
  164. package/dist/u0-primitives/dropdown/Dropdown.test.js +1 -1
  165. package/dist/u0-primitives/index.d.ts +2 -0
  166. package/dist/u0-primitives/index.d.ts.map +1 -1
  167. package/dist/u0-primitives/index.js +1 -0
  168. package/dist/u0-primitives/input/Input.svelte +9 -0
  169. package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
  170. package/dist/u0-primitives/input/Input.test.js +1 -1
  171. package/dist/u0-primitives/modal/Modal.svelte +46 -23
  172. package/dist/u0-primitives/modal/Modal.svelte.d.ts.map +1 -1
  173. package/dist/u0-primitives/modal/Modal.test.js +63 -15
  174. package/dist/u0-primitives/rsvp/RsvpReader.svelte +8 -8
  175. package/dist/u0-primitives/rsvp/RsvpReader.svelte.d.ts.map +1 -1
  176. package/dist/u0-primitives/steps/Steps.svelte +2 -2
  177. package/dist/u0-primitives/surface-state/SurfaceState.svelte +190 -0
  178. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts +15 -0
  179. package/dist/u0-primitives/surface-state/SurfaceState.svelte.d.ts.map +1 -0
  180. package/dist/u0-primitives/toggle/Toggle.svelte +12 -2
  181. package/dist/u0-primitives/tooltip/Tooltip.test.js +12 -12
  182. package/dist/v0-diagrams/MarkmapDiagram.test.js +49 -0
  183. package/dist/v0-diagrams/MermaidDiagram.svelte +21 -9
  184. package/dist/v0-diagrams/MermaidDiagram.svelte.d.ts.map +1 -1
  185. package/dist/v0-diagrams/MermaidDiagram.test.js +40 -0
  186. package/package.json +51 -24
  187. package/src/n4-adaptive-manifold/n4-tokens.css +2 -2
  188. package/src/p0-primitives/tokens/tokens.css +22 -11
  189. package/src/p0-primitives/tokens/tokens.json +13 -2
  190. package/dist/b0-app-shell/command-bar/CommandBar.svelte.d.ts.map +0 -1
  191. package/dist/fabric/input/CommandBar.svelte.d.ts.map +0 -1
  192. package/dist/stores/vaultStore.svelte +0 -14
  193. package/dist/stores/vaultStore.svelte.d.ts +0 -24
  194. package/dist/stores/vaultStore.svelte.d.ts.map +0 -1
  195. package/dist/tauri/index.d.ts +0 -3
  196. package/dist/tauri/index.d.ts.map +0 -1
  197. package/dist/tauri/index.js +0 -11
  198. package/dist/types/tauri.d.ts +0 -18
@@ -1,4 +1,6 @@
1
1
  <script lang="ts">
2
+ import { onMount, tick } from 'svelte';
3
+
2
4
  /** Mirrors ClarificationSession from @kos/agent — kept local to avoid a design-system→agent dep. */
3
5
  interface ClarificationSession {
4
6
  sessionId: string;
@@ -19,6 +21,12 @@
19
21
  const { session, onSubmit, onDismiss, submitting = false }: Props = $props();
20
22
 
21
23
  let reply = $state('');
24
+ let replyInput: HTMLTextAreaElement | undefined;
25
+
26
+ onMount(async () => {
27
+ await tick();
28
+ replyInput?.focus();
29
+ });
22
30
 
23
31
  function handleKeydown(e: KeyboardEvent) {
24
32
  if (e.key === 'Enter' && !e.shiftKey && reply.trim()) {
@@ -37,7 +45,7 @@
37
45
  }
38
46
  </script>
39
47
 
40
- <div class="clarification-overlay" role="dialog" aria-modal="true" aria-labelledby="clarification-heading">
48
+ <div class="clarification-overlay" role="dialog" aria-modal="true" aria-labelledby="clarification-heading" tabindex="-1">
41
49
  <div class="clarification-panel">
42
50
  <header class="clarification-header">
43
51
  <div class="scaffold-badge">{session.scaffoldKind}</div>
@@ -61,12 +69,12 @@
61
69
  <div class="reply-area">
62
70
  <textarea
63
71
  class="reply-input"
72
+ bind:this={replyInput}
64
73
  bind:value={reply}
65
74
  onkeydown={handleKeydown}
66
75
  placeholder="Your answer…"
67
76
  rows={3}
68
77
  disabled={submitting}
69
- autofocus
70
78
  ></textarea>
71
79
  <button
72
80
  class="submit-btn"
@@ -1 +1 @@
1
- {"version":3,"file":"ClarificationOverlay.svelte.d.ts","sourceRoot":"","sources":["../../../src/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte.ts"],"names":[],"mappings":"AAGE,oGAAoG;AACpG,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA6DH,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"ClarificationOverlay.svelte.d.ts","sourceRoot":"","sources":["../../../src/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte.ts"],"names":[],"mappings":"AAME,oGAAoG;AACpG,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAoEH,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  /**
3
- * CommandBar — The LEAP global command strip.
3
+ * GlobalCommandBar — The LEAP global command strip.
4
4
  *
5
5
  * Three zones, always in the same positions across every LEAP app:
6
6
  * LEFT · FLOW PHASE — the system's current operational state
@@ -10,7 +10,7 @@
10
10
  * Prop-driven: no store imports. Each app wires it to its own stores.
11
11
  *
12
12
  * Placement: top of every LEAP app shell, above app-specific navigation.
13
- * Height: 52px fixed.
13
+ * Height: 3.25rem fixed.
14
14
  */
15
15
 
16
16
  interface Props {
@@ -51,21 +51,21 @@
51
51
  switch (flowPhase?.toLowerCase()) {
52
52
  case 'go':
53
53
  case 'running':
54
- case 'executing': return '#27ae60';
54
+ case 'executing': return 'var(--color-success)';
55
55
  case 'sprout':
56
56
  case 'in_progress':
57
- case 'active': return '#4682c8';
57
+ case 'active': return 'var(--color-info)';
58
58
  case 'weed':
59
- case 'weeding': return '#e67e22';
59
+ case 'weeding': return 'var(--color-warning)';
60
60
  case 'consult':
61
- case 'consulting': return '#b87333';
61
+ case 'consulting': return 'var(--color-accent)';
62
62
  case 'freeze':
63
63
  case 'frozen':
64
- case 'blocked': return '#506eb4';
65
- case 'seed': return '#b87333';
64
+ case 'blocked': return 'var(--color-info)';
65
+ case 'seed': return 'var(--color-accent)';
66
66
  case 'compost':
67
- case 'prune': return '#3d3d3d';
68
- default: return '#5a5245';
67
+ case 'prune': return 'var(--color-text-muted)';
68
+ default: return 'var(--color-text-muted)';
69
69
  }
70
70
  });
71
71
 
@@ -206,12 +206,12 @@
206
206
 
207
207
  .cb {
208
208
  display: grid;
209
- grid-template-columns: 148px 1px 1fr 1px 196px;
209
+ grid-template-columns: 9.25rem var(--border-width-thin) 1fr var(--border-width-thin) 12.25rem;
210
210
  align-items: stretch;
211
- height: 52px;
211
+ height: 3.25rem;
212
212
  width: 100%;
213
- background: #0a0a0a;
214
- border-bottom: 1px solid var(--color-accent-subtle);
213
+ background: var(--color-bg-inset);
214
+ border-bottom: var(--border-width-thin) solid var(--color-accent-subtle);
215
215
  position: relative;
216
216
  overflow: visible;
217
217
  flex-shrink: 0;
@@ -224,10 +224,10 @@
224
224
  inset: 0;
225
225
  background: repeating-linear-gradient(
226
226
  180deg,
227
- transparent 0px,
228
- transparent 2px,
229
- rgba(255, 255, 255, 0.012) 2px,
230
- rgba(255, 255, 255, 0.012) 3px
227
+ transparent 0,
228
+ transparent 0.125rem,
229
+ rgba(255, 255, 255, 0.012) 0.125rem,
230
+ rgba(255, 255, 255, 0.012) 0.1875rem
231
231
  );
232
232
  pointer-events: none;
233
233
  z-index: 0;
@@ -240,7 +240,7 @@
240
240
  top: 0;
241
241
  left: 0;
242
242
  right: 0;
243
- height: 1px;
243
+ height: var(--border-width-thin);
244
244
  background: linear-gradient(
245
245
  90deg,
246
246
  var(--color-accent-muted) 0%,
@@ -260,9 +260,9 @@
260
260
  /* ── Divider ───────────────────────────────────────────────────────────── */
261
261
 
262
262
  .cb-rule {
263
- width: 1px;
263
+ width: var(--border-width-thin);
264
264
  background: var(--color-accent-subtle);
265
- margin: 12px 0;
265
+ margin: var(--space-3) 0;
266
266
  z-index: 1;
267
267
  }
268
268
 
@@ -271,8 +271,8 @@
271
271
  .cb-phase {
272
272
  display: flex;
273
273
  align-items: center;
274
- gap: 10px;
275
- padding: 0 18px;
274
+ gap: var(--space-2);
275
+ padding: 0 1.125rem;
276
276
  position: relative;
277
277
  z-index: 1;
278
278
  }
@@ -284,20 +284,20 @@
284
284
  inset: 0;
285
285
  background: radial-gradient(
286
286
  ellipse 160% 120% at -10% 50%,
287
- color-mix(in srgb, var(--glow, #5a5245) 12%, transparent),
287
+ color-mix(in srgb, var(--glow, var(--color-text-muted)) 12%, transparent),
288
288
  transparent 65%
289
289
  );
290
290
  pointer-events: none;
291
291
  }
292
292
 
293
293
  .cb-phase__dot {
294
- width: 8px;
295
- height: 8px;
294
+ width: var(--space-2);
295
+ height: var(--space-2);
296
296
  border-radius: 50%;
297
- background: var(--glow, #5a5245);
297
+ background: var(--glow, var(--color-text-muted));
298
298
  box-shadow:
299
- 0 0 0 2px color-mix(in srgb, var(--glow, #5a5245) 20%, transparent),
300
- 0 0 8px color-mix(in srgb, var(--glow, #5a5245) 50%, transparent);
299
+ 0 0 0 var(--border-width-default) color-mix(in srgb, var(--glow, var(--color-text-muted)) 20%, transparent),
300
+ 0 0 var(--blur-lg) color-mix(in srgb, var(--glow, var(--color-text-muted)) 50%, transparent);
301
301
  flex-shrink: 0;
302
302
  transition: background 0.4s, box-shadow 0.4s;
303
303
  }
@@ -310,14 +310,14 @@
310
310
  0%, 100% {
311
311
  opacity: 1;
312
312
  box-shadow:
313
- 0 0 0 2px color-mix(in srgb, var(--glow) 20%, transparent),
314
- 0 0 10px color-mix(in srgb, var(--glow) 60%, transparent);
313
+ 0 0 0 var(--border-width-default) color-mix(in srgb, var(--glow) 20%, transparent),
314
+ 0 0 0.625rem color-mix(in srgb, var(--glow) 60%, transparent);
315
315
  }
316
316
  50% {
317
317
  opacity: 0.65;
318
318
  box-shadow:
319
- 0 0 0 2px color-mix(in srgb, var(--glow) 10%, transparent),
320
- 0 0 4px color-mix(in srgb, var(--glow) 30%, transparent);
319
+ 0 0 0 var(--border-width-default) color-mix(in srgb, var(--glow) 10%, transparent),
320
+ 0 0 0.25rem color-mix(in srgb, var(--glow) 30%, transparent);
321
321
  }
322
322
  }
323
323
 
@@ -329,9 +329,9 @@
329
329
 
330
330
  .cb-phase__name {
331
331
  font-family: var(--font-sans);
332
- font-size: 14px;
332
+ font-size: var(--text-sm);
333
333
  font-weight: 700;
334
- color: var(--glow, #5a5245);
334
+ color: var(--glow, var(--color-text-muted));
335
335
  letter-spacing: 0.1em;
336
336
  line-height: 1;
337
337
  transition: color 0.4s;
@@ -339,8 +339,8 @@
339
339
 
340
340
  .cb-phase__sub {
341
341
  font-family: var(--font-mono);
342
- font-size: 9px;
343
- color: rgba(160, 152, 128, 0.65);
342
+ font-size: 0.5625rem;
343
+ color: color-mix(in srgb, var(--color-text-secondary) 65%, transparent);
344
344
  letter-spacing: 0.06em;
345
345
  line-height: 1;
346
346
  }
@@ -351,7 +351,7 @@
351
351
  display: flex;
352
352
  align-items: center;
353
353
  gap: var(--space-2);
354
- padding: 0 16px;
354
+ padding: 0 var(--space-4);
355
355
  position: relative;
356
356
  z-index: 1;
357
357
  transition: background 0.2s;
@@ -362,9 +362,9 @@
362
362
  content: '';
363
363
  position: absolute;
364
364
  bottom: 0;
365
- left: 20px;
366
- right: 20px;
367
- height: 1px;
365
+ left: var(--space-5);
366
+ right: var(--space-5);
367
+ height: var(--border-width-thin);
368
368
  background: var(--color-accent-muted);
369
369
  transform: scaleX(0);
370
370
  transform-origin: center;
@@ -381,7 +381,7 @@
381
381
 
382
382
  .cb-intent__cursor {
383
383
  font-family: var(--font-mono);
384
- font-size: 13px;
384
+ font-size: var(--text-sm);
385
385
  color: var(--color-accent-muted);
386
386
  flex-shrink: 0;
387
387
  user-select: none;
@@ -401,20 +401,20 @@
401
401
  border: none;
402
402
  outline: none;
403
403
  font-family: var(--font-mono);
404
- font-size: 12px;
404
+ font-size: var(--text-xs);
405
405
  color: var(--color-text-primary);
406
406
  padding: 0;
407
407
  caret-color: var(--color-accent);
408
408
  }
409
409
 
410
410
  .cb-intent__input::placeholder {
411
- color: rgba(160, 152, 128, 0.25);
411
+ color: color-mix(in srgb, var(--color-text-secondary) 25%, transparent);
412
412
  font-style: italic;
413
413
  }
414
414
 
415
415
  .cb-intent__input:disabled {
416
416
  cursor: not-allowed;
417
- color: rgba(160, 152, 128, 0.3);
417
+ color: color-mix(in srgb, var(--color-text-secondary) 30%, transparent);
418
418
  }
419
419
 
420
420
  .cb-intent__send {
@@ -422,11 +422,11 @@
422
422
  display: flex;
423
423
  align-items: center;
424
424
  justify-content: center;
425
- width: 24px;
426
- height: 24px;
427
- background: rgba(255, 255, 255, 0.04);
428
- border: 1px solid var(--color-accent-glow);
429
- border-radius: var(--radius-sm, 3px);
425
+ width: 1.5rem;
426
+ height: 1.5rem;
427
+ background: var(--overlay-white-04);
428
+ border: var(--border-width-thin) solid var(--color-accent-glow);
429
+ border-radius: var(--radius-sm);
430
430
  color: var(--color-accent-muted);
431
431
  cursor: pointer;
432
432
  transition: all 0.12s;
@@ -441,7 +441,7 @@
441
441
  .cb-intent__send--ready:hover {
442
442
  background: var(--color-accent-muted);
443
443
  border-color: var(--color-accent-muted);
444
- box-shadow: 0 0 8px var(--color-accent-muted);
444
+ box-shadow: 0 0 var(--blur-lg) var(--color-accent-muted);
445
445
  }
446
446
 
447
447
  .cb-intent__send:disabled {
@@ -451,9 +451,9 @@
451
451
 
452
452
  .cb-intent__spinner {
453
453
  display: inline-block;
454
- width: 10px;
455
- height: 10px;
456
- border: 1.5px solid var(--color-accent-muted);
454
+ width: var(--space-2);
455
+ height: var(--space-2);
456
+ border: 0.09375rem solid var(--color-accent-muted);
457
457
  border-top-color: var(--color-accent);
458
458
  border-radius: 50%;
459
459
  animation: cb-spin 0.65s linear infinite;
@@ -469,8 +469,8 @@
469
469
  display: flex;
470
470
  flex-direction: column;
471
471
  justify-content: center;
472
- gap: 5px;
473
- padding: 0 18px;
472
+ gap: 0.3125rem;
473
+ padding: 0 1.125rem;
474
474
  position: relative;
475
475
  z-index: 1;
476
476
  }
@@ -495,9 +495,9 @@
495
495
  }
496
496
 
497
497
  .cb-spark__seg {
498
- width: 4px;
499
- height: 11px;
500
- border-radius: var(--radius-xs, 1px);
498
+ width: var(--space-1);
499
+ height: 0.6875rem;
500
+ border-radius: var(--radius-xs);
501
501
  background: var(--color-accent-subtle);
502
502
  transition: background 0.3s, box-shadow 0.3s;
503
503
  flex-shrink: 0;
@@ -505,19 +505,19 @@
505
505
 
506
506
  .cb-spark__seg--on {
507
507
  background: var(--color-accent);
508
- box-shadow: 0 0 3px var(--color-accent-muted);
508
+ box-shadow: 0 0 0.1875rem var(--color-accent-muted);
509
509
  }
510
510
 
511
511
  /* Warning — amber shift */
512
512
  .cb-spark--warning .cb-spark__seg--on {
513
- background: #e67e22;
514
- box-shadow: 0 0 3px rgba(230, 126, 34, 0.5);
513
+ background: var(--color-warning);
514
+ box-shadow: 0 0 0.1875rem color-mix(in srgb, var(--color-warning) 50%, transparent);
515
515
  }
516
516
 
517
517
  /* Critical — red + pulse */
518
518
  .cb-spark--critical .cb-spark__seg--on {
519
- background: #c0392b;
520
- box-shadow: 0 0 4px rgba(192, 57, 43, 0.6);
519
+ background: var(--color-error);
520
+ box-shadow: 0 0 0.25rem color-mix(in srgb, var(--color-error) 60%, transparent);
521
521
  animation: spark-critical 1.2s ease-in-out infinite;
522
522
  }
523
523
 
@@ -529,37 +529,37 @@
529
529
  .cb-spark__readout {
530
530
  display: flex;
531
531
  align-items: baseline;
532
- gap: 3px;
532
+ gap: 0.1875rem;
533
533
  font-family: var(--font-mono);
534
534
  }
535
535
 
536
536
  .cb-spark__val {
537
- font-size: 11px;
537
+ font-size: 0.6875rem;
538
538
  font-weight: 600;
539
539
  color: var(--color-accent);
540
540
  letter-spacing: 0.02em;
541
541
  }
542
542
 
543
- .cb-spark--warning .cb-spark__val { color: #e67e22; }
544
- .cb-spark--critical .cb-spark__val { color: #c0392b; }
543
+ .cb-spark--warning .cb-spark__val { color: var(--color-warning); }
544
+ .cb-spark--critical .cb-spark__val { color: var(--color-error); }
545
545
 
546
546
  .cb-spark__div {
547
- font-size: 10px;
548
- color: rgba(160, 152, 128, 0.3);
547
+ font-size: 0.625rem;
548
+ color: color-mix(in srgb, var(--color-text-secondary) 30%, transparent);
549
549
  }
550
550
 
551
551
  .cb-spark__cap {
552
- font-size: 10px;
553
- color: rgba(160, 152, 128, 0.45);
552
+ font-size: 0.625rem;
553
+ color: color-mix(in srgb, var(--color-text-secondary) 45%, transparent);
554
554
  letter-spacing: 0.02em;
555
555
  }
556
556
 
557
557
  .cb-spark__lbl {
558
- font-size: 9px;
558
+ font-size: 0.5rem;
559
559
  font-weight: 600;
560
- color: rgba(160, 152, 128, 0.35);
560
+ color: color-mix(in srgb, var(--color-text-secondary) 35%, transparent);
561
561
  text-transform: uppercase;
562
562
  letter-spacing: 0.12em;
563
- margin-left: 5px;
563
+ margin-left: 0.3125rem;
564
564
  }
565
565
  </style>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CommandBar — The LEAP global command strip.
2
+ * GlobalCommandBar — The LEAP global command strip.
3
3
  *
4
4
  * Three zones, always in the same positions across every LEAP app:
5
5
  * LEFT · FLOW PHASE — the system's current operational state
@@ -9,7 +9,7 @@
9
9
  * Prop-driven: no store imports. Each app wires it to its own stores.
10
10
  *
11
11
  * Placement: top of every LEAP app shell, above app-specific navigation.
12
- * Height: 52px fixed.
12
+ * Height: 3.25rem fixed.
13
13
  */
14
14
  interface Props {
15
15
  /** Whether the daemon socket is connected. */
@@ -29,7 +29,7 @@ interface Props {
29
29
  /** Called when the user submits an intent. */
30
30
  onintent?: (text: string) => void;
31
31
  }
32
- declare const CommandBar: import("svelte").Component<Props, {}, "">;
33
- type CommandBar = ReturnType<typeof CommandBar>;
34
- export default CommandBar;
35
- //# sourceMappingURL=CommandBar.svelte.d.ts.map
32
+ declare const GlobalCommandBar: import("svelte").Component<Props, {}, "">;
33
+ type GlobalCommandBar = ReturnType<typeof GlobalCommandBar>;
34
+ export default GlobalCommandBar;
35
+ //# sourceMappingURL=GlobalCommandBar.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalCommandBar.svelte.d.ts","sourceRoot":"","sources":["../../../src/b0-app-shell/global-command-bar/GlobalCommandBar.svelte.ts"],"names":[],"mappings":"AAGE;;;;;;;;;;;;GAYG;AAEH,UAAU,KAAK;IACb,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAkJH,QAAA,MAAM,gBAAgB,2CAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -9,6 +9,6 @@
9
9
  * and provide the shared control surface for system state, intent dispatch,
10
10
  * and resource visibility. They are prop-driven (no store imports).
11
11
  */
12
- export { default as CommandBar } from './command-bar/CommandBar.svelte';
12
+ export { default as GlobalCommandBar } from './global-command-bar/GlobalCommandBar.svelte';
13
13
  export { ClarificationOverlay } from './clarification-overlay/index';
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/b0-app-shell/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/b0-app-shell/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -9,5 +9,5 @@
9
9
  * and provide the shared control surface for system state, intent dispatch,
10
10
  * and resource visibility. They are prop-driven (no store imports).
11
11
  */
12
- export { default as CommandBar } from './command-bar/CommandBar.svelte';
12
+ export { default as GlobalCommandBar } from './global-command-bar/GlobalCommandBar.svelte';
13
13
  export { ClarificationOverlay } from './clarification-overlay/index';
@@ -57,6 +57,11 @@
57
57
  isExpanded = !isExpanded;
58
58
  }
59
59
 
60
+ function handlePillClick(event: MouseEvent) {
61
+ if ((event.target as Element).closest('.checkpoint-bar')) return;
62
+ toggleExpanded();
63
+ }
64
+
60
65
  // Collapse when clicking outside (handled by parent or escape key)
61
66
  function handleKeyDown(event: KeyboardEvent) {
62
67
  if (event.key === 'Escape' && isExpanded) {
@@ -91,7 +96,7 @@
91
96
  tabindex="0"
92
97
  aria-label={ariaLabel}
93
98
  aria-expanded={isExpanded}
94
- onclick={toggleExpanded}
99
+ onclick={handlePillClick}
95
100
  onkeydown={(e) => {
96
101
  if (e.key === 'Enter' || e.key === ' ') {
97
102
  e.preventDefault();
@@ -132,7 +137,7 @@
132
137
 
133
138
  </button>
134
139
  </div>
135
- <div class="pill-content" onclick={(e) => e.stopPropagation()}>
140
+ <div class="pill-content" role="group" aria-label="Checkpoint timeline">
136
141
  <CheckpointBar
137
142
  {checkpoints}
138
143
  {currentSeqno}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckpointPill.svelte.d.ts","sourceRoot":"","sources":["../../src/d0-data-viz/CheckpointPill.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKnD,UAAU,KAAK;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAuHH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"CheckpointPill.svelte.d.ts","sourceRoot":"","sources":["../../src/d0-data-viz/CheckpointPill.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKnD,UAAU,KAAK;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA4HH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -10,8 +10,8 @@
10
10
  * @example
11
11
  * ```svelte
12
12
  * <script>
13
- * import { CheckpointBar } from '@sov/design-system';
14
- * import { themeStore } from '../lib/stores/themeStore.svelte';
13
+ * import { CheckpointBar } from '@kos/design-system/d0-data-viz';
14
+ * import { themeStore } from '@kos/design-system/s0-state';
15
15
  *
16
16
  * // Colors automatically applied from themeStore
17
17
  * // Users customize via Settings > Appearance > Checkpoint Colors
@@ -23,7 +23,7 @@
23
23
  * @example
24
24
  * ```typescript
25
25
  * // Programmatic color customization
26
- * import { themeStore } from '../lib/stores/themeStore.svelte';
26
+ * import { themeStore } from '@kos/design-system/s0-state';
27
27
  *
28
28
  * themeStore.setCustomToken('d0-checkpoint-rust', '#ff6b35'); // Orange rust
29
29
  * themeStore.setCustomToken('d0-checkpoint-ui', '#00d4aa'); // Teal UI
@@ -10,8 +10,8 @@
10
10
  * @example
11
11
  * ```svelte
12
12
  * <script>
13
- * import { CheckpointBar } from '@sov/design-system';
14
- * import { themeStore } from '../lib/stores/themeStore.svelte';
13
+ * import { CheckpointBar } from '@kos/design-system/d0-data-viz';
14
+ * import { themeStore } from '@kos/design-system/s0-state';
15
15
  *
16
16
  * // Colors automatically applied from themeStore
17
17
  * // Users customize via Settings > Appearance > Checkpoint Colors
@@ -23,7 +23,7 @@
23
23
  * @example
24
24
  * ```typescript
25
25
  * // Programmatic color customization
26
- * import { themeStore } from '../lib/stores/themeStore.svelte';
26
+ * import { themeStore } from '@kos/design-system/s0-state';
27
27
  *
28
28
  * themeStore.setCustomToken('d0-checkpoint-rust', '#ff6b35'); // Orange rust
29
29
  * themeStore.setCustomToken('d0-checkpoint-ui', '#00d4aa'); // Teal UI
@@ -0,0 +1,41 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { getEffectiveCheckpointColor, CHECKPOINT_CSS_VARS, CHECKPOINT_DEFAULT_COLORS } from './theme-integration';
3
+ describe('d0-data-viz/theme-integration', () => {
4
+ it('CHECKPOINT_CSS_VARS covers all component types', () => {
5
+ const types = [
6
+ 'rust-crate',
7
+ 'ui-bundle',
8
+ 'config',
9
+ 'faculty-state',
10
+ 'substrate-binary',
11
+ 'system-snapshot',
12
+ ];
13
+ for (const type of types) {
14
+ expect(CHECKPOINT_CSS_VARS[type]).toBeDefined();
15
+ }
16
+ });
17
+ it('CHECKPOINT_DEFAULT_COLORS has light and dark for all types', () => {
18
+ const types = [
19
+ 'rust-crate',
20
+ 'ui-bundle',
21
+ 'config',
22
+ 'faculty-state',
23
+ 'substrate-binary',
24
+ 'system-snapshot',
25
+ ];
26
+ for (const type of types) {
27
+ expect(CHECKPOINT_DEFAULT_COLORS[type]).toBeDefined();
28
+ expect(CHECKPOINT_DEFAULT_COLORS[type].light).toMatch(/^#[0-9a-f]{6}$/);
29
+ expect(CHECKPOINT_DEFAULT_COLORS[type].dark).toMatch(/^#[0-9a-f]{6}$/);
30
+ }
31
+ });
32
+ it('getEffectiveCheckpointColor returns CSS var reference in browser', () => {
33
+ // jsdom sets typeof window !== 'undefined'
34
+ const color = getEffectiveCheckpointColor('rust-crate', true);
35
+ expect(color).toContain('var(--d0-checkpoint-rust');
36
+ });
37
+ it('getEffectiveCheckpointColor returns fallback when isDark is false', () => {
38
+ const color = getEffectiveCheckpointColor('ui-bundle', false);
39
+ expect(color).toContain('var(--d0-checkpoint-ui');
40
+ });
41
+ });
@@ -158,7 +158,7 @@
158
158
  margin: 0 auto;
159
159
  font-family: system-ui, sans-serif;
160
160
  color: var(--color-text-primary, #e8e4dc);
161
- background: var(--color-bg, #1a1918);
161
+ background: var(--color-bg-canvas, #1a1918);
162
162
  min-height: 100vh;
163
163
  overflow-y: auto;
164
164
  }
@@ -168,26 +168,6 @@
168
168
  margin-bottom: 32px;
169
169
  }
170
170
 
171
- .debug {
172
- margin-top: 16px;
173
- padding: 12px;
174
- background: var(--color-accent-subtle);
175
- border: 1px solid var(--color-accent, var(--color-accent));
176
- border-radius: 6px;
177
- font-family: monospace;
178
- font-size: 12px;
179
- text-align: left;
180
- }
181
-
182
- .debug ul {
183
- margin: 8px 0;
184
- padding-left: 20px;
185
- }
186
-
187
- .debug li {
188
- margin: 2px 0;
189
- }
190
-
191
171
  h2 {
192
172
  margin: 0 0 8px 0;
193
173
  font-size: 24px;
@@ -318,22 +298,11 @@
318
298
  width: 100%;
319
299
  }
320
300
 
321
- .mini-title {
322
- font-weight: bold;
323
- margin-bottom: 2px;
324
- }
325
-
326
301
  .mini-lines {
327
302
  color: var(--color-text-muted, #706858);
328
303
  font-size: 10px;
329
304
  }
330
305
 
331
- .preview-header {
332
- font-weight: bold;
333
- margin-bottom: 4px;
334
- font-size: 11px;
335
- }
336
-
337
306
  .preview-body {
338
307
  color: var(--color-text-secondary, #a89b8c);
339
308
  font-size: 10px;
@@ -350,6 +319,7 @@
350
319
  overflow: hidden;
351
320
  display: -webkit-box;
352
321
  -webkit-line-clamp: 2;
322
+ line-clamp: 2;
353
323
  -webkit-box-orient: vertical;
354
324
  }
355
325
 
@@ -358,6 +328,7 @@
358
328
  overflow: hidden;
359
329
  display: -webkit-box;
360
330
  -webkit-line-clamp: 6;
331
+ line-clamp: 6;
361
332
  -webkit-box-orient: vertical;
362
333
  }
363
334