@bpmnkit/editor 0.0.34 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/css.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { injectChromeStyles } from "./chrome.js";
1
2
  /** ID used to prevent duplicate style injection. */
2
3
  export const EDITOR_STYLE_ID = "bpmnkit-editor-styles-v1";
3
4
  /** ID used to prevent duplicate HUD style injection. */
@@ -19,22 +20,23 @@ export const EDITOR_CSS = `
19
20
 
20
21
  /* Keyboard-focus ring on the editor host — distinct from the selection outline */
21
22
  .bpmnkit-canvas-host:focus-visible {
22
- outline: 2px dashed var(--bpmnkit-accent-bright, #3b82f6);
23
+ outline: 2px dashed var(--bpmnkit-ds-accent, #a8503a);
23
24
  outline-offset: -2px;
24
25
  }
25
26
 
26
27
  /* Selection outline */
27
28
  .bpmnkit-sel-indicator {
28
29
  fill: none;
29
- stroke: var(--bpmnkit-accent, #1a56db);
30
- stroke-width: 1.5;
30
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
31
+ stroke-width: 1;
32
+ stroke-dasharray: 4 3;
31
33
  pointer-events: none;
32
34
  }
33
35
 
34
36
  /* Resize handle */
35
37
  .bpmnkit-resize-handle {
36
38
  fill: #fff;
37
- stroke: var(--bpmnkit-accent, #1a56db);
39
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
38
40
  stroke-width: 1.5;
39
41
  cursor: nwse-resize;
40
42
  }
@@ -57,7 +59,7 @@ export const EDITOR_CSS = `
57
59
 
58
60
  /* Connection port */
59
61
  .bpmnkit-conn-port {
60
- fill: var(--bpmnkit-accent, #1a56db);
62
+ fill: var(--bpmnkit-ds-accent, #a8503a);
61
63
  stroke: none;
62
64
  cursor: crosshair;
63
65
  opacity: 0.7;
@@ -68,8 +70,9 @@ export const EDITOR_CSS = `
68
70
 
69
71
  /* Rubber-band selection */
70
72
  .bpmnkit-rubber-band {
71
- fill: rgba(0, 102, 204, 0.05);
72
- stroke: var(--bpmnkit-accent, #1a56db);
73
+ fill: var(--bpmnkit-ds-accent, #a8503a);
74
+ fill-opacity: 0.06;
75
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
73
76
  stroke-dasharray: 4 2;
74
77
  pointer-events: none;
75
78
  }
@@ -82,7 +85,7 @@ export const EDITOR_CSS = `
82
85
 
83
86
  /* Ghost connection line */
84
87
  .bpmnkit-ghost-conn {
85
- stroke: var(--bpmnkit-accent, #1a56db);
88
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
86
89
  stroke-width: 1.5;
87
90
  stroke-dasharray: 6 3;
88
91
  fill: none;
@@ -96,15 +99,16 @@ export const EDITOR_CSS = `
96
99
 
97
100
  /* Resize preview rect */
98
101
  .bpmnkit-resize-preview {
99
- fill: rgba(0, 102, 204, 0.05);
100
- stroke: var(--bpmnkit-accent, #1a56db);
102
+ fill: var(--bpmnkit-ds-accent, #a8503a);
103
+ fill-opacity: 0.06;
104
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
101
105
  stroke-dasharray: 4 2;
102
106
  pointer-events: none;
103
107
  }
104
108
 
105
109
  /* Alignment guide lines (snap helpers) */
106
110
  .bpmnkit-align-guide {
107
- stroke: var(--bpmnkit-accent-bright, #6b9df7);
111
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
108
112
  stroke-width: 1;
109
113
  stroke-dasharray: 4 2;
110
114
  pointer-events: none;
@@ -120,39 +124,39 @@ export const EDITOR_CSS = `
120
124
 
121
125
  /* Edge hover dot (waypoint insertion indicator) */
122
126
  .bpmnkit-edge-hover-dot {
123
- fill: var(--bpmnkit-accent, #1a56db);
127
+ fill: var(--bpmnkit-ds-accent, #a8503a);
124
128
  stroke: #fff;
125
129
  stroke-width: 1.5;
126
130
  pointer-events: none;
127
131
  opacity: 0.85;
128
132
  }
129
- [data-theme="dark"] .bpmnkit-edge-hover-dot { fill: var(--bpmnkit-accent, #6b9df7); }
133
+ [data-theme="dark"] .bpmnkit-edge-hover-dot { fill: var(--bpmnkit-ds-accent-on-dark, #c9755c); }
130
134
 
131
135
  /* Edge waypoint angle balls (visible on edge hover) */
132
136
  .bpmnkit-edge-waypoint-ball {
133
- fill: var(--bpmnkit-accent, #1a56db);
137
+ fill: var(--bpmnkit-ds-accent, #a8503a);
134
138
  stroke: #fff;
135
139
  stroke-width: 1.5;
136
140
  cursor: move;
137
141
  }
138
- .bpmnkit-edge-waypoint-ball:hover { fill: var(--bpmnkit-accent, #1a56db); }
139
- [data-theme="dark"] .bpmnkit-edge-waypoint-ball { fill: var(--bpmnkit-accent, #6b9df7); }
142
+ .bpmnkit-edge-waypoint-ball:hover { fill: var(--bpmnkit-ds-accent, #a8503a); }
143
+ [data-theme="dark"] .bpmnkit-edge-waypoint-ball { fill: var(--bpmnkit-ds-accent-on-dark, #c9755c); }
140
144
 
141
145
  /* Edge endpoint drag handles */
142
146
  .bpmnkit-edge-endpoint {
143
- fill: var(--bpmnkit-accent, #1a56db);
147
+ fill: var(--bpmnkit-ds-accent, #a8503a);
144
148
  stroke: #fff;
145
149
  stroke-width: 1.5;
146
150
  cursor: grab;
147
151
  }
148
152
  .bpmnkit-edge-endpoint:hover {
149
- fill: var(--bpmnkit-accent, #1a56db);
153
+ fill: var(--bpmnkit-ds-accent, #a8503a);
150
154
  }
151
155
 
152
156
  /* Ghost polyline when dragging an edge endpoint */
153
157
  .bpmnkit-endpoint-ghost {
154
158
  fill: none;
155
- stroke: var(--bpmnkit-accent, #1a56db);
159
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
156
160
  stroke-width: 1.5;
157
161
  stroke-dasharray: 5 3;
158
162
  pointer-events: none;
@@ -187,9 +191,8 @@ export const EDITOR_CSS = `
187
191
  min-height: 16px;
188
192
  padding: 1px 3px;
189
193
  background: #fff;
190
- border: 1px solid var(--bpmnkit-accent, #1a56db);
191
- border-radius: 2px;
192
- font-family: system-ui, -apple-system, sans-serif;
194
+ border: 1px solid var(--bpmnkit-ds-accent, #a8503a);
195
+ font-family: var(--bpmnkit-ds-font-sans, system-ui, -apple-system, sans-serif);
193
196
  font-size: 11px;
194
197
  text-align: center;
195
198
  outline: none;
@@ -201,7 +204,7 @@ export const EDITOR_CSS = `
201
204
  /* Boundary event attach highlight */
202
205
  .bpmnkit-boundary-host {
203
206
  fill: none;
204
- stroke: var(--bpmnkit-accent, #1a56db);
207
+ stroke: var(--bpmnkit-ds-accent, #a8503a);
205
208
  stroke-width: 2;
206
209
  stroke-dasharray: 6 3;
207
210
  pointer-events: none;
@@ -217,7 +220,6 @@ export const EDITOR_CSS = `
217
220
  z-index: 100;
218
221
  max-width: calc(100% - 32px);
219
222
  padding: 6px 12px;
220
- border-radius: 6px;
221
223
  background: #fef3c7;
222
224
  border: 1px solid #f59e0b;
223
225
  color: #92400e;
@@ -254,6 +256,7 @@ export const EDITOR_CSS = `
254
256
  export function injectEditorStyles() {
255
257
  if (typeof document === "undefined")
256
258
  return;
259
+ injectChromeStyles();
257
260
  if (document.getElementById(EDITOR_STYLE_ID))
258
261
  return;
259
262
  const style = document.createElement("style");
@@ -262,63 +265,77 @@ export function injectEditorStyles() {
262
265
  document.head.appendChild(style);
263
266
  }
264
267
  /** CSS for the editor HUD — panels, buttons, dropdowns, group picker.
265
- * Dark theme is the default. Light theme is activated by setting
266
- * `data-bpmnkit-hud-theme="light"` on `document.body`. */
268
+ * Flat, square and hairline-ruled per the bpmnkit.com design system.
269
+ * The light `--canvas` ground is the default; `data-bpmnkit-hud-theme="dark"`
270
+ * (or `"neon"`) on `document.body` switches it. */
267
271
  export const HUD_CSS = `
268
- /* ── HUD base ────────────────────────────────────────────────────── */
272
+ /* ── HUD chrome ──────────────────────────────────────────────────────
273
+ The bpmnkit.com design system applied to the editor's chrome: flat
274
+ (no shadow, gradient or blur), square, and bounded by 1px hairlines.
275
+ The per-theme grounds it reads are declared once in chrome.ts.
276
+ The diagram itself is renderer-owned and untouched by this sheet.
277
+ ──────────────────────────────────────────────────────────────────── */
269
278
  .hud { position: absolute; z-index: 100; }
270
279
 
271
- /* ── Dark theme (default) ────────────────────────────────────────── */
280
+ /* A toolbar or palette is ONE bordered box with internal hairlines —
281
+ never individually bordered buttons and never gaps. */
272
282
  .panel {
273
- display: flex; align-items: center; gap: 2px; padding: 4px;
274
- background: var(--bpmnkit-panel-bg, rgba(13, 13, 22, 0.92));
275
- backdrop-filter: blur(10px);
276
- border: 1px solid var(--bpmnkit-panel-border, rgba(255, 255, 255, 0.08));
277
- border-radius: 10px;
278
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.35);
283
+ display: flex; align-items: stretch;
284
+ background: var(--bpmnkit-chrome-ground);
285
+ border: 1px solid var(--bpmnkit-chrome-line);
286
+ /* Stated, not inherited: hosts differ on whether they set a global reset. */
287
+ box-sizing: border-box;
288
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
279
289
  }
280
290
 
291
+
281
292
  /* ── HUD positions ───────────────────────────────────────────────── */
282
- #hud-top-center { top: 0; left: 50%; transform: translateX(-50%); height: 36px; }
283
- #hud-bottom-left { bottom: 10px; left: 10px; }
284
- #hud-bottom-center { bottom: 10px; left: 50%; transform: translateX(-50%); }
293
+ /* Sits in the tab bar's centre slot: a 28px group with 4px clear of the bar's
294
+ own rules top and bottom, so the two borders never sit on each other. */
295
+ #hud-top-center { top: 3px; left: 50%; transform: translateX(-50%); height: 30px; }
296
+ #hud-bottom-left { bottom: 16px; left: 16px; }
297
+ #hud-bottom-center { bottom: 16px; left: 50%; transform: translateX(-50%); }
285
298
  #ctx-toolbar { display: none; transform: translateX(-50%); }
286
299
  #cfg-toolbar { display: none; transform: translate(-50%, -100%); }
287
300
 
288
- /* ── Top center: strip floating card, merge into tab bar ─────────── */
289
- #hud-top-center.panel {
290
- background: transparent;
291
- backdrop-filter: none;
292
- border: none;
293
- border-radius: 0;
294
- box-shadow: none;
295
- padding: 0 2px;
296
- /* Pass clicks through the transparent background to the tab bar center slot. */
297
- pointer-events: none;
298
- }
299
- #hud-top-center.panel > * {
300
- pointer-events: auto;
301
- }
302
-
303
301
  /* ── Icon buttons ────────────────────────────────────────────────── */
304
302
  .hud-btn {
305
303
  display: flex; align-items: center; justify-content: center;
306
- width: 32px; height: 32px;
304
+ width: 34px; height: 28px;
307
305
  background: transparent;
308
- border: 1px solid transparent;
309
- border-radius: 6px;
310
- color: var(--bpmnkit-fg-muted, rgba(255,255,255,0.6));
306
+ border: none;
307
+ color: var(--bpmnkit-chrome-ink-2);
311
308
  cursor: pointer;
312
- transition: background 0.1s, color 0.1s, border-color 0.1s;
313
309
  padding: 0; flex-shrink: 0;
314
- }
315
- .hud-btn:hover { background: rgba(255,255,255,0.08); color: var(--bpmnkit-fg, #cdd6f4); }
316
- .hud-btn.active { background: rgba(255,255,255,0.12); color: #fff; border-color: rgba(255,255,255,0.2); }
317
- .hud-btn:disabled { opacity: 0.28; cursor: default; }
318
- .hud-btn:disabled:hover { background: transparent; color: rgba(255,255,255,0.6); }
310
+ font-family: inherit;
311
+ font-size: 13px;
312
+ /* Never let a Unicode glyph be promoted to a colour emoji. */
313
+ font-variant-emoji: text;
314
+ }
315
+ .hud-btn:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-ink); }
316
+ .hud-btn.active { background: var(--bpmnkit-chrome-accent); color: var(--bpmnkit-chrome-accent-fg); }
317
+ .hud-btn:disabled { opacity: 0.3; cursor: default; }
318
+ .hud-btn:disabled:hover { background: transparent; color: var(--bpmnkit-chrome-ink-2); }
319
319
  .hud-btn svg { width: 16px; height: 16px; pointer-events: none; }
320
320
 
321
- /* ── Group button: small chevron at bottom-right corner ──────────── */
321
+ /* The palette's targets are a touch larger than the toolbar's; the zoom
322
+ cluster shares the palette's height so the bottom strip reads as one row. */
323
+ #hud-bottom-center .hud-btn { width: 36px; height: 32px; }
324
+ #hud-bottom-left .hud-btn { height: 32px; }
325
+
326
+ /* One hairline BETWEEN adjacent items, never on a group's outer edge — so a
327
+ group's ends stay clean and an explicit .hud-sep never doubles up with one.
328
+ Declared after the button rules on purpose: they zero their own borders, and
329
+ the .panel-plus-id form outranks the id-scoped zoom buttons. */
330
+ .panel > * + *,
331
+ .panel #tool-groups > * + *,
332
+ .panel #zoom-expanded > * + * { border-left: 1px solid var(--bpmnkit-chrome-line-soft); }
333
+ /* The mobile collapse toggles are hidden siblings on desktop, so the item after
334
+ one would otherwise draw a hairline flush against the group's own border. */
335
+ #hud-top-center > #btn-tc-toggle + *,
336
+ #hud-bottom-center > #btn-bc-toggle + * { border-left: none; }
337
+
338
+ /* ── Group button: small marker at the bottom-right corner ───────── */
322
339
  .hud-btn[data-group] { position: relative; }
323
340
  .hud-btn[data-group]::after {
324
341
  content: '';
@@ -330,217 +347,135 @@ export const HUD_CSS = `
330
347
  }
331
348
 
332
349
  /* ── Tool groups container ───────────────────────────────────────── */
333
- #tool-groups { display: flex; align-items: center; gap: 2px; }
350
+ #tool-groups { display: flex; align-items: stretch; }
334
351
 
335
- /* ── Separator ───────────────────────────────────────────────────── */
336
- .hud-sep { width: 1px; height: 20px; background: var(--bpmnkit-panel-border, rgba(255, 255, 255, 0.08)); margin: 0 2px; flex-shrink: 0; }
352
+ /* ── Separator a structural rule, not a soft internal one ──────── */
353
+ .hud-sep {
354
+ width: 1px; flex: none; align-self: stretch;
355
+ background: var(--bpmnkit-chrome-line);
356
+ border-left: none;
357
+ }
358
+ .panel > .hud-sep + * { border-left: none; }
337
359
 
338
360
  /* ── Zoom widget ─────────────────────────────────────────────────── */
339
361
  #btn-zoom-current {
340
- padding: 0 10px; height: 32px;
341
- background: transparent; border: 1px solid transparent; border-radius: 7px;
342
- color: rgba(255,255,255,0.6); cursor: pointer;
343
- font-size: 12px; font-weight: 600;
344
- transition: background 0.1s, color 0.1s;
362
+ padding: 0 12px; height: 32px;
363
+ background: transparent; border: none;
364
+ color: var(--bpmnkit-chrome-ink-2); cursor: pointer;
365
+ font-family: inherit; font-size: 12px;
366
+ font-variant-numeric: tabular-nums;
345
367
  white-space: nowrap;
346
368
  }
347
- #btn-zoom-current:hover { background: rgba(255,255,255,0.08); color: #fff; }
369
+ #btn-zoom-current:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-ink); }
348
370
 
349
- #zoom-expanded { display: none; align-items: center; gap: 2px; }
371
+ #zoom-expanded { display: none; align-items: stretch; }
350
372
  #zoom-expanded.open { display: flex; }
351
373
 
352
374
  #btn-zoom-pct {
353
- padding: 0 8px; height: 30px;
354
- background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.1); border-radius: 6px;
355
- color: rgba(255,255,255,0.75); cursor: pointer;
356
- font-size: 12px; font-weight: 600;
357
- transition: background 0.1s, color 0.1s;
375
+ padding: 0 10px; height: 32px;
376
+ background: transparent; border: none;
377
+ color: var(--bpmnkit-chrome-ink-2); cursor: pointer;
378
+ font-family: inherit; font-size: 12px;
379
+ font-variant-numeric: tabular-nums;
358
380
  white-space: nowrap; min-width: 60px; text-align: center;
359
381
  }
360
- #btn-zoom-pct:hover { background: rgba(255,255,255,0.12); color: #fff; }
382
+ #btn-zoom-pct:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-ink); }
361
383
 
362
384
  /* ── Dropdown menus ──────────────────────────────────────────────── */
363
385
  .dropdown {
364
386
  position: absolute; display: none; flex-direction: column;
365
- gap: 1px; padding: 4px;
366
- background: var(--bpmnkit-panel-bg, rgba(13, 13, 22, 0.92));
367
- backdrop-filter: blur(12px);
368
- border: 1px solid var(--bpmnkit-panel-border, rgba(255, 255, 255, 0.08));
369
- border-radius: 9px;
370
- box-shadow: 0 6px 24px rgba(0,0,0,0.5);
371
- z-index: 200; min-width: 150px;
387
+ padding: 0;
388
+ background: var(--bpmnkit-chrome-ground);
389
+ border: 1px solid var(--bpmnkit-chrome-line);
390
+ z-index: 200; min-width: 170px;
391
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
372
392
  }
373
393
  .dropdown.open { display: flex; }
374
394
 
375
395
  .drop-item {
376
- display: flex; align-items: center; gap: 8px;
377
- padding: 7px 10px;
396
+ display: flex; align-items: center; gap: 9px;
397
+ padding: 8px 12px;
378
398
  border: none; background: transparent;
379
- color: rgba(255,255,255,0.75); cursor: pointer;
380
- border-radius: 6px; font-size: 12px; text-align: left; width: 100%;
381
- transition: background 0.1s;
399
+ color: var(--bpmnkit-chrome-ink-2); cursor: pointer;
400
+ font-family: inherit; font-size: 12px; text-align: left; width: 100%;
401
+ font-variant-emoji: text;
382
402
  }
383
- .drop-item:hover { background: rgba(255,255,255,0.08); color: #fff; }
384
- .drop-item .di-check { width: 14px; height: 14px; flex-shrink: 0; color: var(--bpmnkit-accent, #6b9df7); }
403
+ .drop-item:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-ink); }
404
+ .drop-item .di-check { width: 14px; height: 14px; flex-shrink: 0; color: var(--bpmnkit-chrome-accent); }
385
405
  .drop-item .di-icon { width: 14px; height: 14px; flex-shrink: 0; opacity: 0.7; }
386
406
  .drop-item svg { width: 14px; height: 14px; }
387
- .drop-sep { height: 1px; background: rgba(255,255,255,0.08); margin: 3px 0; }
407
+ .drop-sep { height: 1px; background: var(--bpmnkit-chrome-line-soft); }
388
408
  .drop-label {
389
- padding: 4px 10px 2px;
390
- font-size: 10px; font-weight: 600; letter-spacing: 0.06em;
391
- color: rgba(255,255,255,0.3); text-transform: uppercase;
409
+ padding: 8px 12px 6px;
410
+ font-size: var(--bpmnkit-ds-t-mono-micro, 10.5px); letter-spacing: 0.12em;
411
+ color: var(--bpmnkit-chrome-ink-4); text-transform: uppercase;
392
412
  }
393
413
 
394
414
  /* ── Group element picker ────────────────────────────────────────── */
395
415
  .group-picker {
396
416
  position: absolute;
397
- display: flex; flex-direction: row;
398
- gap: 2px; padding: 4px;
399
- background: var(--bpmnkit-panel-bg, rgba(13, 13, 22, 0.92));
400
- backdrop-filter: blur(12px);
401
- border: 1px solid var(--bpmnkit-panel-border, rgba(255, 255, 255, 0.08));
402
- border-radius: 9px;
403
- box-shadow: 0 6px 24px rgba(0,0,0,0.5);
417
+ display: flex; flex-direction: row; align-items: stretch;
418
+ background: var(--bpmnkit-chrome-ground);
419
+ border: 1px solid var(--bpmnkit-chrome-line);
404
420
  z-index: 300;
421
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
405
422
  }
406
423
  .group-picker-label {
407
- padding: 2px 6px 4px;
408
- font-size: 10px; font-weight: 600; letter-spacing: 0.05em;
409
- color: rgba(255,255,255,0.3); text-transform: uppercase;
410
- white-space: nowrap; align-self: center;
411
- border-right: 1px solid rgba(255,255,255,0.08);
412
- margin-right: 2px;
413
- }
414
-
415
- /* ── Light theme overrides ───────────────────────────────────────── */
416
- [data-bpmnkit-hud-theme="light"] .panel {
417
- background: var(--bpmnkit-panel-bg, rgba(255,255,255,0.92));
418
- border-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
419
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
424
+ display: flex; align-items: center;
425
+ padding: 0 10px;
426
+ font-size: var(--bpmnkit-ds-t-mono-micro, 10.5px); letter-spacing: 0.12em;
427
+ color: var(--bpmnkit-chrome-ink-4); text-transform: uppercase;
428
+ white-space: nowrap;
429
+ border-right: 1px solid var(--bpmnkit-chrome-line);
420
430
  }
421
- [data-bpmnkit-hud-theme="light"] #hud-top-center.panel {
422
- background: transparent;
423
- backdrop-filter: none;
424
- border: none;
425
- box-shadow: none;
426
- }
427
- [data-bpmnkit-hud-theme="light"] .hud-btn { color: var(--bpmnkit-fg-muted, #6666a0); }
428
- [data-bpmnkit-hud-theme="light"] .hud-btn:hover { background: rgba(0,0,0,0.06); color: var(--bpmnkit-fg, #1a1a2e); }
429
- [data-bpmnkit-hud-theme="light"] .hud-btn.active { background: rgba(0,0,0,0.08); color: var(--bpmnkit-fg, #1a1a2e); border-color: rgba(0,0,0,0.15); }
430
- [data-bpmnkit-hud-theme="light"] .hud-btn:disabled:hover { background: transparent; color: var(--bpmnkit-fg-muted, #6666a0); }
431
- [data-bpmnkit-hud-theme="light"] .hud-sep { background: var(--bpmnkit-panel-border, rgba(0,0,0,0.08)); }
432
- [data-bpmnkit-hud-theme="light"] #btn-zoom-current { color: var(--bpmnkit-fg-muted, #6666a0); }
433
- [data-bpmnkit-hud-theme="light"] #btn-zoom-current:hover { background: rgba(0,0,0,0.06); color: var(--bpmnkit-fg, #1a1a2e); }
434
- [data-bpmnkit-hud-theme="light"] #btn-zoom-pct {
435
- background: rgba(0,0,0,0.04); border-color: rgba(0,0,0,0.1); color: var(--bpmnkit-fg-muted, #6666a0);
436
- }
437
- [data-bpmnkit-hud-theme="light"] #btn-zoom-pct:hover { background: rgba(0,0,0,0.08); color: var(--bpmnkit-fg, #1a1a2e); }
438
- [data-bpmnkit-hud-theme="light"] .dropdown {
439
- background: var(--bpmnkit-panel-bg, rgba(255,255,255,0.92));
440
- border-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
441
- box-shadow: 0 6px 24px rgba(0,0,0,0.15);
442
- }
443
- [data-bpmnkit-hud-theme="light"] .drop-item { color: var(--bpmnkit-fg-muted, #6666a0); }
444
- [data-bpmnkit-hud-theme="light"] .drop-item:hover { background: rgba(0,0,0,0.05); color: var(--bpmnkit-fg, #1a1a2e); }
445
- [data-bpmnkit-hud-theme="light"] .drop-sep { background: var(--bpmnkit-border, #d0d0e8); }
446
- [data-bpmnkit-hud-theme="light"] .drop-label { color: rgba(0,0,0,0.35); }
447
- [data-bpmnkit-hud-theme="light"] .group-picker {
448
- background: var(--bpmnkit-panel-bg, rgba(255,255,255,0.92));
449
- border-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
450
- box-shadow: 0 6px 24px rgba(0,0,0,0.15);
451
- }
452
- [data-bpmnkit-hud-theme="light"] .group-picker-label {
453
- color: rgba(0,0,0,0.35);
454
- border-right-color: rgba(0,0,0,0.08);
455
- }
456
-
457
- /* ── Neon theme overrides ────────────────────────────────────────── */
458
- [data-bpmnkit-hud-theme="neon"] .panel {
459
- background: oklch(8% 0.03 270 / 0.96);
460
- border-color: oklch(65% 0.28 280 / 0.2);
461
- box-shadow: 0 2px 16px oklch(65% 0.28 280 / 0.12), 0 0 0 1px oklch(65% 0.28 280 / 0.1);
462
- }
463
- [data-bpmnkit-hud-theme="neon"] #hud-top-center.panel {
464
- background: transparent; backdrop-filter: none; border: none; box-shadow: none;
465
- }
466
- [data-bpmnkit-hud-theme="neon"] .hud-btn { color: oklch(65% 0.1 280); }
467
- [data-bpmnkit-hud-theme="neon"] .hud-btn:hover { background: oklch(65% 0.28 280 / 0.12); color: oklch(88% 0.02 270); }
468
- [data-bpmnkit-hud-theme="neon"] .hud-btn.active { background: oklch(65% 0.28 280 / 0.18); color: oklch(73% 0.16 280); border-color: oklch(65% 0.28 280 / 0.35); }
469
- [data-bpmnkit-hud-theme="neon"] .hud-sep { background: oklch(65% 0.28 280 / 0.15); }
470
- [data-bpmnkit-hud-theme="neon"] .dropdown {
471
- background: oklch(8% 0.03 270 / 0.97);
472
- border-color: oklch(65% 0.28 280 / 0.2);
473
- box-shadow: 0 6px 24px oklch(0% 0 0 / 0.6), 0 0 0 1px oklch(65% 0.28 280 / 0.1);
474
- }
475
- [data-bpmnkit-hud-theme="neon"] .drop-item { color: oklch(65% 0.1 280); }
476
- [data-bpmnkit-hud-theme="neon"] .drop-item:hover { background: oklch(65% 0.28 280 / 0.1); color: oklch(88% 0.02 270); }
477
- [data-bpmnkit-hud-theme="neon"] .drop-sep { background: oklch(65% 0.28 280 / 0.15); }
478
- [data-bpmnkit-hud-theme="neon"] .drop-label { color: oklch(50% 0.06 280); }
479
- [data-bpmnkit-hud-theme="neon"] .group-picker {
480
- background: oklch(8% 0.03 270 / 0.97);
481
- border-color: oklch(65% 0.28 280 / 0.2);
482
- box-shadow: 0 6px 24px oklch(0% 0 0 / 0.6);
483
- }
484
- [data-bpmnkit-hud-theme="neon"] .group-picker-label { color: oklch(50% 0.06 280); border-right-color: oklch(65% 0.28 280 / 0.15); }
485
431
 
486
432
  /* ── Reference link button (wider text variant of hud-btn) ──────── */
487
433
  .ref-link-btn {
488
- height: 32px; padding: 0 8px;
434
+ height: 28px; padding: 0 10px;
489
435
  background: transparent;
490
- border: 1px solid transparent;
491
- border-radius: 6px;
492
- color: rgba(255, 255, 255, 0.6);
436
+ border: none;
437
+ color: var(--bpmnkit-chrome-ink-2);
493
438
  cursor: pointer;
494
- font-size: 12px;
439
+ font-family: inherit; font-size: 12px;
495
440
  max-width: 160px;
496
441
  overflow: hidden;
497
442
  text-overflow: ellipsis;
498
443
  white-space: nowrap;
499
444
  flex-shrink: 0;
500
- transition: background 0.1s, color 0.1s;
501
- align-self: center;
502
445
  }
503
- .ref-link-btn:hover { background: rgba(255,255,255,0.08); color: #fff; }
504
- [data-bpmnkit-hud-theme="light"] .ref-link-btn { color: var(--bpmnkit-fg-muted, #6666a0); }
505
- [data-bpmnkit-hud-theme="light"] .ref-link-btn:hover { background: rgba(0,0,0,0.06); color: var(--bpmnkit-fg, #1a1a2e); }
446
+ .ref-link-btn:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-ink); }
506
447
 
507
- /* ── Color swatches ──────────────────────────────────────────────── */
508
- .bpmnkit-color-swatches { display: flex; gap: 4px; padding: 2px 4px; align-items: center; }
448
+ /* ── Colour swatches element fills, exempt from the one-accent rule ── */
449
+ .bpmnkit-color-swatches { display: flex; gap: 4px; padding: 0 8px; align-items: center; }
509
450
  .bpmnkit-color-swatch {
510
- width: 16px; height: 16px; border-radius: 50%; cursor: pointer;
511
- border: 2px solid transparent; flex-shrink: 0;
512
- transition: transform 0.1s;
451
+ width: 16px; height: 16px; cursor: pointer;
452
+ border: 1px solid var(--bpmnkit-chrome-line); flex-shrink: 0;
513
453
  padding: 0;
514
454
  }
515
- .bpmnkit-color-swatch:hover { transform: scale(1.2); }
516
- .bpmnkit-color-swatch.active { border-color: rgba(255,255,255,0.8); }
517
- [data-bpmnkit-hud-theme="light"] .bpmnkit-color-swatch.active { border-color: rgba(0,0,0,0.5); }
455
+ .bpmnkit-color-swatch.active { border-color: var(--bpmnkit-chrome-accent); }
518
456
  .bpmnkit-color-swatch--default {
519
- background: transparent; border-color: rgba(255,255,255,0.25);
457
+ background: transparent;
520
458
  position: relative; overflow: hidden;
521
459
  }
522
- [data-bpmnkit-hud-theme="light"] .bpmnkit-color-swatch--default { border-color: rgba(0,0,0,0.2); }
523
460
  .bpmnkit-color-swatch--default::after {
524
461
  content: ''; position: absolute;
525
- top: 1px; left: 50%; transform: translateX(-50%) rotate(-45deg);
526
- width: 1.5px; height: calc(100% - 2px);
527
- background: rgba(200,50,50,0.65); border-radius: 1px;
462
+ top: 0; left: 50%; transform: translateX(-50%) rotate(-45deg);
463
+ width: 1px; height: 100%;
464
+ background: currentColor; color: var(--bpmnkit-chrome-ink-4);
528
465
  }
529
466
 
530
- /* ── Contextual Ask-AI button (tinted blue) ──────────────────────── */
531
- .ctx-ask-ai-btn { color: var(--bpmnkit-accent-bright, #89b4fa); opacity: 0.8; }
532
- .ctx-ask-ai-btn:hover { background: rgba(76, 142, 247, 0.15); color: #a8c8ff; opacity: 1; }
533
- [data-bpmnkit-hud-theme="light"] .ctx-ask-ai-btn { color: var(--bpmnkit-accent, #1a56db); opacity: 0.7; }
534
- [data-bpmnkit-hud-theme="light"] .ctx-ask-ai-btn:hover { background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); color: var(--bpmnkit-accent, #1a56db); opacity: 1; }
467
+ /* ── Contextual Ask-AI button ────────────────────────────────────── */
468
+ .ctx-ask-ai-btn { color: var(--bpmnkit-chrome-accent); }
469
+ .ctx-ask-ai-btn:hover { background: var(--bpmnkit-chrome-hover); color: var(--bpmnkit-chrome-accent); }
535
470
 
536
471
  /* ── New-diagram onboarding overlay ──────────────────────────────── */
537
472
  #bpmnkit-empty-state {
538
473
  position: absolute; z-index: 50;
539
474
  top: 36px; left: 0; bottom: 0; right: 0;
540
475
  display: flex; align-items: center; justify-content: center;
541
- background: var(--bpmnkit-bg, #0d0d16);
476
+ background: var(--bpmnkit-ds-canvas, #fbfbfc);
542
477
  }
543
- [data-bpmnkit-hud-theme="light"] #bpmnkit-empty-state { background: var(--bpmnkit-bg, #f4f4f8); }
478
+ [data-bpmnkit-hud-theme="dark"] #bpmnkit-empty-state { background: var(--bpmnkit-bg, #0d0d16); }
544
479
  [data-bpmnkit-hud-theme="neon"] #bpmnkit-empty-state { background: oklch(5% 0.025 270); }
545
480
 
546
481
  .bpmnkit-onboard-inner {
@@ -549,93 +484,60 @@ export const HUD_CSS = `
549
484
  }
550
485
  .bpmnkit-onboard-header { text-align: center; }
551
486
  .bpmnkit-onboard-title {
552
- color: rgba(255,255,255,0.82); font-size: 16px; font-weight: 600; margin: 0 0 7px;
487
+ color: var(--bpmnkit-chrome-ink); font-size: 17px; font-weight: 700;
488
+ letter-spacing: -0.025em; margin: 0 0 8px;
553
489
  }
554
490
  .bpmnkit-onboard-sub {
555
- color: rgba(255,255,255,0.36); font-size: 13px; margin: 0;
491
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
492
+ font-size: var(--bpmnkit-ds-t-mono-label, 11.5px); letter-spacing: 0.08em;
493
+ color: var(--bpmnkit-chrome-ink-4); margin: 0;
556
494
  }
557
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-title { color: rgba(0,0,0,0.72); }
558
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-sub { color: rgba(0,0,0,0.38); }
559
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-title { color: oklch(88% 0.02 270); }
560
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-sub { color: oklch(50% 0.06 280); }
561
495
 
562
- .bpmnkit-onboard-actions { display: flex; gap: 10px; width: 100%; }
496
+ /* One bordered box subdivided by hairlines not gapped cards. */
497
+ .bpmnkit-onboard-actions {
498
+ display: flex; width: 100%;
499
+ border: 1px solid var(--bpmnkit-chrome-line); background: var(--bpmnkit-chrome-ground);
500
+ }
563
501
 
564
502
  .bpmnkit-onboard-btn {
565
503
  flex: 1; display: flex; flex-direction: column; align-items: flex-start;
566
- gap: 10px; padding: 16px 14px;
567
- background: rgba(255,255,255,0.04);
568
- border: 1px solid rgba(255,255,255,0.07);
569
- border-radius: 10px; cursor: pointer; text-align: left;
570
- color: inherit; transition: background 0.15s, border-color 0.15s;
571
- }
572
- .bpmnkit-onboard-btn:hover {
573
- background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.14);
574
- }
575
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn {
576
- background: rgba(0,0,0,0.03); border-color: rgba(0,0,0,0.08);
577
- }
578
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn:hover {
579
- background: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.14);
580
- }
581
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn {
582
- background: oklch(65% 0.28 280 / 0.05); border-color: oklch(65% 0.28 280 / 0.15);
583
- }
584
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn:hover {
585
- background: oklch(65% 0.28 280 / 0.1); border-color: oklch(65% 0.28 280 / 0.28);
504
+ gap: 12px; padding: 18px 16px;
505
+ background: transparent;
506
+ border: none; border-right: 1px solid var(--bpmnkit-chrome-line-soft);
507
+ cursor: pointer; text-align: left;
508
+ color: inherit;
586
509
  }
510
+ .bpmnkit-onboard-btn:last-child { border-right: none; }
511
+ .bpmnkit-onboard-btn:hover { background: var(--bpmnkit-chrome-hover); }
587
512
 
588
513
  .bpmnkit-onboard-btn-icon {
589
514
  display: flex; align-items: center; justify-content: center;
590
- width: 32px; height: 32px; border-radius: 8px;
591
- background: rgba(255,255,255,0.08); color: rgba(255,255,255,0.65); flex-shrink: 0;
515
+ width: 32px; height: 32px;
516
+ border: 1px solid var(--bpmnkit-chrome-line); color: var(--bpmnkit-chrome-ink-2); flex-shrink: 0;
592
517
  }
593
518
  .bpmnkit-onboard-btn-icon svg { width: 16px; height: 16px; pointer-events: none; }
594
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn-icon {
595
- background: rgba(0,0,0,0.07); color: rgba(0,0,0,0.55);
596
- }
597
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn-icon {
598
- background: oklch(65% 0.28 280 / 0.1); color: oklch(73% 0.16 280);
599
- }
519
+ .bpmnkit-onboard-btn--ai .bpmnkit-onboard-btn-icon { color: var(--bpmnkit-chrome-accent); border-color: var(--bpmnkit-chrome-accent); }
600
520
 
601
- .bpmnkit-onboard-btn--ai .bpmnkit-onboard-btn-icon {
602
- background: rgba(76,142,247,0.18); color: #8ab8ff;
603
- }
604
- .bpmnkit-onboard-btn--ai:hover { border-color: rgba(76,142,247,0.3); }
605
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn--ai .bpmnkit-onboard-btn-icon {
606
- background: rgba(26,86,219,0.1); color: #1a56db;
607
- }
608
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn--ai:hover { border-color: rgba(26,86,219,0.28); }
609
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn--ai .bpmnkit-onboard-btn-icon {
610
- background: oklch(72% 0.18 185 / 0.15); color: oklch(72% 0.18 185);
611
- }
612
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn--ai:hover { border-color: oklch(72% 0.18 185 / 0.35); }
613
-
614
- .bpmnkit-onboard-btn-label { display: flex; flex-direction: column; gap: 3px; }
521
+ .bpmnkit-onboard-btn-label { display: flex; flex-direction: column; gap: 4px; }
615
522
  .bpmnkit-onboard-btn-title {
616
- font-size: 13px; font-weight: 600; color: rgba(255,255,255,0.8); margin: 0;
523
+ font-size: 14px; font-weight: 700; color: var(--bpmnkit-chrome-ink); margin: 0;
617
524
  }
618
525
  .bpmnkit-onboard-btn-desc {
619
- font-size: 11px; color: rgba(255,255,255,0.32); margin: 0; line-height: 1.4;
526
+ font-size: 12px; color: var(--bpmnkit-chrome-ink-4); margin: 0; line-height: 1.5;
620
527
  }
621
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn-title { color: rgba(0,0,0,0.72); }
622
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-btn-desc { color: rgba(0,0,0,0.36); }
623
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn-title { color: oklch(82% 0.04 270); }
624
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-btn-desc { color: oklch(50% 0.06 280); }
625
528
 
626
- .bpmnkit-onboard-links { display: flex; gap: 16px; flex-wrap: wrap; justify-content: center; }
529
+ .bpmnkit-onboard-links { display: flex; gap: 18px; flex-wrap: wrap; justify-content: center; }
627
530
  .bpmnkit-onboard-links a {
628
- color: rgba(255,255,255,0.22); font-size: 11px; text-decoration: none; transition: color 0.1s;
531
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
532
+ color: var(--bpmnkit-chrome-ink-4); font-size: var(--bpmnkit-ds-t-mono-micro, 10.5px);
533
+ letter-spacing: 0.12em; text-transform: uppercase; text-decoration: none;
629
534
  }
630
- .bpmnkit-onboard-links a:hover { color: rgba(255,255,255,0.55); }
631
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-links a { color: rgba(0,0,0,0.25); }
632
- [data-bpmnkit-hud-theme="light"] .bpmnkit-onboard-links a:hover { color: rgba(0,0,0,0.6); }
633
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-links a { color: oklch(45% 0.06 280); }
634
- [data-bpmnkit-hud-theme="neon"] .bpmnkit-onboard-links a:hover { color: oklch(65% 0.1 280); }
535
+ .bpmnkit-onboard-links a:hover { color: var(--bpmnkit-chrome-accent); }
635
536
 
636
537
  @media (max-width: 520px) {
637
538
  .bpmnkit-onboard-actions { flex-direction: column; }
638
- .bpmnkit-onboard-btn { flex-direction: row; align-items: center; gap: 12px; }
539
+ .bpmnkit-onboard-btn { flex-direction: row; align-items: center; gap: 12px; border-right: none; border-bottom: 1px solid var(--bpmnkit-chrome-line-soft); }
540
+ .bpmnkit-onboard-btn:last-child { border-bottom: none; }
639
541
  .bpmnkit-onboard-btn-label { flex-direction: column; }
640
542
  }
641
543
 
@@ -648,130 +550,103 @@ export const HUD_CSS = `
648
550
  #hud-top-center::-webkit-scrollbar { display: none; }
649
551
 
650
552
  /* ── Push HUD toolbar down when simulation banner is visible ─────── */
651
- .bpmnkit-sim-active #hud-top-center { top: 36px; }
553
+ .bpmnkit-sim-active #hud-top-center { top: 39px; }
652
554
 
653
555
  /* ── Simulation active banner ────────────────────────────────────── */
654
556
  #bpmnkit-sim-banner {
655
557
  position: absolute;
656
558
  top: 0; left: 0; right: 0;
657
559
  z-index: 150;
658
- display: flex; align-items: center; justify-content: center; gap: 12px;
659
- padding: 7px 16px;
660
- background: rgba(217, 119, 6, 0.18);
661
- border-bottom: 1px solid rgba(217, 119, 6, 0.35);
662
- backdrop-filter: blur(6px);
663
- font-size: 12px; font-weight: 500;
664
- color: rgba(255, 193, 87, 0.95);
560
+ display: flex; align-items: center; justify-content: center; gap: 14px;
561
+ padding: 8px 16px;
562
+ background: var(--bpmnkit-chrome-ground);
563
+ border-bottom: 1px solid var(--bpmnkit-chrome-accent);
564
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
565
+ font-size: var(--bpmnkit-ds-t-mono-label, 11.5px); letter-spacing: 0.08em;
566
+ text-transform: uppercase;
567
+ color: var(--bpmnkit-chrome-accent);
665
568
  pointer-events: auto;
666
569
  }
667
570
  #bpmnkit-sim-banner.hidden { display: none; }
668
571
  #bpmnkit-sim-banner-exit {
669
- padding: 3px 10px; border-radius: 5px;
670
- background: rgba(217, 119, 6, 0.22);
671
- border: 1px solid rgba(217, 119, 6, 0.4);
672
- color: inherit; cursor: pointer; font-size: 11px; font-weight: 600;
673
- transition: background 0.1s;
674
- }
675
- #bpmnkit-sim-banner-exit:hover { background: rgba(217, 119, 6, 0.35); }
676
- [data-bpmnkit-hud-theme="light"] #bpmnkit-sim-banner {
677
- background: rgba(254, 243, 199, 0.95);
678
- border-bottom-color: rgba(217, 119, 6, 0.25);
679
- color: #92400e;
680
- }
681
- [data-bpmnkit-hud-theme="light"] #bpmnkit-sim-banner-exit {
682
- background: rgba(217, 119, 6, 0.1); border-color: rgba(217, 119, 6, 0.3);
572
+ padding: 4px 12px;
573
+ background: transparent;
574
+ border: 1px solid var(--bpmnkit-chrome-accent);
575
+ color: inherit; cursor: pointer;
576
+ font-family: inherit; font-size: inherit; letter-spacing: inherit;
683
577
  }
578
+ #bpmnkit-sim-banner-exit:hover { background: var(--bpmnkit-chrome-accent); color: var(--bpmnkit-chrome-accent-fg); }
684
579
 
685
580
  /* ── Context menu ────────────────────────────────────────────────── */
686
- #bpmnkit-ctx-menu { min-width: 160px; }
581
+ #bpmnkit-ctx-menu { min-width: 170px; }
687
582
 
688
583
  /* ── Element search bar ──────────────────────────────────────────── */
689
584
  #bpmnkit-search-bar {
690
585
  position: absolute;
691
586
  top: 44px; left: 50%; transform: translateX(-50%);
692
587
  z-index: 120;
693
- display: flex; align-items: center; gap: 6px;
694
- padding: 5px 10px;
695
- background: rgba(22, 22, 30, 0.92);
696
- backdrop-filter: blur(10px);
697
- border: 1px solid rgba(255,255,255,0.15);
698
- border-radius: 8px;
699
- box-shadow: 0 4px 16px rgba(0,0,0,0.4);
588
+ display: flex; align-items: center; gap: 10px;
589
+ padding: 6px 12px;
590
+ background: var(--bpmnkit-chrome-ground);
591
+ border: 1px solid var(--bpmnkit-chrome-line);
592
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
700
593
  }
701
594
  #bpmnkit-search-bar.hidden { display: none; }
702
595
  #bpmnkit-search-input {
703
- width: 220px; padding: 3px 6px;
596
+ width: 220px; padding: 2px 0;
704
597
  background: transparent; border: none;
705
- color: #fff; font-size: 13px; outline: none;
598
+ color: var(--bpmnkit-chrome-ink); font-family: inherit; font-size: 12.5px; outline: none;
706
599
  }
707
- #bpmnkit-search-input::placeholder { color: rgba(255,255,255,0.35); }
600
+ #bpmnkit-search-input::placeholder { color: var(--bpmnkit-chrome-ink-4); }
708
601
  #bpmnkit-search-count {
709
- font-size: 11px; color: rgba(255,255,255,0.45); white-space: nowrap; min-width: 40px;
602
+ font-size: var(--bpmnkit-ds-t-mono-micro, 10.5px); letter-spacing: 0.12em;
603
+ color: var(--bpmnkit-chrome-ink-4); white-space: nowrap; min-width: 44px;
710
604
  }
711
605
  #bpmnkit-search-close {
712
- background: transparent; border: none; color: rgba(255,255,255,0.4);
713
- cursor: pointer; font-size: 16px; line-height: 1; padding: 0 2px;
714
- }
715
- #bpmnkit-search-close:hover { color: #fff; }
716
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-bar {
717
- background: rgba(252, 252, 254, 0.96);
718
- border-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
719
- box-shadow: 0 4px 16px rgba(0,0,0,0.12);
606
+ background: transparent; border: none; color: var(--bpmnkit-chrome-ink-4);
607
+ cursor: pointer; font-family: inherit; font-size: 14px; line-height: 1; padding: 0 2px;
608
+ font-variant-emoji: text;
720
609
  }
721
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-input { color: rgba(0,0,0,0.9); }
722
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-input::placeholder { color: rgba(0,0,0,0.3); }
723
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-count { color: rgba(0,0,0,0.4); }
724
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-close { color: rgba(0,0,0,0.35); }
725
- [data-bpmnkit-hud-theme="light"] #bpmnkit-search-close:hover { color: rgba(0,0,0,0.8); }
610
+ #bpmnkit-search-close:hover { color: var(--bpmnkit-chrome-ink); }
726
611
 
727
612
  /* ── Keyboard shortcuts modal ────────────────────────────────────── */
728
613
  #bpmnkit-shortcuts-modal {
729
614
  position: absolute; inset: 0; z-index: 200;
730
615
  display: flex; align-items: center; justify-content: center;
731
- background: rgba(0,0,0,0.55);
732
- backdrop-filter: blur(4px);
616
+ background: color-mix(in srgb, var(--bpmnkit-ds-dark, #14161a) 55%, transparent);
733
617
  }
734
618
  #bpmnkit-shortcuts-modal.hidden { display: none; }
735
619
  #bpmnkit-shortcuts-inner {
736
- background: var(--bpmnkit-surface-2, #1e1e2e);
737
- border: 1px solid var(--bpmnkit-panel-border, rgba(255,255,255,0.08));
738
- border-radius: 12px;
739
- box-shadow: 0 8px 32px rgba(0,0,0,0.5);
740
- padding: 20px 24px;
620
+ background: var(--bpmnkit-chrome-ground);
621
+ border: 1px solid var(--bpmnkit-chrome-line);
622
+ padding: 24px 26px;
741
623
  min-width: 320px; max-width: 480px;
742
- color: rgba(255,255,255,0.85);
624
+ color: var(--bpmnkit-chrome-ink-2);
743
625
  }
744
- [data-bpmnkit-hud-theme="light"] #bpmnkit-shortcuts-inner {
745
- background: var(--bpmnkit-surface, #fff);
746
- border-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
747
- box-shadow: 0 8px 32px rgba(0,0,0,0.15);
748
- color: rgba(0,0,0,0.8);
626
+ #bpmnkit-shortcuts-inner h3 {
627
+ margin: 0 0 16px;
628
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
629
+ font-size: var(--bpmnkit-ds-t-mono-micro, 10.5px); letter-spacing: 0.12em;
630
+ text-transform: uppercase; font-weight: 400; color: var(--bpmnkit-chrome-ink-4);
749
631
  }
750
- #bpmnkit-shortcuts-inner h3 { margin: 0 0 14px; font-size: 14px; font-weight: 700; }
751
632
  .bpmnkit-sc-row {
752
- display: flex; justify-content: space-between; align-items: center;
753
- padding: 5px 0; border-bottom: 1px solid rgba(255,255,255,0.06); font-size: 12px;
633
+ display: flex; justify-content: space-between; align-items: center; gap: 24px;
634
+ padding: 7px 0; border-bottom: 1px solid var(--bpmnkit-chrome-line-soft); font-size: 12.5px;
754
635
  }
755
- [data-bpmnkit-hud-theme="light"] .bpmnkit-sc-row { border-bottom-color: rgba(0,0,0,0.06); }
756
636
  .bpmnkit-sc-row:last-child { border-bottom: none; }
757
637
  .bpmnkit-sc-key {
758
- font-family: var(--font-mono, monospace);
759
- background: rgba(255,255,255,0.08); border: 1px solid rgba(255,255,255,0.12);
760
- border-radius: 4px; padding: 1px 6px; font-size: 11px;
761
- }
762
- [data-bpmnkit-hud-theme="light"] .bpmnkit-sc-key {
763
- background: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.12); color: rgba(0,0,0,0.7);
638
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace);
639
+ border: 1px solid var(--bpmnkit-chrome-line);
640
+ padding: 1px 7px; font-size: 11px; color: var(--bpmnkit-chrome-ink);
641
+ white-space: nowrap;
764
642
  }
765
643
  #bpmnkit-shortcuts-close {
766
- display: block; margin: 14px auto 0; padding: 6px 20px;
767
- background: var(--bpmnkit-surface-2, rgba(255,255,255,0.08)); border: 1px solid var(--bpmnkit-panel-border, rgba(255,255,255,0.08));
768
- border-radius: 6px; color: rgba(255,255,255,0.7); cursor: pointer; font-size: 12px;
769
- transition: background 0.1s;
770
- }
771
- #bpmnkit-shortcuts-close:hover { background: rgba(255,255,255,0.14); color: #fff; }
772
- [data-bpmnkit-hud-theme="light"] #bpmnkit-shortcuts-close {
773
- background: var(--bpmnkit-surface-2, rgba(0,0,0,0.05)); border-color: var(--bpmnkit-border, #d0d0e8); color: rgba(0,0,0,0.6);
644
+ display: block; margin: 18px auto 0; padding: 7px 20px;
645
+ background: var(--bpmnkit-ds-accent, #a8503a); border: none;
646
+ color: #fff; cursor: pointer;
647
+ font-family: var(--bpmnkit-ds-font-mono, ui-monospace, monospace); font-size: 12px;
774
648
  }
649
+ #bpmnkit-shortcuts-close:hover { background: var(--bpmnkit-ds-accent-hover, #8f412e); }
775
650
 
776
651
  /* ── Mobile: collapsible center toolbars ─────────────────────────── */
777
652
  #btn-bc-toggle, #btn-tc-toggle { display: none; }
@@ -781,21 +656,19 @@ export const HUD_CSS = `
781
656
  #hud-bottom-left { display: none !important; }
782
657
 
783
658
  #hud-bottom-center {
784
- left: 10px;
659
+ left: 16px;
785
660
  transform: none;
786
661
  }
787
662
 
788
663
  #btn-bc-toggle { display: flex; }
664
+ #hud-bottom-center > #btn-bc-toggle + * { border-left: 1px solid var(--bpmnkit-chrome-line-soft); }
789
665
 
790
666
  /* Collapsed: hide all children except the toggle button */
791
667
  #hud-bottom-center:not(.expanded) > *:not(#btn-bc-toggle) { display: none; }
792
668
 
793
669
  /* Expanded: highlight the toggle button as a close affordance */
794
670
  #hud-bottom-center.expanded #btn-bc-toggle {
795
- background: rgba(255,255,255,0.08); color: #fff;
796
- }
797
- [data-bpmnkit-hud-theme="light"] #hud-bottom-center.expanded #btn-bc-toggle {
798
- background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.9);
671
+ background: var(--bpmnkit-chrome-accent); color: var(--bpmnkit-chrome-accent-fg);
799
672
  }
800
673
  }
801
674
 
@@ -806,6 +679,7 @@ export const HUD_CSS = `
806
679
  export function injectHudStyles() {
807
680
  if (typeof document === "undefined")
808
681
  return;
682
+ injectChromeStyles();
809
683
  if (document.getElementById(HUD_STYLE_ID))
810
684
  return;
811
685
  const style = document.createElement("style");