@bpmn-nova/studio 0.3.0-preview

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.
@@ -0,0 +1,1334 @@
1
+ /* @bpmn-nova/theme */
2
+ [data-nova-theme] {
3
+ accent-color: var(--nova-color-primary);
4
+ }
5
+
6
+ [data-nova-theme="light"] {
7
+ --nova-color-canvas: #f8f9fb;
8
+ --nova-color-surface: #ffffff;
9
+ --nova-color-surface-raised: #ffffff;
10
+ --nova-color-surface-subtle: #f7f8fb;
11
+ --nova-color-surface-muted: #f0f2f7;
12
+ --nova-color-text: #1f2430;
13
+ --nova-color-text-secondary: #596477;
14
+ --nova-color-text-muted: #7d8798;
15
+ --nova-color-text-inverse: #ffffff;
16
+ --nova-color-border: #e1e5ec;
17
+ --nova-color-border-strong: #cbd2dd;
18
+ --nova-color-divider: #e9ecf2;
19
+ --nova-color-primary: #635bff;
20
+ --nova-color-primary-hover: #5149e8;
21
+ --nova-color-primary-soft: #f0efff;
22
+ --nova-color-focus-ring: rgba(82, 92, 214, .52);
23
+ --nova-color-edge: #9aa8bb;
24
+ --nova-color-grid-dot: rgba(128, 139, 157, .22);
25
+ --nova-color-backdrop: rgba(20, 26, 39, .38);
26
+ --nova-shadow-sm: 0 1px 3px rgba(31, 40, 65, .10);
27
+ --nova-shadow-md: 0 8px 24px rgba(31, 40, 65, .13);
28
+ --nova-shadow-lg: 0 18px 52px rgba(22, 29, 48, .20);
29
+ --nova-tone-primary-foreground: #5149e8;
30
+ --nova-tone-primary-background: #f0efff;
31
+ --nova-tone-primary-border: #c9c6ff;
32
+ --nova-tone-primary-strong: #635bff;
33
+ --nova-tone-success-foreground: #19875b;
34
+ --nova-tone-success-background: #eaf8f1;
35
+ --nova-tone-success-border: #bde6d3;
36
+ --nova-tone-success-strong: #22a06b;
37
+ --nova-tone-danger-foreground: #c93f4b;
38
+ --nova-tone-danger-background: #fff0f1;
39
+ --nova-tone-danger-border: #f2b9bf;
40
+ --nova-tone-danger-strong: #df4b55;
41
+ --nova-tone-warning-foreground: #a36b13;
42
+ --nova-tone-warning-background: #fff6e8;
43
+ --nova-tone-warning-border: #ecd2a4;
44
+ --nova-tone-warning-strong: #c48218;
45
+ --nova-tone-info-foreground: #3665c5;
46
+ --nova-tone-info-background: #eef3ff;
47
+ --nova-tone-info-border: #c7d5f5;
48
+ --nova-tone-info-strong: #527bd4;
49
+ --nova-tone-neutral-foreground: #667186;
50
+ --nova-tone-neutral-background: #f1f3f6;
51
+ --nova-tone-neutral-border: #dce1e8;
52
+ --nova-tone-neutral-strong: #8791a3;
53
+ --nova-tone-user-task-foreground: #c77b12;
54
+ --nova-tone-user-task-background: #fff4e5;
55
+ --nova-tone-user-task-border: #efd4ac;
56
+ --nova-tone-user-task-strong: #efa63a;
57
+ --nova-tone-service-task-foreground: #2f7ec4;
58
+ --nova-tone-service-task-background: #edf6ff;
59
+ --nova-tone-service-task-border: #c7def2;
60
+ --nova-tone-service-task-strong: #4e9ce7;
61
+ --nova-tone-script-task-foreground: #7351c6;
62
+ --nova-tone-script-task-background: #f2efff;
63
+ --nova-tone-script-task-border: #d5caef;
64
+ --nova-tone-script-task-strong: #9268dc;
65
+ --nova-tone-rule-task-foreground: #8255cc;
66
+ --nova-tone-rule-task-background: #f4efff;
67
+ --nova-tone-rule-task-border: #d9c9f0;
68
+ --nova-tone-rule-task-strong: #9268dc;
69
+ --nova-tone-message-task-foreground: #238b8e;
70
+ --nova-tone-message-task-background: #eaf9f8;
71
+ --nova-tone-message-task-border: #bfe2e0;
72
+ --nova-tone-message-task-strong: #36a6a8;
73
+ --nova-tone-manual-task-foreground: #c46c56;
74
+ --nova-tone-manual-task-background: #fff0ec;
75
+ --nova-tone-manual-task-border: #edc7bc;
76
+ --nova-tone-manual-task-strong: #d67c67;
77
+ }
78
+
79
+ [data-nova-theme="dark"] {
80
+ --nova-color-canvas: #10131a;
81
+ --nova-color-surface: #171b24;
82
+ --nova-color-surface-raised: #202633;
83
+ --nova-color-surface-subtle: #141821;
84
+ --nova-color-surface-muted: #252b38;
85
+ --nova-color-text: #edf1f7;
86
+ --nova-color-text-secondary: #bdc6d5;
87
+ --nova-color-text-muted: #8f9aad;
88
+ --nova-color-text-inverse: #11151d;
89
+ --nova-color-border: #303847;
90
+ --nova-color-border-strong: #465164;
91
+ --nova-color-divider: #29313f;
92
+ --nova-color-primary: #918cff;
93
+ --nova-color-primary-hover: #aaa6ff;
94
+ --nova-color-primary-soft: #2a2852;
95
+ --nova-color-focus-ring: rgba(150, 145, 255, .72);
96
+ --nova-color-edge: #657188;
97
+ --nova-color-grid-dot: rgba(154, 167, 188, .18);
98
+ --nova-color-backdrop: rgba(2, 5, 10, .68);
99
+ --nova-shadow-sm: 0 1px 3px rgba(0, 0, 0, .28);
100
+ --nova-shadow-md: 0 10px 30px rgba(0, 0, 0, .34);
101
+ --nova-shadow-lg: 0 22px 64px rgba(0, 0, 0, .48);
102
+ --nova-tone-primary-foreground: #b6b3ff;
103
+ --nova-tone-primary-background: #2a2852;
104
+ --nova-tone-primary-border: #555097;
105
+ --nova-tone-primary-strong: #918cff;
106
+ --nova-tone-success-foreground: #71d6ab;
107
+ --nova-tone-success-background: #17382d;
108
+ --nova-tone-success-border: #2b6550;
109
+ --nova-tone-success-strong: #42bd88;
110
+ --nova-tone-danger-foreground: #ff9aa3;
111
+ --nova-tone-danger-background: #42232a;
112
+ --nova-tone-danger-border: #7a3b45;
113
+ --nova-tone-danger-strong: #f06c78;
114
+ --nova-tone-warning-foreground: #edbd6d;
115
+ --nova-tone-warning-background: #3c301d;
116
+ --nova-tone-warning-border: #71582b;
117
+ --nova-tone-warning-strong: #d99d3d;
118
+ --nova-tone-info-foreground: #98b8ff;
119
+ --nova-tone-info-background: #202f50;
120
+ --nova-tone-info-border: #3a568d;
121
+ --nova-tone-info-strong: #7298ee;
122
+ --nova-tone-neutral-foreground: #aeb8c8;
123
+ --nova-tone-neutral-background: #252b36;
124
+ --nova-tone-neutral-border: #414a59;
125
+ --nova-tone-neutral-strong: #8f9aad;
126
+ --nova-tone-user-task-foreground: #f0bd70;
127
+ --nova-tone-user-task-background: #3d301e;
128
+ --nova-tone-user-task-border: #6b522b;
129
+ --nova-tone-user-task-strong: #dea24b;
130
+ --nova-tone-service-task-foreground: #8dc8ff;
131
+ --nova-tone-service-task-background: #1d3349;
132
+ --nova-tone-service-task-border: #345b7d;
133
+ --nova-tone-service-task-strong: #62a9e8;
134
+ --nova-tone-script-task-foreground: #bea8ff;
135
+ --nova-tone-script-task-background: #30284c;
136
+ --nova-tone-script-task-border: #594985;
137
+ --nova-tone-script-task-strong: #9a7be0;
138
+ --nova-tone-rule-task-foreground: #c9a5ff;
139
+ --nova-tone-rule-task-background: #342648;
140
+ --nova-tone-rule-task-border: #624680;
141
+ --nova-tone-rule-task-strong: #a775dd;
142
+ --nova-tone-message-task-foreground: #79d2d2;
143
+ --nova-tone-message-task-background: #183738;
144
+ --nova-tone-message-task-border: #2c6264;
145
+ --nova-tone-message-task-strong: #4db7b9;
146
+ --nova-tone-manual-task-foreground: #f0a995;
147
+ --nova-tone-manual-task-background: #3e2925;
148
+ --nova-tone-manual-task-border: #72493f;
149
+ --nova-tone-manual-task-strong: #dc876f;
150
+ }
151
+
152
+ /* @bpmn-nova/icons */
153
+ .nova-icon { width: 16px; height: 16px; display: inline-grid; place-items: center; flex: none; color: currentColor; line-height: 0; transform-origin: 50% 50%; }
154
+ .nova-icon.nova-icon-xs { width: 12px; height: 12px; }
155
+ .nova-icon.nova-icon-sm { width: 14px; height: 14px; }
156
+ .nova-icon.nova-icon-md { width: 16px; height: 16px; }
157
+ .nova-icon > .nova-icon-svg { width: 100%; height: 100%; display: block; overflow: visible; fill: none; stroke: currentColor; vector-effect: non-scaling-stroke; }
158
+ .nova-icon[data-icon-missing="true"] { visibility: hidden; }
159
+
160
+ /* @bpmn-nova/renderer-svg */
161
+ .mb-diagram-host,
162
+ .mb-runtime-timeline-host {
163
+ --mb-primary: var(--nova-color-primary, #635bff);
164
+ --mb-primary-strong: var(--nova-color-primary-hover, #5149e8);
165
+ --mb-primary-soft: var(--nova-color-primary-soft, #f0efff);
166
+ --mb-text: var(--nova-color-text, #1f2430);
167
+ --mb-muted: var(--nova-color-text-muted, #7d8798);
168
+ --mb-subtle: var(--nova-color-text-muted, #a3aab7);
169
+ --mb-border: var(--nova-color-border, #e1e5ec);
170
+ --mb-border-strong: var(--nova-color-border-strong, #cbd2dd);
171
+ --mb-edge: var(--nova-color-edge, #9aa8bb);
172
+ --mb-success: var(--nova-tone-success-strong, #22a06b);
173
+ --mb-success-soft: var(--nova-tone-success-background, #eaf8f1);
174
+ --mb-danger: var(--nova-tone-danger-strong, #df4b55);
175
+ --mb-danger-soft: var(--nova-tone-danger-background, #fff0f1);
176
+ --mb-warning: var(--nova-tone-warning-strong, #c48218);
177
+ --mb-warning-soft: var(--nova-tone-warning-background, #fff6e8);
178
+ --mb-card: var(--nova-color-surface, #ffffff);
179
+ --mb-grid-dot: var(--nova-color-grid-dot, rgba(128, 139, 157, .22));
180
+ }
181
+
182
+ .mb-diagram-host {
183
+ position: relative;
184
+ width: 100%;
185
+ height: 100%;
186
+ min-height: 0;
187
+ overflow: hidden;
188
+ background: var(--nova-color-canvas, #f8f9fb);
189
+ user-select: none;
190
+ color: var(--mb-text);
191
+ font-family: var(--nova-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif);
192
+ text-rendering: optimizeLegibility;
193
+ -webkit-font-smoothing: auto;
194
+ }
195
+ .mb-diagram-viewport {
196
+ position: absolute;
197
+ inset: 0;
198
+ overflow: hidden;
199
+ cursor: default;
200
+ background-color: var(--nova-color-canvas, #fafbfc);
201
+ background-image: radial-gradient(circle, var(--mb-grid-dot) 1px, transparent 1.1px);
202
+ background-size: 20px 20px;
203
+ }
204
+ .mb-diagram-viewport.is-grid-hidden { background-image: none; }
205
+ .mb-diagram-viewport::before {
206
+ content: '';
207
+ position: absolute;
208
+ inset: 0;
209
+ pointer-events: none;
210
+ background: radial-gradient(circle at 48% 42%, color-mix(in srgb, var(--mb-primary) 4%, transparent), transparent 38%);
211
+ }
212
+ .mb-diagram-viewport.is-panning { cursor: grabbing; }
213
+ .mb-diagram-viewport.is-pan-ready { cursor: grab; }
214
+ .mb-diagram-viewport.is-selecting { cursor: crosshair; }
215
+ .mb-diagram-viewport[data-interaction-mode="marquee"] { cursor: crosshair; }
216
+ .mb-diagram-viewport[data-interaction-mode="pan"] { cursor: grab; }
217
+ .mb-diagram-viewport[data-interaction-mode="pan"].is-panning { cursor: grabbing; }
218
+ .mb-selection-marquee {
219
+ position: absolute;
220
+ z-index: 45;
221
+ border: 1px solid var(--nova-color-primary);
222
+ border-radius: 3px;
223
+ background: color-mix(in srgb, var(--nova-color-primary) 9%, transparent);
224
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--nova-color-surface) 42%, transparent);
225
+ pointer-events: none;
226
+ }
227
+ .mb-selection-marquee[hidden] { display: none; }
228
+ .mb-diagram-world {
229
+ position: absolute;
230
+ left: 0;
231
+ top: 0;
232
+ width: 1px;
233
+ height: 1px;
234
+ overflow: visible;
235
+ transform-origin: 0 0;
236
+ /* The logical canvas is unbounded. Individual SVG layers are dynamically
237
+ enveloped around visible/content coordinates instead of using a finite
238
+ 5200×3200 surface. */
239
+ transform-style: flat;
240
+ }
241
+ .mb-edge-layer,
242
+ .mb-runtime-transition-layer,
243
+ .mb-guide-layer,
244
+ .mb-edge-label-layer { position: absolute; overflow: visible; }
245
+ .mb-node-layer { position: absolute; left: 0; top: 0; width: 1px; height: 1px; overflow: visible; }
246
+ .mb-edge-layer { overflow: visible; z-index: 10; shape-rendering: geometricPrecision; text-rendering: geometricPrecision; }
247
+ .mb-runtime-transition-layer { overflow: visible; z-index: 13; shape-rendering: geometricPrecision; text-rendering: geometricPrecision; pointer-events: none; }
248
+ .mb-guide-layer { overflow: visible; z-index: 15; pointer-events: none; }
249
+ .mb-node-layer { z-index: 20; pointer-events: none; }
250
+ .mb-node-layer > * { pointer-events: auto; }
251
+ .mb-edge-label-layer { z-index: 30; pointer-events: none; shape-rendering: geometricPrecision; text-rendering: geometricPrecision; }
252
+
253
+ /* Magnetic alignment guides */
254
+ .mb-alignment-guide {
255
+ stroke: color-mix(in srgb, var(--nova-color-primary) 72%, transparent);
256
+ stroke-width: 1;
257
+ stroke-dasharray: 5 5;
258
+ vector-effect: non-scaling-stroke;
259
+ pointer-events: none;
260
+ }
261
+ .mb-alignment-guide.kind-center { stroke: color-mix(in srgb, var(--nova-color-primary) 82%, transparent); }
262
+ .mb-alignment-guide.kind-edge { stroke: color-mix(in srgb, var(--nova-tone-info-strong) 65%, transparent); }
263
+
264
+ /* Edges */
265
+ .mb-edge-path {
266
+ stroke: var(--mb-edge);
267
+ stroke-width: 1.8;
268
+ stroke-linecap: round;
269
+ stroke-linejoin: round;
270
+ vector-effect: non-scaling-stroke;
271
+ transition: stroke .14s ease, stroke-width .14s ease;
272
+ }
273
+ .mb-edge-hit {
274
+ stroke: transparent;
275
+ stroke-width: 16;
276
+ pointer-events: stroke;
277
+ cursor: pointer;
278
+ vector-effect: non-scaling-stroke;
279
+ }
280
+ .mb-edge-group:hover .mb-edge-path { stroke: var(--nova-color-border-strong); stroke-width: 2.2; }
281
+ .mb-edge-group.is-selected .mb-edge-path { stroke: var(--mb-primary); stroke-width: 2.6; }
282
+ .mb-edge-group.status-completed .mb-edge-path { stroke: var(--mb-success); stroke-width: 2.3; }
283
+ .mb-edge-group.status-active .mb-edge-path { stroke: var(--mb-primary); stroke-width: 2.7; stroke-dasharray: 8 6; animation: mb-dash .9s linear infinite; }
284
+ .mb-edge-group.status-failed .mb-edge-path { stroke: var(--mb-danger); }
285
+ .mb-edge-group[data-tone] .mb-edge-path { stroke: var(--nova-runtime-tone-strong); }
286
+ .mb-edge-group.type-messageFlow .mb-edge-path { stroke-dasharray: 8 7; }
287
+ .mb-edge-group.type-association .mb-edge-path { stroke-dasharray: 2 6; marker-end: none; }
288
+ @keyframes mb-dash { to { stroke-dashoffset: -14; } }
289
+
290
+ .mb-runtime-transition { pointer-events: auto; cursor: pointer; }
291
+ .mb-runtime-transition-hit { stroke: transparent; stroke-width: 12; pointer-events: stroke; vector-effect: non-scaling-stroke; fill: none; }
292
+ .mb-runtime-transition-path { stroke: var(--nova-runtime-tone-strong, var(--nova-tone-neutral-strong)); stroke-width: 2.2; stroke-dasharray: 8 6; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; fill: none; animation: mb-runtime-transition-flow .85s linear infinite; }
293
+ .mb-runtime-transition.is-history { opacity: .34; }
294
+ .mb-runtime-transition.is-latest { opacity: 1; }
295
+ .mb-runtime-transition:focus { outline: none; }
296
+ .mb-runtime-transition:hover .mb-runtime-transition-path, .mb-runtime-transition:focus-visible .mb-runtime-transition-path { stroke-width: 3; filter: drop-shadow(0 0 3px color-mix(in srgb, var(--nova-runtime-tone-strong) 26%, transparent)); }
297
+ .mb-runtime-transition-label rect { fill: color-mix(in srgb, var(--nova-color-surface-raised) 98%, transparent); stroke: var(--nova-runtime-tone-border, var(--nova-tone-neutral-border)); stroke-width: 1; vector-effect: non-scaling-stroke; }
298
+ .mb-runtime-transition-label text { fill: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); font-size: var(--nova-font-size-sm, 12px); line-height: 16px; font-weight: var(--nova-font-weight-semibold, 600); pointer-events: none; }
299
+ @keyframes mb-runtime-transition-flow { to { stroke-dashoffset: -14; } }
300
+ @media (prefers-reduced-motion: reduce) {
301
+ .mb-runtime-transition-path { animation: none; }
302
+ }
303
+
304
+ .mb-edge-label-group { pointer-events: auto; cursor: text; }
305
+ .mb-edge-label-bg {
306
+ fill: var(--nova-color-surface-raised);
307
+ stroke: var(--nova-color-border);
308
+ stroke-width: .9;
309
+ vector-effect: non-scaling-stroke;
310
+ }
311
+ .mb-edge-label {
312
+ font-size: var(--nova-font-size-sm, 12px);
313
+ font-weight: var(--nova-font-weight-semibold, 600);
314
+ letter-spacing: 0;
315
+ fill: var(--nova-color-text-secondary, #596477);
316
+ pointer-events: none;
317
+ text-rendering: geometricPrecision;
318
+ }
319
+ .mb-edge-label-group.is-placeholder .mb-edge-label-bg { stroke-dasharray: 3 3; fill: var(--nova-color-surface-subtle); }
320
+ .mb-edge-label-group.is-placeholder .mb-edge-label { fill: var(--nova-color-primary); font-weight: 600; }
321
+ .mb-edge-bend { fill: var(--nova-color-surface, #fff); stroke: var(--mb-primary); stroke-width: 2; cursor: move; vector-effect: non-scaling-stroke; filter: drop-shadow(0 2px 4px color-mix(in srgb, var(--nova-color-text) 15%, transparent)); }
322
+ .mb-edge-label-editor-wrap { width: 100%; height: 100%; display: grid; place-items: center; }
323
+ .mb-edge-label-editor { pointer-events: auto; }
324
+ .mb-edge-label-input {
325
+ width: 156px;
326
+ height: 28px;
327
+ box-sizing: border-box;
328
+ border: 1.5px solid var(--mb-primary);
329
+ border-radius: 7px;
330
+ padding: 0 9px;
331
+ outline: none;
332
+ background: var(--nova-color-surface, #fff);
333
+ color: var(--nova-color-text);
334
+ font-family: var(--nova-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif);
335
+ font-size: var(--nova-font-size-sm, 12px);
336
+ font-weight: var(--nova-font-weight-semibold, 600);
337
+ line-height: 18px;
338
+ box-shadow: var(--nova-shadow-md), 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 11%, transparent);
339
+ }
340
+
341
+ /* Base nodes */
342
+ .mb-node {
343
+ position: absolute;
344
+ box-sizing: border-box;
345
+ cursor: pointer;
346
+ color: var(--mb-text);
347
+ outline: none;
348
+ z-index: 5;
349
+ }
350
+ .mb-node-task,
351
+ .mb-node-container {
352
+ overflow: visible;
353
+ background: var(--mb-card);
354
+ border: 1px solid var(--mb-border);
355
+ border-radius: 13px;
356
+ box-shadow: var(--nova-shadow-sm);
357
+ transition: box-shadow .14s ease, border-color .14s ease, transform .14s ease;
358
+ }
359
+ .mb-node-task:hover,
360
+ .mb-node-container:hover { border-color: var(--nova-color-border-strong); box-shadow: var(--nova-shadow-md); }
361
+ .mb-node.is-selected.mb-node-task,
362
+ .mb-node.is-selected.mb-node-container {
363
+ border-color: var(--mb-primary);
364
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 10%, transparent), var(--nova-shadow-md);
365
+ }
366
+ .mb-node[data-tone].mb-node-task { border-color: var(--nova-runtime-tone-border); }
367
+ .mb-node[data-tone="primary"].mb-node-task { box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 9%, transparent), var(--nova-shadow-md); }
368
+ .mb-node-accent { position: absolute; left: -1px; top: 18px; bottom: 18px; width: 3px; border-radius: 0 5px 5px 0; background: var(--nova-color-primary); opacity: .8; }
369
+ .mb-node-task > .mb-node-accent { top: 12px; bottom: 12px; }
370
+ .mb-node-type-userTask .mb-node-accent { background: var(--nova-tone-user-task-strong, #efa63a); }
371
+ .mb-node-type-serviceTask .mb-node-accent { background: var(--nova-tone-service-task-strong, #4e9ce7); }
372
+ .mb-node-type-businessRuleTask .mb-node-accent { background: var(--nova-tone-script-task-strong, #9268dc); }
373
+ .mb-node-type-sendTask .mb-node-accent,
374
+ .mb-node-type-receiveTask .mb-node-accent { background: var(--nova-tone-message-task-strong, #36a6a8); }
375
+ .mb-node-type-manualTask .mb-node-accent { background: var(--nova-tone-manual-task-strong, #d67c67); }
376
+ .mb-node-type-callActivity .mb-node-accent { background: var(--nova-tone-success-strong); }
377
+
378
+ .mb-node-header { display: flex; align-items: center; gap: 11px; height: 100%; padding: 0 15px 0 16px; box-sizing: border-box; }
379
+ .mb-node-task > .mb-node-header { gap: 12px; padding: 0 14px; }
380
+ .mb-node-icon {
381
+ display: grid;
382
+ place-items: center;
383
+ width: 34px;
384
+ height: 34px;
385
+ flex: 0 0 34px;
386
+ border-radius: 10px;
387
+ background: var(--nova-color-primary-soft, #f0efff);
388
+ color: var(--nova-color-primary);
389
+ font-size: var(--nova-font-size-lg, 16px);
390
+ font-weight: var(--nova-font-weight-bold, 700);
391
+ letter-spacing: -1px;
392
+ }
393
+ .mb-node-task > .mb-node-header .mb-node-icon { width: 36px; height: 36px; flex-basis: 36px; }
394
+ .mb-node-type-userTask .mb-node-icon { background: var(--nova-tone-user-task-background, #fff4e5); color: var(--nova-tone-user-task-foreground, #c77b12); }
395
+ .mb-node-type-serviceTask .mb-node-icon { background: var(--nova-tone-service-task-background, #edf6ff); color: var(--nova-tone-service-task-foreground, #2f7ec4); }
396
+ .mb-node-type-scriptTask .mb-node-icon { background: var(--nova-tone-script-task-background, #f2efff); color: var(--nova-tone-script-task-foreground, #7351c6); font-size: var(--nova-font-size-sm, 12px); letter-spacing: -1px; }
397
+ .mb-node-type-businessRuleTask .mb-node-icon { background: var(--nova-tone-rule-task-background, #f4efff); color: var(--nova-tone-rule-task-foreground, #8255cc); }
398
+ .mb-node-type-manualTask .mb-node-icon { background: var(--nova-tone-manual-task-background, #fff0ec); color: var(--nova-tone-manual-task-foreground, #c46c56); }
399
+ .mb-node-type-sendTask .mb-node-icon,
400
+ .mb-node-type-receiveTask .mb-node-icon { background: var(--nova-tone-message-task-background, #eaf9f8); color: var(--nova-tone-message-task-foreground, #238b8e); }
401
+ .mb-node-title-wrap { min-width: 0; flex: 1; }
402
+ .mb-node-runtime-copy { display: grid; align-content: center; min-width: 0; box-sizing: border-box; padding-right: 22px; }
403
+ .mb-node-title { font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-bold, 700); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--nova-color-text, #2a303c); }
404
+ .mb-node-subtitle { margin-top: 4px; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; color: var(--mb-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
405
+ .mb-node-task > .mb-node-header .mb-node-title { font-size: var(--nova-font-size-lg, 16px); line-height: 22px; font-weight: var(--nova-font-weight-bold, 700); }
406
+ .mb-node-task > .mb-node-header .mb-node-subtitle { margin-top: 2px; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
407
+ .mb-diagram-host:not([data-mode="instance"]) .mb-diagram-viewport.is-low-detail .mb-node-subtitle { display: none; }
408
+ .mb-diagram-host[data-mode="instance"] .mb-diagram-viewport.is-low-detail .mb-runtime-summary { display: none; }
409
+ .mb-diagram-host[data-mode="instance"] .mb-diagram-viewport.is-low-detail .mb-runtime-action-summary { display: none; }
410
+ .mb-diagram-viewport.is-overview .mb-edge-label-group:not(.is-selected),
411
+ .mb-diagram-viewport.is-overview .mb-node:not(.is-selected) .mb-node-floating-label { display: none; }
412
+ .mb-activity-markers { position: absolute; left: 50%; bottom: 2px; transform: translateX(-50%); display: inline-flex; align-items: center; gap: 4px; color: var(--nova-color-text-secondary); line-height: 0; }
413
+ .mb-activity-marker { width: 12px; height: 12px; display: grid; place-items: center; }
414
+ .mb-activity-marker-icon { width: 12px; height: 12px; display: block; overflow: visible; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; vector-effect: non-scaling-stroke; }
415
+ .mb-node-type-callActivity { border-width: 2px; }
416
+ .mb-node-container { background: color-mix(in srgb, var(--nova-color-surface) 88%, transparent); border-style: dashed; border-color: var(--nova-color-border-strong); }
417
+ .mb-node-type-transaction { border-style: double; border-width: 3px; }
418
+ .mb-node-type-eventSubProcess { border-style: dotted; }
419
+
420
+ /* Events */
421
+ .mb-node-event,
422
+ .mb-node-boundary { display: grid; place-items: center; z-index: 7; }
423
+ .mb-event-shape {
424
+ width: 46px;
425
+ height: 46px;
426
+ box-sizing: border-box;
427
+ display: grid;
428
+ place-items: center;
429
+ border-radius: 50%;
430
+ border: 2px solid var(--nova-color-text-muted);
431
+ background: var(--nova-color-surface, #fff);
432
+ color: var(--nova-color-text-secondary);
433
+ box-shadow: var(--nova-shadow-sm);
434
+ position: relative;
435
+ }
436
+ .mb-node-boundary .mb-event-shape { width: 40px; height: 40px; border-width: 2px; }
437
+ .mb-event-shape[data-stage="intermediate"],
438
+ .mb-node-boundary .mb-event-shape { box-shadow: inset 0 0 0 3px var(--nova-color-surface), inset 0 0 0 4.5px var(--nova-color-text-muted, #8796a9), var(--nova-shadow-sm); }
439
+ .mb-event-shape[data-stage="end"] { border-width: 4px; border-color: var(--nova-color-text-secondary); }
440
+ .mb-event-shape.is-noninterrupting { border-style: dashed; box-shadow: inset 0 0 0 3px var(--nova-color-surface), inset 0 0 0 4.5px var(--nova-color-text-muted, #8796a9), var(--nova-shadow-sm); }
441
+ .mb-event-glyph { font-size: 18px; font-weight: var(--nova-font-weight-bold, 700); line-height: 1; }
442
+ .mb-node-type-terminateEndEvent .mb-event-glyph { font-size: 20px; }
443
+ .mb-node.status-completed .mb-event-shape { border-color: var(--mb-success); color: var(--mb-success); background: var(--mb-success-soft); }
444
+ .mb-node.status-active .mb-event-shape { border-color: var(--mb-primary); color: var(--mb-primary); background: var(--mb-primary-soft); }
445
+ .mb-node[data-tone] .mb-event-shape { border-color: var(--nova-runtime-tone-strong); color: var(--nova-runtime-tone-foreground); background: var(--nova-runtime-tone-background); }
446
+
447
+ /* Gateways */
448
+ .mb-node-gateway { display: grid; place-items: center; z-index: 7; }
449
+ .mb-gateway-shape {
450
+ width: 49px;
451
+ height: 49px;
452
+ transform: rotate(45deg);
453
+ border: 1.8px solid var(--nova-tone-warning-strong);
454
+ border-radius: 7px;
455
+ background: var(--nova-tone-warning-background);
456
+ display: grid;
457
+ place-items: center;
458
+ box-shadow: var(--nova-shadow-sm);
459
+ }
460
+ .mb-gateway-symbol { transform: rotate(-45deg); font-size: 24px; font-weight: var(--nova-font-weight-bold, 700); color: var(--nova-tone-warning-foreground); line-height: 1; }
461
+ .mb-gateway-role-badge { position: absolute; z-index: 9; top: -8px; right: -8px; min-width: 18px; height: 18px; border: 2px solid var(--nova-color-surface); border-radius: 9px; padding: 0 4px; display: grid; place-items: center; color: var(--nova-color-text-inverse, #fff); background: var(--nova-tone-neutral-strong); box-shadow: var(--nova-shadow-sm); font-size: var(--nova-font-size-xs, 10px); font-weight: var(--nova-font-weight-bold, 700); line-height: 1; pointer-events: none; }
462
+ .mb-gateway-role-badge.is-incomplete { background: var(--nova-tone-warning-strong, #c48218); }
463
+ .mb-gateway-role-badge.is-conflict { background: var(--nova-tone-danger-strong); }
464
+ .mb-gateway-role-badge.is-ambiguous { background: var(--nova-tone-neutral-strong); }
465
+ .mb-node-type-complexGateway .mb-gateway-symbol { font-size: 20px; }
466
+ .mb-node.status-completed .mb-gateway-shape { border-color: var(--mb-success); background: var(--mb-success-soft); }
467
+ .mb-node.status-active .mb-gateway-shape { border-color: var(--mb-primary); background: var(--mb-primary-soft); }
468
+ .mb-node[data-tone] .mb-gateway-shape { border-color: var(--nova-runtime-tone-strong); background: var(--nova-runtime-tone-background); }
469
+
470
+ .mb-node-floating-label {
471
+ position: absolute;
472
+ left: 50%;
473
+ top: calc(100% + 6px);
474
+ transform: translateX(-50%);
475
+ white-space: nowrap;
476
+ max-width: 180px;
477
+ overflow: hidden;
478
+ text-overflow: ellipsis;
479
+ font-size: var(--nova-font-size-sm, 12px);
480
+ line-height: 16px;
481
+ font-weight: var(--nova-font-weight-semibold, 600);
482
+ color: var(--nova-color-text-secondary);
483
+ pointer-events: none;
484
+ }
485
+
486
+ /* Data / artifacts */
487
+ .mb-node-data,
488
+ .mb-node-dataStore { display: grid; place-items: center; }
489
+ .mb-data-object-shape {
490
+ width: 50px;
491
+ height: 62px;
492
+ border: 1.7px solid var(--nova-color-text-muted);
493
+ border-radius: 4px;
494
+ background: var(--nova-color-surface, #fff);
495
+ position: relative;
496
+ display: grid;
497
+ place-items: center;
498
+ color: var(--nova-color-text-muted, #77879a);
499
+ }
500
+ .mb-data-object-shape::after {
501
+ content: '';
502
+ position: absolute;
503
+ right: -1.7px;
504
+ top: -1.7px;
505
+ width: 15px;
506
+ height: 15px;
507
+ background: linear-gradient(45deg, var(--nova-color-surface) 48%, var(--nova-color-text-muted) 49%, var(--nova-color-text-muted) 55%, var(--nova-color-divider, #eef1f5) 56%);
508
+ border-top-right-radius: 3px;
509
+ }
510
+ .mb-data-object-lines { font-size: 18px; }
511
+ .mb-data-store-shape {
512
+ width: 56px;
513
+ height: 50px;
514
+ border: 1.7px solid var(--nova-color-text-muted);
515
+ border-radius: 50% / 14%;
516
+ background: var(--nova-color-surface, #fff);
517
+ display: grid;
518
+ place-items: center;
519
+ color: var(--nova-color-text-muted, #77879a);
520
+ position: relative;
521
+ }
522
+ .mb-data-store-shape::before,
523
+ .mb-data-store-shape::after { content: ''; position: absolute; left: -1px; right: -1px; height: 9px; border-radius: 50%; border-top: 1.5px solid var(--nova-color-text-muted); }
524
+ .mb-data-store-shape::before { top: 9px; }
525
+ .mb-data-store-shape::after { top: 19px; }
526
+ .mb-node-annotation { border-left: 2px solid var(--nova-color-text-muted); border-top: 1px solid transparent; border-bottom: 1px solid transparent; }
527
+ .mb-annotation-shape { height: 100%; display: flex; align-items: center; padding: 0 15px; box-sizing: border-box; color: var(--nova-color-text-secondary); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
528
+ .mb-node-group { border: 1.5px dashed var(--nova-color-border-strong); border-radius: 16px; z-index: 1; }
529
+ .mb-container-caption { position: absolute; left: 12px; top: 9px; padding: 3px 7px; border-radius: 6px; background: var(--nova-color-canvas, #f8f9fb); color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; font-weight: var(--nova-font-weight-semibold, 600); }
530
+
531
+ /* Participants / lanes */
532
+ .mb-node-participant,
533
+ .mb-node-lane { border: 1.5px solid var(--nova-color-border-strong); border-radius: 10px; background: color-mix(in srgb, var(--nova-color-surface) 32%, transparent); z-index: 0; }
534
+ .mb-node-lane { border-radius: 7px; border-color: var(--nova-color-border); background: color-mix(in srgb, var(--nova-color-surface) 18%, transparent); }
535
+ .mb-swimlane-rail { position: absolute; overflow: hidden; background: color-mix(in srgb, var(--nova-color-surface-subtle) 78%, transparent); }
536
+ .mb-swimlane-title { position: absolute; left: 50%; top: 50%; writing-mode: horizontal-tb; transform-origin: center; overflow: hidden; color: var(--nova-color-text-secondary); text-align: center; text-overflow: ellipsis; white-space: nowrap; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-bold, 700); letter-spacing: .5px; }
537
+ .mb-swimlane-label-side > .mb-swimlane-rail { left: 0; top: 0; bottom: 0; width: 38px; border-right: 1px solid var(--nova-color-border-strong); border-radius: 9px 0 0 9px; }
538
+ .mb-node-lane.mb-swimlane-label-side > .mb-swimlane-rail { border-radius: 6px 0 0 6px; }
539
+ .mb-swimlane-label-side > .mb-swimlane-rail > .mb-swimlane-title { width: max-content; transform: translate(-50%, -50%) rotate(-90deg); }
540
+ .mb-swimlane-label-top > .mb-swimlane-rail { left: 0; top: 0; right: 0; height: 38px; border-bottom: 1px solid var(--nova-color-border-strong); border-radius: 9px 9px 0 0; }
541
+ .mb-node-lane.mb-swimlane-label-top > .mb-swimlane-rail { border-radius: 6px 6px 0 0; }
542
+ .mb-swimlane-label-top > .mb-swimlane-rail > .mb-swimlane-title { width: calc(100% - 24px); transform: translate(-50%, -50%); }
543
+
544
+ .mb-resize-handle {
545
+ position: absolute;
546
+ z-index: 75;
547
+ width: 9px;
548
+ height: 9px;
549
+ box-sizing: border-box;
550
+ border: 1.5px solid var(--mb-primary);
551
+ border-radius: 2px;
552
+ background: var(--nova-color-surface, #fff);
553
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--nova-color-surface) 78%, transparent);
554
+ }
555
+ .mb-resize-nw { left: -5px; top: -5px; cursor: nwse-resize; }
556
+ .mb-resize-n { left: 50%; top: -5px; transform: translateX(-50%); cursor: ns-resize; }
557
+ .mb-resize-ne { right: -5px; top: -5px; cursor: nesw-resize; }
558
+ .mb-resize-e { right: -5px; top: 50%; transform: translateY(-50%); cursor: ew-resize; }
559
+ .mb-resize-se { right: -5px; bottom: -5px; cursor: nwse-resize; }
560
+ .mb-resize-s { left: 50%; bottom: -5px; transform: translateX(-50%); cursor: ns-resize; }
561
+ .mb-resize-sw { left: -5px; bottom: -5px; cursor: nesw-resize; }
562
+ .mb-resize-w { left: -5px; top: 50%; transform: translateY(-50%); cursor: ew-resize; }
563
+ .mb-lane-divider {
564
+ position: absolute;
565
+ left: -1px;
566
+ right: -1px;
567
+ bottom: -5px;
568
+ z-index: 72;
569
+ height: 10px;
570
+ cursor: ns-resize;
571
+ }
572
+ .mb-lane-divider::after {
573
+ content: '';
574
+ position: absolute;
575
+ left: 8px;
576
+ right: 8px;
577
+ top: 4px;
578
+ height: 2px;
579
+ border-radius: 2px;
580
+ background: var(--mb-primary);
581
+ opacity: 0;
582
+ transition: opacity .12s ease;
583
+ }
584
+ .mb-node-lane:hover > .mb-lane-divider::after,
585
+ .mb-node-lane.is-selected > .mb-lane-divider::after { opacity: .78; }
586
+
587
+ /* Ports + context actions */
588
+ .mb-port {
589
+ position: absolute;
590
+ z-index: 40;
591
+ width: 11px;
592
+ height: 11px;
593
+ border-radius: 50%;
594
+ border: 2px solid var(--nova-color-border-strong);
595
+ background: var(--nova-color-surface, #fff);
596
+ padding: 0;
597
+ opacity: 0;
598
+ transition: opacity .12s ease, border-color .12s ease, transform .12s ease, background .12s ease;
599
+ }
600
+ .mb-node:hover .mb-port,
601
+ .mb-node.is-selected .mb-port,
602
+ .mb-node.is-connect-target .mb-port { opacity: 1; }
603
+ .mb-port:hover { border-color: var(--mb-primary); }
604
+ .mb-port-left { left: -6px; top: 50%; transform: translateY(-50%); }
605
+ .mb-port-right { right: -6px; top: 50%; transform: translateY(-50%); }
606
+ .mb-port-top { left: 50%; top: -6px; transform: translateX(-50%); }
607
+ .mb-port-bottom { left: 50%; bottom: -6px; transform: translateX(-50%); }
608
+ .mb-port-left:hover,
609
+ .mb-port-right:hover { transform: translateY(-50%) scale(1.2); }
610
+ .mb-port-top:hover,
611
+ .mb-port-bottom:hover { transform: translateX(-50%) scale(1.2); }
612
+ .mb-node.is-connecting-source .mb-port-right { opacity: 1; border-color: var(--mb-primary); background: var(--mb-primary); box-shadow: 0 0 0 4px color-mix(in srgb, var(--nova-color-primary) 12%, transparent); }
613
+ .mb-port-target {
614
+ width: 12px;
615
+ height: 12px;
616
+ opacity: 1;
617
+ border-color: var(--mb-primary);
618
+ background: var(--nova-color-surface, #fff);
619
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 10%, transparent);
620
+ }
621
+ .mb-port-target:hover { background: var(--mb-primary); box-shadow: 0 0 0 5px color-mix(in srgb, var(--nova-color-primary) 14%, transparent); }
622
+ .mb-node-actions { position: absolute; right: -42px; top: 50%; transform: translateY(-50%); display: grid; gap: 7px; z-index: 60; }
623
+ .mb-action-btn {
624
+ width: 30px;
625
+ height: 30px;
626
+ border: 1px solid var(--nova-color-border);
627
+ border-radius: 9px;
628
+ background: var(--nova-color-surface, #fff);
629
+ color: var(--nova-color-text-secondary);
630
+ padding: 0;
631
+ display: grid;
632
+ place-items: center;
633
+ box-shadow: var(--nova-shadow-md);
634
+ cursor: pointer;
635
+ transition: transform .12s ease, background .12s ease, color .12s ease, border-color .12s ease;
636
+ }
637
+ .mb-action-btn:hover { transform: translateY(-1px); border-color: var(--nova-color-border-strong); color: var(--nova-color-text); }
638
+ .mb-action-primary { background: var(--mb-primary); color: var(--nova-color-text-inverse, #fff); border-color: var(--mb-primary); }
639
+ .mb-action-primary:hover { background: var(--mb-primary-strong); color: var(--nova-color-text-inverse, #fff); border-color: var(--mb-primary-strong); }
640
+ .mb-action-enter { color: var(--mb-primary); border-color: var(--nova-tone-primary-border); background: var(--nova-color-primary-soft); }
641
+ .mb-action-enter:hover { color: var(--nova-color-text-inverse, #fff); border-color: var(--mb-primary); background: var(--mb-primary); }
642
+ .mb-action-connect.is-active {
643
+ background: var(--mb-primary);
644
+ color: var(--nova-color-text-inverse, #fff);
645
+ border-color: var(--mb-primary);
646
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--nova-color-primary) 12%, transparent), var(--nova-shadow-md);
647
+ }
648
+ .mb-action-connect.is-active:hover { background: var(--mb-primary-strong); color: var(--nova-color-text-inverse, #fff); border-color: var(--mb-primary-strong); }
649
+ .mb-action-danger:hover { background: var(--nova-tone-danger-background); color: var(--nova-tone-danger-foreground); border-color: var(--nova-tone-danger-border); }
650
+ .mb-scope-empty { position: absolute; inset: 0; z-index: 4; display: grid; place-content: center; justify-items: center; gap: 6px; pointer-events: none; color: var(--nova-color-text-muted); }
651
+ .mb-scope-empty[hidden] { display: none; }
652
+ .mb-scope-empty strong { color: var(--nova-color-primary); font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-semibold, 600); }
653
+ .mb-scope-empty span { font-size: 10px; }
654
+
655
+ /* Connect-existing mode: candidate targets are explicit and geometry-agnostic. */
656
+ .mb-diagram-host.is-connecting .mb-node { transition: opacity .12s ease, box-shadow .14s ease, border-color .14s ease; }
657
+ .mb-node.is-connect-target { cursor: crosshair; }
658
+ .mb-node.is-connect-target.mb-node-task,
659
+ .mb-node.is-connect-target.mb-node-container {
660
+ border-color: var(--nova-tone-primary-border);
661
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 8%, transparent), var(--nova-shadow-md);
662
+ }
663
+ .mb-node.is-connect-target.mb-node-task:hover,
664
+ .mb-node.is-connect-target.mb-node-container:hover {
665
+ border-color: var(--mb-primary);
666
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--nova-color-primary) 12%, transparent), var(--nova-shadow-md);
667
+ }
668
+ .mb-node.is-connect-target .mb-event-shape,
669
+ .mb-node.is-connect-target .mb-gateway-shape {
670
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--nova-color-primary) 10%, transparent), var(--nova-shadow-md);
671
+ }
672
+ .mb-node.is-connect-target:hover .mb-event-shape,
673
+ .mb-node.is-connect-target:hover .mb-gateway-shape {
674
+ border-color: var(--mb-primary);
675
+ box-shadow: 0 0 0 5px color-mix(in srgb, var(--nova-color-primary) 14%, transparent), var(--nova-shadow-md);
676
+ }
677
+ .mb-connect-mode-hint {
678
+ position: absolute;
679
+ right: 38px;
680
+ top: calc(100% + 10px);
681
+ white-space: nowrap;
682
+ padding: 5px 9px;
683
+ border: 1px solid var(--nova-tone-primary-border);
684
+ border-radius: 7px;
685
+ background: color-mix(in srgb, var(--nova-color-surface-raised) 97%, transparent);
686
+ color: var(--nova-tone-primary-foreground);
687
+ font-size: var(--nova-font-size-sm, 12px);
688
+ font-weight: var(--nova-font-weight-semibold, 600);
689
+ line-height: 1;
690
+ box-shadow: var(--nova-shadow-md);
691
+ pointer-events: none;
692
+ z-index: 70;
693
+ }
694
+
695
+ /* Quick-add menu */
696
+ .mb-quick-menu {
697
+ position: absolute;
698
+ width: 292px;
699
+ max-height: 412px;
700
+ overflow: hidden;
701
+ border: 1px solid var(--nova-color-border, #e0e4eb);
702
+ border-radius: 14px;
703
+ background: color-mix(in srgb, var(--nova-color-surface) 98.5%, transparent);
704
+ box-shadow: var(--nova-shadow-lg);
705
+ z-index: 120;
706
+ backdrop-filter: blur(12px);
707
+ }
708
+ .mb-quick-menu-head { display: flex; align-items: center; justify-content: space-between; padding: 12px 13px 9px 14px; }
709
+ .mb-quick-menu-title { font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-bold, 700); color: var(--nova-color-text); }
710
+ .mb-quick-menu-subtitle { margin-top: 2px; font-size: var(--nova-font-size-xs, 10px); line-height: 14px; color: var(--nova-color-text-muted); }
711
+ .mb-quick-menu-close { width: 26px; height: 26px; border: 0; border-radius: 7px; padding: 0; display: grid; place-items: center; background: var(--nova-color-surface-muted); color: var(--nova-color-text-muted); cursor: pointer; }
712
+ .mb-quick-menu-search { display: block; width: calc(100% - 24px); height: 34px; margin: 0 12px 8px; box-sizing: border-box; border: 1px solid var(--nova-color-border); border-radius: 8px; padding: 0 10px; outline: none; background: var(--nova-color-surface-subtle); color: var(--nova-color-text); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
713
+ .mb-quick-menu-search:focus { border-color: var(--nova-tone-primary-border); background: var(--nova-color-surface, #fff); box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 8%, transparent); }
714
+ .mb-quick-menu-body { max-height: 324px; overflow-y: auto; padding: 0 8px 10px; }
715
+ .mb-quick-menu-section-title { padding: 8px 7px 5px; color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; font-weight: var(--nova-font-weight-bold, 700); text-transform: uppercase; letter-spacing: .5px; }
716
+ .mb-quick-menu-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }
717
+ .mb-quick-menu-item { min-width: 0; height: 38px; display: flex; align-items: center; gap: 8px; border: 0; border-radius: 8px; padding: 0 8px; background: transparent; color: var(--nova-color-text-secondary); cursor: pointer; text-align: left; }
718
+ .mb-quick-menu-item:hover { background: var(--nova-color-primary-soft); color: var(--nova-tone-primary-foreground); }
719
+ .mb-mini-type { width: 22px; height: 22px; flex: 0 0 22px; display: grid; place-items: center; border-radius: 6px; background: var(--nova-tone-neutral-background); color: var(--nova-tone-neutral-foreground); font-size: var(--nova-font-size-sm, 12px); font-weight: var(--nova-font-weight-bold, 700); }
720
+ .mb-mini-kind-gateway { background: var(--nova-tone-warning-background); color: var(--nova-tone-warning-foreground); transform: rotate(45deg); border-radius: 5px; }
721
+ .mb-mini-kind-gateway + .mb-quick-menu-item-text { margin-left: 1px; }
722
+ .mb-mini-kind-event, .mb-mini-kind-boundary { border-radius: 50%; background: var(--nova-tone-info-background); color: var(--nova-tone-info-foreground); }
723
+ .mb-mini-kind-task { background: var(--nova-color-primary-soft, #eef0ff); color: var(--nova-tone-primary-foreground); }
724
+ .mb-quick-menu-item-text { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); }
725
+ .mb-quick-menu .is-hidden { display: none !important; }
726
+
727
+ /* Runtime */
728
+ .mb-runtime-status-icon { position: absolute; z-index: 6; right: 8px; top: 8px; width: 20px; height: 20px; display: grid; place-items: center; box-sizing: border-box; border: 0; border-radius: 50%; padding: 0; background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); }
729
+ button.mb-runtime-status-icon { cursor: pointer; }
730
+ button.mb-runtime-status-icon:hover, button.mb-runtime-status-icon:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 15%, transparent); }
731
+ .mb-runtime-status-icon .nova-icon { width: 14px; height: 14px; }
732
+ .mb-runtime-summary { display: block; width: 100%; min-width: 0; border: 0; padding: 0; background: transparent; text-align: left; font-family: inherit; cursor: default; }
733
+ button.mb-runtime-summary { cursor: pointer; }
734
+ button.mb-runtime-summary:hover, button.mb-runtime-summary:focus-visible { color: var(--mb-primary); outline: none; text-decoration: underline; text-underline-offset: 2px; }
735
+ .mb-runtime-action-summary { display: block; width: 100%; min-width: 0; margin-top: 1px; overflow: hidden; border: 0; padding: 0; color: var(--nova-color-text-secondary, #596477); background: transparent; text-align: left; text-overflow: ellipsis; white-space: nowrap; font-family: inherit; font-size: var(--nova-font-size-xs, 10px); line-height: 14px; cursor: default; }
736
+ button.mb-runtime-action-summary { cursor: pointer; }
737
+ button.mb-runtime-action-summary:hover, button.mb-runtime-action-summary:focus-visible { color: var(--mb-primary); outline: none; text-decoration: underline; text-underline-offset: 2px; }
738
+ .mb-diagram-host[data-mode="viewer"] .mb-diagram-viewport,
739
+ .mb-diagram-host[data-mode="instance"] .mb-diagram-viewport { cursor: grab; }
740
+ .mb-runtime-details-layer { --mb-runtime-details-drag-offset: 0px; --mb-runtime-details-backdrop-progress: 1; position: absolute; inset: 0; z-index: 70; overflow: hidden; pointer-events: none; }
741
+ .mb-runtime-details-layer.has-backdrop::before { content: ''; position: absolute; inset: 0; z-index: 0; background: var(--nova-color-backdrop); backdrop-filter: blur(1px); opacity: 0; pointer-events: none; transition: opacity 180ms ease; }
742
+ .mb-runtime-details-layer.has-backdrop.is-open::before, .mb-runtime-details-layer.has-backdrop.is-settling::before, .mb-runtime-details-layer.has-backdrop.is-dragging::before { opacity: var(--mb-runtime-details-backdrop-progress); }
743
+ .mb-runtime-details-layer.has-backdrop.is-dragging::before { transition: none; }
744
+ .mb-runtime-details-layer.placement-bottom.has-backdrop, .mb-runtime-details-layer.placement-center.has-backdrop { pointer-events: auto; }
745
+ .mb-runtime-details-popover { position: absolute; box-sizing: border-box; min-width: 300px; max-width: 360px; max-height: 360px; display: grid; grid-template-rows: auto auto minmax(0, 1fr); overflow: hidden; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 12px; outline: none; background: color-mix(in srgb, var(--nova-color-surface-raised) 99%, transparent); color: var(--mb-text); box-shadow: var(--nova-shadow-lg); pointer-events: auto; user-select: text; }
746
+ .mb-runtime-details-motion-panel { z-index: 1; opacity: 1; transform: translate3d(0, 0, 0) scale(1); transform-origin: center; transition: opacity 160ms ease, transform 160ms cubic-bezier(.2, .8, .2, 1); }
747
+ .mb-runtime-details-layer.placement-popover.is-entering .mb-runtime-details-motion-panel, .mb-runtime-details-layer.placement-popover.is-closing .mb-runtime-details-motion-panel, .mb-runtime-details-layer.placement-center.is-entering .mb-runtime-details-motion-panel, .mb-runtime-details-layer.placement-center.is-closing .mb-runtime-details-motion-panel { opacity: 0; transform: translate3d(0, 6px, 0) scale(.98); }
748
+ .mb-runtime-details-layer.placement-popover.is-closing .mb-runtime-details-motion-panel, .mb-runtime-details-layer.placement-center.is-closing .mb-runtime-details-motion-panel { transition-duration: 140ms; transition-timing-function: ease-in; }
749
+ .mb-runtime-details-layer.placement-bottom .mb-runtime-details-popover { width: 100%; min-width: 0; max-width: none; max-height: var(--mb-runtime-details-max-height, 75%); border-right: 0; border-bottom: 0; border-left: 0; border-radius: 16px 16px 0 0; padding-bottom: env(safe-area-inset-bottom, 0); box-shadow: var(--nova-shadow-lg); }
750
+ .mb-runtime-details-layer.placement-bottom .mb-runtime-details-motion-panel { transform: translate3d(0, var(--mb-runtime-details-drag-offset), 0); transition: opacity 180ms ease, transform 260ms cubic-bezier(.2, .8, .2, 1); }
751
+ .mb-runtime-details-layer.placement-bottom.is-entering .mb-runtime-details-motion-panel, .mb-runtime-details-layer.placement-bottom.is-closing .mb-runtime-details-motion-panel { opacity: .98; transform: translate3d(0, 100%, 0); }
752
+ .mb-runtime-details-layer.placement-bottom.is-closing .mb-runtime-details-motion-panel { transition-duration: 160ms, 220ms; transition-timing-function: ease-in; }
753
+ .mb-runtime-details-layer.placement-bottom.is-dragging .mb-runtime-details-motion-panel { transition: none; }
754
+ .mb-runtime-details-layer.placement-bottom.is-settling .mb-runtime-details-motion-panel { transition-duration: 180ms; transition-timing-function: cubic-bezier(.2, .8, .2, 1); }
755
+ .mb-runtime-details-layer.is-entering .mb-runtime-details-motion-panel, .mb-runtime-details-layer.has-backdrop.is-entering::before { transition: none; }
756
+ .mb-runtime-details-drag-handle { position: absolute; z-index: 4; top: 0; left: 50%; width: 80px; height: 44px; border: 0; padding: 0; transform: translateX(-50%); touch-action: none; user-select: none; cursor: grab; }
757
+ .mb-runtime-details-drag-handle::before { content: ''; position: absolute; top: 7px; left: 50%; width: 34px; height: 4px; border-radius: 999px; background: var(--nova-color-border-strong, #d9dee7); transform: translateX(-50%); transition: background-color 140ms ease, width 140ms ease; }
758
+ .mb-runtime-details-drag-handle:hover::before { width: 40px; background: var(--nova-color-text-muted); }
759
+ .mb-runtime-details-layer.is-dragging .mb-runtime-details-drag-handle { cursor: grabbing; }
760
+ .mb-runtime-details-drag-active, .mb-runtime-details-drag-active * { user-select: none !important; cursor: grabbing !important; }
761
+ .mb-runtime-details-layer.placement-bottom .mb-runtime-details-head { padding-top: 20px; }
762
+ .mb-runtime-details-layer.placement-bottom .mb-runtime-details-body, .mb-runtime-details-layer.placement-center .mb-runtime-details-body { max-height: none; }
763
+ .mb-runtime-details-layer.placement-center .mb-runtime-details-popover { min-width: 0; }
764
+ @media (prefers-reduced-motion: reduce) { .mb-runtime-details-popover, .mb-runtime-details-layer.has-backdrop::before, .mb-runtime-details-motion-panel { animation: none !important; transition: none !important; } }
765
+ .mb-runtime-details-head { position: relative; min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 14px 48px 12px 14px; border-bottom: 1px solid var(--nova-color-divider, #edf0f4); }
766
+ .mb-runtime-details-heading { min-width: 0; display: grid; gap: 2px; }
767
+ .mb-runtime-details-heading strong { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--nova-font-size-lg, 16px); line-height: 22px; font-weight: var(--nova-font-weight-bold, 700); }
768
+ .mb-runtime-details-heading span { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
769
+ .mb-runtime-details-head > em { padding: 2px 8px; border-radius: 999px; background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-style: normal; white-space: nowrap; }
770
+ .mb-runtime-details-close { position: absolute; top: 10px; right: 10px; width: 28px; height: 28px; display: grid; place-items: center; border: 0; border-radius: 7px; padding: 0; background: transparent; color: var(--nova-color-text-muted); cursor: pointer; }
771
+ .mb-runtime-details-close:hover, .mb-runtime-details-close:focus-visible { outline: none; background: var(--nova-color-primary-soft); color: var(--mb-primary); }
772
+ .mb-runtime-details-progress { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 12px; background: var(--nova-color-surface-subtle); color: var(--nova-color-text-secondary, #667085); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
773
+ .mb-runtime-details-progress strong { color: var(--mb-primary); font-size: var(--nova-font-size-md, 14px); }
774
+ .mb-runtime-details-body { min-height: 0; max-height: 280px; overflow-y: auto; overscroll-behavior: contain; padding: 8px; scrollbar-width: thin; scrollbar-color: var(--nova-color-border-strong, #d9dee7) transparent; }
775
+ .mb-runtime-details-round { margin: 8px 6px 4px; color: var(--nova-color-text-secondary, #596477); font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-semibold, 600); }
776
+ .mb-runtime-details-person { display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 10px; padding: 9px 6px; border-radius: 8px; }
777
+ .mb-runtime-details-person + .mb-runtime-details-person { border-top: 1px solid var(--nova-color-divider); }
778
+ .mb-runtime-details-avatar { width: 32px; height: 32px; display: grid; place-items: center; overflow: hidden; border-radius: 50%; background: var(--nova-color-primary-soft, #f0efff); color: var(--mb-primary); font-size: var(--nova-font-size-sm, 12px); font-weight: var(--nova-font-weight-semibold, 600); }
779
+ .mb-runtime-details-avatar img { width: 100%; height: 100%; object-fit: cover; }
780
+ .mb-runtime-details-person-copy { min-width: 0; display: grid; gap: 2px; }
781
+ .mb-runtime-details-person-title { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; }
782
+ .mb-runtime-details-person-title strong { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-semibold, 600); }
783
+ .mb-runtime-details-person-title em { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-style: normal; }
784
+ .mb-runtime-details-person-title em[data-tone] { color: var(--nova-runtime-tone-foreground); }
785
+ .mb-runtime-details-person time, .mb-runtime-details-transition span { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
786
+ .mb-runtime-details-person p, .mb-runtime-details-transition p { margin: 2px 0 0; color: var(--nova-color-text-secondary, #596477); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; white-space: normal; overflow-wrap: anywhere; }
787
+ .mb-runtime-action { display: grid; gap: 6px; margin: 6px; padding: 9px 10px; border: 1px solid var(--nova-runtime-tone-border, var(--nova-color-border)); border-radius: 9px; background: var(--nova-runtime-tone-background, var(--nova-color-surface-subtle)); }
788
+ .mb-runtime-action-head { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 8px; }
789
+ .mb-runtime-action-heading { min-width: 0; display: flex; align-items: center; gap: 7px; }
790
+ .mb-runtime-action-heading strong { overflow: hidden; color: var(--nova-color-text-secondary); text-overflow: ellipsis; white-space: nowrap; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
791
+ .mb-runtime-action-heading em { border-radius: 999px; padding: 1px 6px; color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); background: var(--nova-color-surface-raised); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; font-style: normal; white-space: nowrap; }
792
+ .mb-runtime-action-head time { color: var(--nova-color-text-muted, #929bac); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; white-space: nowrap; }
793
+ .mb-runtime-action-targets { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
794
+ .mb-runtime-action-content { min-width: 0; display: grid; gap: 7px; }
795
+ .mb-runtime-action-paragraph { margin: 0; color: var(--nova-color-text-secondary); white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
796
+ .mb-runtime-action-media { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 7px; }
797
+ .mb-runtime-asset-image { width: 76px; height: 58px; overflow: hidden; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 7px; padding: 0; display: grid; place-items: center; color: var(--nova-color-text-muted); background: var(--nova-color-surface-muted, #f2f4f7); cursor: pointer; }
798
+ .mb-runtime-asset-image img { width: 100%; height: 100%; display: block; object-fit: cover; }
799
+ .mb-runtime-asset-image:hover, .mb-runtime-asset-image:focus-visible { border-color: var(--mb-primary); outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 10%, transparent); }
800
+ .mb-runtime-asset-file { min-width: 0; max-width: 100%; flex: 0 1 320px; min-height: 44px; box-sizing: border-box; border: 1px solid var(--nova-color-border, #e0e4eb); border-radius: 7px; padding: 6px 8px; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; color: var(--nova-color-text-secondary); background: var(--nova-color-surface, #fff); text-decoration: none; }
801
+ .mb-runtime-asset-file:hover, .mb-runtime-asset-file:focus-visible { border-color: var(--mb-primary); outline: none; color: var(--mb-primary); }
802
+ .mb-runtime-asset-file-copy { min-width: 0; display: grid; }
803
+ .mb-runtime-asset-file-copy strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
804
+ .mb-runtime-asset-file-copy small, .mb-runtime-asset-state { color: var(--nova-color-text-muted, #929bac); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
805
+ .mb-runtime-asset-file.is-loading, .mb-runtime-asset-file.is-unavailable, .mb-runtime-asset-image.is-unavailable { pointer-events: none; cursor: default; opacity: .72; }
806
+ .mb-runtime-asset-unsupported, .mb-runtime-asset-more { border-radius: 6px; padding: 4px 7px; color: var(--nova-tone-danger-foreground); background: var(--nova-tone-danger-background); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
807
+ .mb-runtime-asset-more { align-self: stretch; min-width: 30px; display: grid; place-items: center; color: var(--nova-color-text-secondary, #667085); background: var(--nova-color-divider, #eef1f5); }
808
+ .mb-runtime-details-transition { display: grid; gap: 2px; margin: 6px; padding: 8px 10px; border-radius: 8px; background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); }
809
+ .mb-runtime-details-transition strong { font-size: var(--nova-font-size-md, 14px); line-height: 20px; }
810
+ .mb-runtime-details-empty { padding: 22px 12px; color: var(--mb-muted); text-align: center; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
811
+ .mb-runtime-transition-details { grid-template-rows: auto minmax(0, 1fr) auto; }
812
+ .mb-runtime-transition-actor { display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 10px; padding: 9px 6px; }
813
+ .mb-runtime-transition-actor time { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
814
+ .mb-runtime-transition-warning { margin: 6px; padding: 8px 10px; border-radius: 8px; background: var(--mb-warning-soft); color: var(--mb-warning); }
815
+ .mb-runtime-transition-warning p { margin: 0; font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
816
+ .mb-runtime-transition-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 8px 12px; border-top: 1px solid var(--nova-color-divider, #edf0f4); }
817
+ .mb-runtime-transition-actions button { min-height: 28px; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 6px; padding: 0 10px; background: var(--nova-color-surface, #fff); color: var(--nova-color-text-secondary, #596477); font: inherit; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; cursor: pointer; }
818
+ .mb-runtime-transition-actions button:hover, .mb-runtime-transition-actions button:focus-visible { border-color: var(--mb-primary); outline: none; color: var(--mb-primary); }
819
+ .mb-runtime-transition-actions button:disabled { opacity: .45; cursor: not-allowed; }
820
+ .mb-runtime-asset-preview { position: absolute; inset: 0; z-index: 95; padding: 24px; display: grid; place-items: center; background: var(--nova-color-backdrop); backdrop-filter: blur(2px); pointer-events: auto; }
821
+ .mb-runtime-asset-preview-dialog { position: relative; width: min(760px, 100%); max-height: 100%; overflow: hidden; border-radius: 12px; display: grid; grid-template-rows: auto minmax(0, 1fr); background: var(--nova-color-surface-raised); box-shadow: var(--nova-shadow-lg); }
822
+ .mb-runtime-asset-preview-head { position: relative; min-width: 0; min-height: 48px; padding: 13px 48px 11px 14px; display: flex; align-items: center; border-bottom: 1px solid var(--nova-color-divider); }
823
+ .mb-runtime-asset-preview-head strong { overflow: hidden; color: var(--nova-color-text); text-overflow: ellipsis; white-space: nowrap; font-size: var(--nova-font-size-md, 14px); }
824
+ .mb-runtime-asset-preview-body { min-height: 180px; overflow: auto; display: grid; place-items: center; background: var(--nova-color-surface-muted, #f4f5f8); }
825
+ .mb-runtime-asset-preview-body img { max-width: 100%; max-height: calc(100vh - 120px); display: block; object-fit: contain; }
826
+ .mb-runtime-asset-preview-state { color: var(--nova-color-text-muted, #7f899a); font-size: var(--nova-font-size-sm, 12px); }
827
+
828
+ /* Runtime timeline projection */
829
+ .mb-runtime-timeline-host { position: relative; width: 100%; height: 100%; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; background: var(--nova-color-surface-subtle, #f7f8fb); color: var(--mb-text); font-family: var(--nova-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif); scrollbar-width: thin; scrollbar-color: var(--nova-color-border-strong, #d9dee7) transparent; }
830
+ .mb-runtime-timeline-host::-webkit-scrollbar { width: 4px; }.mb-runtime-timeline-host::-webkit-scrollbar-thumb { border-radius: 999px; background: var(--nova-color-border-strong, #d9dee7); }
831
+ .mb-runtime-timeline { width: 100%; min-height: 100%; box-sizing: border-box; margin: 0; padding: 18px 16px 40px; background: var(--nova-color-surface, #fff); }
832
+ .mb-runtime-timeline-header { display: grid; gap: 2px; padding: 0 0 16px; border-bottom: 1px solid var(--nova-color-divider, #edf0f5); }
833
+ .mb-runtime-timeline-header strong { font-size: var(--nova-font-size-lg, 16px); line-height: 22px; font-weight: var(--nova-font-weight-bold, 700); }.mb-runtime-timeline-header span { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
834
+ .mb-runtime-timeline-list { padding-top: 10px; }
835
+ .mb-runtime-timeline-item { position: relative; min-width: 0; display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 10px; padding: 7px 0; }
836
+ .mb-runtime-timeline-item:not(:last-child)::before { content: ''; position: absolute; left: 16px; top: 38px; bottom: -10px; width: 2px; border-radius: 2px; background: var(--nova-color-divider); }
837
+ .mb-runtime-timeline-rail { position: relative; z-index: 1; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center; color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); }
838
+ .mb-runtime-timeline-content { min-width: 0; display: grid; gap: 4px; }
839
+ .mb-runtime-timeline-card { width: 100%; min-width: 0; overflow: visible; border: 0; border-radius: 0; display: grid; color: inherit; background: transparent; box-shadow: none; }
840
+ .mb-runtime-timeline-card-main { width: 100%; min-width: 0; border: 0; border-radius: 8px; padding: 5px 7px; display: grid; gap: 3px; color: inherit; background: transparent; text-align: left; font: inherit; cursor: pointer; transition: background-color .14s ease, box-shadow .14s ease; }
841
+ .mb-runtime-timeline-card-main:hover { background: var(--nova-color-primary-soft, #f5f6ff); }
842
+ .mb-runtime-timeline-card-main:focus-visible { outline: none; background: var(--nova-color-primary-soft, #f5f6ff); box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--nova-color-primary) 22%, transparent); }
843
+ .mb-runtime-timeline-card-main:active { background: color-mix(in srgb, var(--nova-color-primary-soft) 84%, var(--nova-color-primary)); }
844
+ .mb-runtime-timeline-card-main.is-pointer-focus-restored:focus-visible { background: transparent; box-shadow: none; }
845
+ .mb-runtime-timeline-heading, .mb-runtime-timeline-meta { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 10px; }
846
+ .mb-runtime-timeline-heading strong { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-semibold, 600); }.mb-runtime-timeline-heading strong small { margin-left: 6px; color: var(--mb-muted); font-size: var(--nova-font-size-xs, 10px); font-weight: var(--nova-font-weight-regular, 400); }.mb-runtime-timeline-heading em { color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-style: normal; white-space: nowrap; }
847
+ .mb-runtime-timeline-meta { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }.mb-runtime-timeline-meta span { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }.mb-runtime-timeline-meta time { color: var(--nova-color-text-muted); white-space: nowrap; }
848
+ .mb-runtime-timeline-condition { justify-self: start; border: 1px solid var(--nova-color-border); border-radius: 999px; padding: 1px 7px; color: var(--nova-color-text-secondary); background: var(--nova-color-surface, #fff); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
849
+ .mb-runtime-timeline-item.is-predicted { opacity: .68; }
850
+ .mb-runtime-timeline-participants { margin: 0 7px; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }.mb-runtime-timeline-participants summary { color: var(--nova-color-primary, #5967cf); cursor: pointer; }.mb-runtime-timeline-participant-list { padding: 5px 0 0; display: flex; flex-wrap: wrap; gap: 5px; }.mb-runtime-timeline-participant-list span { border-radius: 999px; padding: 2px 7px; color: var(--nova-color-text-secondary, #596477); background: var(--nova-color-surface-muted); }
851
+ .mb-runtime-timeline-actions { margin: 2px 7px 0; border-radius: 8px; padding: 7px 8px; display: grid; gap: 0; background: var(--nova-color-surface-subtle, #f7f8fb); }
852
+ .mb-runtime-timeline-action { min-width: 0; border: 0; border-radius: 0; padding: 7px 0; display: grid; gap: 5px; background: transparent; box-shadow: none; }
853
+ .mb-runtime-timeline-actions > .mb-runtime-timeline-action { padding-top: 0; padding-bottom: 0; }
854
+ .mb-runtime-timeline-action-head { min-width: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 7px; }
855
+ .mb-runtime-timeline-action-head strong { border-radius: 999px; padding: 1px 7px; color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; font-weight: var(--nova-font-weight-semibold, 600); }
856
+ .mb-runtime-timeline-action-head span { overflow: hidden; color: var(--nova-color-text-muted); text-overflow: ellipsis; white-space: nowrap; font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
857
+ .mb-runtime-timeline-action-history { margin-top: 6px; border-top: 1px solid var(--nova-color-divider, #e7eaf0); padding-top: 6px; color: var(--nova-color-primary, #5967cf); font-size: var(--nova-font-size-xs, 10px); line-height: 16px; }
858
+ .mb-runtime-timeline-action-history > summary { outline: none; cursor: pointer; }
859
+ .mb-runtime-timeline-action-history > summary:hover, .mb-runtime-timeline-action-history > summary:focus-visible { outline: none; color: var(--mb-primary); text-decoration: underline; text-underline-offset: 2px; }
860
+ .mb-runtime-timeline-action-history-body { margin-top: 5px; display: grid; gap: 0; color: var(--mb-text); }
861
+ .mb-runtime-timeline-action-history-body .mb-runtime-timeline-action + .mb-runtime-timeline-action { border-top: 1px solid var(--nova-color-divider, #e7eaf0); }
862
+ .mb-runtime-action-content.is-compact .mb-runtime-action-paragraph { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
863
+ .mb-runtime-action-content.is-compact .mb-runtime-asset-image { width: 60px; height: 46px; }
864
+ .mb-runtime-action-content.is-compact .mb-runtime-asset-file { min-height: 38px; flex-basis: 260px; }
865
+ .mb-runtime-timeline-transition-card { width: 100%; border: 0; border-radius: 9px; padding: 4px; display: grid; gap: 3px; color: var(--nova-runtime-tone-foreground, var(--nova-tone-neutral-foreground)); background: var(--nova-runtime-tone-background, var(--nova-tone-neutral-background)); }
866
+ .mb-runtime-timeline-transition-main { width: 100%; border: 0; border-radius: 7px; padding: 5px 6px; display: grid; gap: 2px; color: inherit; background: transparent; text-align: left; font: inherit; cursor: pointer; }
867
+ .mb-runtime-timeline-transition-main:hover, .mb-runtime-timeline-transition-main:focus-visible { outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-runtime-tone-strong) 12%, transparent); }
868
+ .mb-runtime-timeline-transition-main.is-pointer-focus-restored:focus-visible { box-shadow: none; }
869
+ .mb-runtime-timeline-transition-main strong { font-size: var(--nova-font-size-md, 14px); line-height: 20px; }
870
+ .mb-runtime-timeline-transition-main span, .mb-runtime-timeline-transition-card p { margin: 0; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
871
+ .mb-runtime-timeline-group { margin: 8px 0; border: 0; border-radius: 12px; background: var(--nova-color-surface-subtle); overflow: hidden; }.mb-runtime-timeline-group-summary { min-height: 48px; padding: 0 12px; display: grid; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 8px; color: var(--nova-color-text-secondary); cursor: pointer; }.mb-runtime-timeline-group-summary strong { font-size: var(--nova-font-size-md, 14px); line-height: 20px; }.mb-runtime-timeline-group-summary span { color: var(--mb-muted); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }.mb-runtime-timeline-group-body { padding: 4px 10px 10px; border-top: 1px solid var(--nova-color-divider); }.mb-runtime-timeline-item.is-group-child { grid-template-columns: 28px minmax(0, 1fr); }.mb-runtime-timeline-item.is-group-child .mb-runtime-timeline-rail { width: 28px; height: 28px; border-radius: 8px; }.mb-runtime-timeline-item.is-group-child::before { left: 13px; top: 32px; }
872
+ .mb-runtime-timeline-empty { padding: 60px 20px; color: var(--mb-muted); text-align: center; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
873
+ .mb-runtime-details-layer.is-timeline.placement-popover .mb-runtime-details-popover { border-radius: 12px; box-shadow: var(--nova-shadow-lg); }
874
+ @media (max-width: 720px) { .mb-runtime-action-media .mb-runtime-asset-file { flex-basis: 100%; }.mb-runtime-timeline { width: 100%; padding: 14px 12px 32px; }.mb-runtime-timeline-header { padding-left: 2px; }.mb-runtime-timeline-item { grid-template-columns: 32px minmax(0, 1fr); gap: 8px; }.mb-runtime-timeline-rail { width: 32px; height: 32px; }.mb-runtime-timeline-item:not(:last-child)::before { left: 15px; top: 36px; }.mb-runtime-timeline-meta { grid-template-columns: minmax(0, 1fr); gap: 0; }.mb-runtime-timeline-meta time { justify-self: start; } }
875
+ .mb-node-svg-icon {
876
+ display: block;
877
+ width: 1em;
878
+ height: 1em;
879
+ fill: none;
880
+ stroke: currentColor;
881
+ stroke-width: 1.7;
882
+ stroke-linecap: round;
883
+ stroke-linejoin: round;
884
+ vector-effect: non-scaling-stroke;
885
+ }
886
+
887
+ .mb-node-icon,
888
+ .mb-event-glyph,
889
+ .mb-gateway-symbol {
890
+ display: grid;
891
+ place-items: center;
892
+ }
893
+
894
+ .mb-node-custom-content {
895
+ position: relative;
896
+ z-index: 1;
897
+ min-width: 0;
898
+ height: 100%;
899
+ }
900
+
901
+ /* @bpmn-nova/palette */
902
+ .nova-palette { height: 100%; overflow: auto; padding: 10px; color: var(--nova-color-text, #243047); background: var(--nova-color-surface, #fff); }
903
+ .nova-palette-section { border-bottom: 1px solid var(--nova-color-divider, #edf0f5); padding: 3px 0 8px; }
904
+ .nova-palette-section-toggle { width: 100%; min-height: 34px; border: 0; background: transparent; display: grid; grid-template-columns: 16px 1fr auto; align-items: center; gap: 6px; color: inherit; cursor: pointer; text-align: left; }
905
+ .nova-palette-section-toggle strong { font-size: var(--nova-font-size-md, 14px); line-height: 20px; font-weight: var(--nova-font-weight-semibold, 600); }
906
+ .nova-palette-section-toggle small { color: var(--nova-color-text-muted, #8791a5); font-size: 10px; }
907
+ .nova-palette-chevron { color: var(--nova-color-text-muted, #7c879b); transform: rotate(0); transition: transform .16s ease; }
908
+ .nova-palette-section.is-collapsed .nova-palette-chevron { transform: rotate(-90deg); }
909
+ .nova-palette-section.is-collapsed .nova-palette-items { display: none; }
910
+ .nova-palette-items { display: grid; gap: 5px; }
911
+ .nova-palette-item { width: 100%; min-height: 46px; padding: 6px 8px; border: 1px solid transparent; border-radius: 8px; background: transparent; display: grid; grid-template-columns: 30px 1fr; align-items: center; gap: 8px; color: inherit; text-align: left; cursor: grab; }
912
+ .nova-palette-item:hover { background: var(--nova-color-primary-soft, #f5f7ff); border-color: var(--nova-tone-primary-border, #dfe4ff); }
913
+ .nova-palette-item:active { cursor: grabbing; }
914
+ .nova-palette-item-icon { width: 28px; height: 28px; border-radius: 7px; background: var(--nova-color-primary-soft, #eef1ff); color: var(--nova-color-primary, #4e5bd5); display: grid; place-items: center; }
915
+ .nova-palette-item-icon svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
916
+ .nova-palette-item-copy { min-width: 0; display: grid; gap: 2px; }
917
+ .nova-palette-item-copy strong { font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); }
918
+ .nova-palette-item-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--nova-color-text-muted, #919aad); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
919
+
920
+ /* @bpmn-nova/properties-renderer */
921
+ .nova-properties { min-height: 100%; color: var(--nova-color-text); background: var(--nova-color-surface); color-scheme: inherit; }
922
+ .properties-head { position: sticky; top: 0; z-index: 5; padding: 15px 16px 12px; border-bottom: 1px solid var(--nova-color-divider, #e7eaf1); background: color-mix(in srgb, var(--nova-color-surface) 97%, transparent); backdrop-filter: blur(10px); }
923
+ .properties-title-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
924
+ .properties-title { min-width: 0; overflow: hidden; color: var(--nova-color-text, #202b3f); font-size: var(--nova-font-size-lg, 16px); font-weight: var(--nova-font-weight-bold, 700); line-height: 22px; text-overflow: ellipsis; white-space: nowrap; }
925
+ .properties-profile-switch { width: max-content; margin-top: 12px; padding: 2px; border-radius: 7px; display: grid; grid-template-columns: 1fr 1fr; background: var(--nova-color-surface-muted, #f0f2f7); }
926
+ .properties-title-row > .properties-profile-switch { flex: none; margin-top: 0; }
927
+ .properties-profile-switch button { min-height: 28px; border: 0; border-radius: 5px; padding: 0 11px; color: var(--nova-color-text-muted, #7b8597); background: transparent; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; cursor: pointer; }
928
+ .properties-profile-switch button.is-active { color: var(--nova-tone-primary-foreground, #3543b8); background: var(--nova-color-surface, #fff); box-shadow: var(--nova-shadow-sm); }
929
+ .properties-body { padding: 0 12px 24px; }
930
+ .properties-empty { padding: 32px 12px; color: var(--nova-color-text-muted, #929bad); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; text-align: center; }
931
+ .properties-multi-summary { margin: 18px 2px; border: 1px solid var(--nova-color-border, #e4e7ef); border-radius: 12px; padding: 18px 16px; color: var(--nova-color-text-secondary); background: var(--nova-color-surface-subtle, #fafbff); text-align: center; }
932
+ .properties-multi-icon { width: 38px; height: 38px; margin: 0 auto 10px; border-radius: 10px; display: grid; place-items: center; color: var(--nova-tone-primary-foreground); background: var(--nova-tone-primary-background); }
933
+ .properties-multi-icon .nova-icon { width: 20px; height: 20px; }
934
+ .properties-multi-summary > strong { font-size: var(--nova-font-size-md, 14px); line-height: 20px; }
935
+ .properties-multi-summary > p { margin: 5px 0 12px; color: var(--nova-color-text-muted, #7d8799); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
936
+ .properties-multi-counts { display: flex; flex-wrap: wrap; justify-content: center; gap: 5px; }
937
+ .properties-multi-counts > span { border-radius: 12px; padding: 3px 8px; color: var(--nova-color-text-secondary, #687386); background: var(--nova-color-surface-muted); font-size: 10px; line-height: 16px; }
938
+ .properties-multi-counts strong { color: var(--nova-tone-primary-foreground, #4f5dcc); }
939
+ .properties-multi-summary > button { width: 100%; height: 34px; margin-top: 14px; border: 1px solid var(--nova-tone-primary-border); border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; color: var(--nova-tone-primary-foreground, #4f5dcc); background: var(--nova-color-primary-soft, #f0f1ff); font-size: var(--nova-font-size-sm, 12px); font-weight: var(--nova-font-weight-semibold, 600); cursor: pointer; }
940
+ .properties-multi-summary > button:hover { border-color: var(--nova-color-primary); background: color-mix(in srgb, var(--nova-color-primary-soft) 88%, var(--nova-color-primary)); }
941
+ .properties-group { border-bottom: 1px solid var(--nova-color-divider, #edf0f5); }
942
+ .properties-group-toggle { width: 100%; min-height: 42px; border: 0; padding: 0 3px; background: transparent; display: flex; align-items: center; gap: 7px; color: var(--nova-color-text-secondary, #3b465a); text-align: left; cursor: pointer; }
943
+ .properties-group-toggle strong { flex: 1; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); }
944
+ .properties-chevron { color: var(--nova-color-text-muted, #8490a4); transform: rotate(0); transition: transform .15s; }
945
+ .properties-group.is-collapsed .properties-chevron { transform: rotate(-90deg); }
946
+ .properties-count { min-width: 18px; padding: 2px 5px; border-radius: 9px; color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #eef1ff); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; text-align: center; }
947
+ .properties-group-content { padding: 0 3px 14px; }
948
+ .properties-group.is-collapsed .properties-group-content { display: none; }
949
+ .properties-group-description, .property-note, .property-inline-hint { color: var(--nova-color-text-muted, #8791a3); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
950
+ .properties-group-description { margin: 0 0 8px; }
951
+ .property-note, .property-inline-hint { margin: 5px 0 0; }
952
+ .property-field { margin: 0 0 11px; }
953
+ .property-label { display: block; margin-bottom: 5px; color: var(--nova-color-text-secondary, #5d687b); font-size: var(--nova-font-size-sm, 12px); font-weight: var(--nova-font-weight-medium, 500); line-height: 18px; }
954
+ .property-required { color: var(--nova-tone-danger-strong, #d84d5a); }
955
+ .property-error { margin: 5px 0 0; color: var(--nova-tone-danger-strong, #d84d5a); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
956
+ .property-control, .property-readonly { box-sizing: border-box; width: 100%; min-height: 36px; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 7px; padding: 8px 9px; color: var(--nova-color-text, #2e394d); background: var(--nova-color-surface, #fff); font: inherit; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; outline: none; }
957
+ .property-control:focus { border-color: var(--nova-tone-primary-border, #98a4ef); box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 10%, transparent); }
958
+ textarea.property-control { resize: vertical; }
959
+ .property-readonly { color: var(--nova-color-text-muted, #778195); background: var(--nova-color-surface-subtle, #f7f8fa); }
960
+ .property-variant-valid .property-readonly { border-color: var(--nova-tone-success-border, #cce8dc); color: var(--nova-tone-success-foreground, #2f7c61); background: var(--nova-tone-success-background, #f1faf6); }
961
+ .property-variant-incomplete .property-readonly { border-color: var(--nova-tone-warning-border, #f0d7aa); color: var(--nova-tone-warning-foreground, #9a6514); background: var(--nova-tone-warning-background, #fff9ee); }
962
+ .property-variant-conflict .property-readonly { border-color: var(--nova-tone-danger-border, #efc5ca); color: var(--nova-tone-danger-foreground, #b33f4b); background: var(--nova-tone-danger-background, #fff5f6); }
963
+ .property-variant-ambiguous .property-readonly { border-color: var(--nova-color-border, #dfe3eb); color: var(--nova-color-text-secondary, #687489); background: var(--nova-color-surface-subtle, #f7f8fa); }
964
+ .property-select { position: relative; min-width: 0; color: var(--nova-color-text, #2e394d); }
965
+ .property-select.is-open { z-index: 12; }
966
+ .property-select-native { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); clip-path: inset(50%); white-space: nowrap; opacity: 0; pointer-events: none; }
967
+ .property-select-trigger { box-sizing: border-box; width: 100%; min-height: 36px; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 8px; padding: 0 8px 0 10px; display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--nova-color-text, #2e394d); background: var(--nova-color-surface, #fff); font: inherit; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; text-align: left; outline: none; cursor: pointer; transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease; }
968
+ .property-select-trigger:hover { border-color: var(--nova-color-border-strong, #c8cedb); background: var(--nova-color-surface, #fdfdff); }
969
+ .property-select-trigger:focus-visible, .property-select.is-open .property-select-trigger { border-color: var(--nova-tone-primary-border, #98a4ef); box-shadow: 0 0 0 3px color-mix(in srgb, var(--nova-color-primary) 10%, transparent); }
970
+ .property-select-trigger:disabled { color: var(--nova-color-text-muted, #929bad); background: var(--nova-color-surface-muted, #f5f6f8); cursor: not-allowed; }
971
+ .property-select-value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
972
+ .property-select-chevron { flex: none; color: var(--nova-color-text-muted, #7f899a); transition: transform .15s ease; }
973
+ .property-select.is-open .property-select-chevron { transform: rotate(180deg); }
974
+ .property-select-popover { position: absolute; top: calc(100% + 6px); right: 0; left: 0; z-index: 30; box-sizing: border-box; max-height: 240px; overflow-y: auto; overscroll-behavior: contain; border: 1px solid var(--nova-color-border, #dfe3ec); border-radius: 10px; padding: 5px; color: var(--nova-color-text-secondary); background: color-mix(in srgb, var(--nova-color-surface-raised) 99%, transparent); box-shadow: var(--nova-shadow-lg); scrollbar-width: thin; scrollbar-color: var(--nova-color-border-strong, #cbd1dc) transparent; }
975
+ .property-select.is-above .property-select-popover { top: auto; bottom: calc(100% + 6px); }
976
+ .property-select-popover[hidden] { display: none; }
977
+ .property-select-option { width: 100%; min-height: 34px; border: 0; border-radius: 7px; padding: 0 8px 0 9px; display: flex; align-items: center; justify-content: space-between; gap: 9px; color: var(--nova-color-text-secondary, #4f5a6d); background: transparent; font: inherit; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; text-align: left; outline: none; cursor: pointer; }
978
+ .property-select-option > span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
979
+ .property-select-option:hover, .property-select-option.is-active { color: var(--nova-tone-primary-foreground, #3442b8); background: var(--nova-color-primary-soft, #f1f3ff); }
980
+ .property-select-option.is-selected { color: var(--nova-tone-primary-foreground, #3e4bc2); background: var(--nova-color-primary-soft); font-weight: var(--nova-font-weight-semibold, 600); }
981
+ .property-select-check { flex: none; color: var(--nova-color-primary, #5361d6); opacity: 0; }
982
+ .property-select-option.is-selected .property-select-check { opacity: 1; }
983
+ .property-select-empty { padding: 12px 8px; color: var(--nova-color-text-muted, #929bad); font-size: 10px; text-align: center; }
984
+ .property-select-compact .property-select-trigger { min-height: 32px; border-radius: 6px; padding-inline: 6px; font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
985
+ .property-select-compact .property-select-popover { min-width: 120px; }
986
+ .property-select-compact .property-select-option { min-height: 32px; font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
987
+ .property-switch { min-height: 30px; border: 0; background: transparent; display: flex; align-items: center; gap: 7px; color: var(--nova-color-text-muted, #7b8597); cursor: pointer; }
988
+ .property-switch span { width: 30px; height: 17px; border-radius: 10px; background: var(--nova-color-border-strong, #cbd1dc); position: relative; }
989
+ .property-switch span::after { content: ''; position: absolute; top: 2px; left: 2px; width: 13px; height: 13px; border-radius: 50%; background: var(--nova-color-surface, #fff); transition: transform .15s; }
990
+ .property-switch.is-on span { background: var(--nova-color-primary, #5361d6); }
991
+ .property-switch.is-on span::after { transform: translateX(13px); }
992
+ .property-switch strong { font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-medium, 500); }
993
+ .property-action, .property-row-add { width: 100%; min-height: 34px; border: 1px solid var(--nova-color-border, #dfe3ec); border-radius: 7px; display: flex; align-items: center; justify-content: center; gap: 6px; color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #f8f9ff); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; cursor: pointer; }
994
+ .property-action.is-danger { color: var(--nova-tone-danger-foreground); background: var(--nova-tone-danger-background, #fff7f8); border-color: var(--nova-tone-danger-border, #f0cdd1); }
995
+ .property-table { display: grid; gap: 5px; }
996
+ .property-table-head, .property-table-row { display: grid; grid-template-columns: repeat(var(--property-columns), minmax(0,1fr)) 24px; gap: 4px; align-items: center; }
997
+ .property-table-head { color: var(--nova-color-text-muted, #8993a5); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
998
+ .property-table-input { min-width: 0; height: 32px; border: 1px solid var(--nova-color-border, #e0e4ec); border-radius: 5px; padding: 0 6px; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
999
+ .property-row-remove { width: 24px; height: 24px; border: 0; padding: 0; display: grid; place-items: center; color: var(--nova-tone-danger-foreground); background: transparent; cursor: pointer; }
1000
+ .property-smart-select { position: relative; }
1001
+ .property-smart-icon { position: absolute; right: 9px; top: 50%; color: var(--nova-color-text-muted, #8993a5); pointer-events: none; transform: translateY(-50%); }
1002
+ .property-range { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: center; color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
1003
+ .property-empty-row { padding: 10px; border: 1px dashed var(--nova-color-border, #dfe3eb); border-radius: 6px; color: var(--nova-color-text-muted, #929bad); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; text-align: center; }
1004
+ .property-node-list { display: grid; gap: 7px; }
1005
+ .property-node-ref { box-sizing: border-box; width: 100%; min-width: 0; min-height: 50px; border: 1px solid var(--nova-color-border, #dfe3eb); border-radius: 10px; padding: 7px 9px; display: grid; grid-template-columns: 28px minmax(0,1fr) 14px; align-items: center; gap: 9px; color: var(--nova-color-text-secondary, #5d687b); background: var(--nova-color-surface, #fff); font: inherit; text-align: left; outline: none; cursor: pointer; transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease; }
1006
+ .property-node-ref:hover, .property-node-ref:focus-visible { border-color: var(--nova-tone-primary-border, #cbd2ff); background: var(--nova-color-primary-soft, #f8f9ff); box-shadow: 0 0 0 2px color-mix(in srgb, var(--nova-color-primary) 12%, transparent); }
1007
+ .property-node-ref-icon { width: 28px; height: 28px; border-radius: 8px; display: grid; place-items: center; color: var(--nova-tone-primary-foreground, #4f5bc8); background: var(--nova-color-primary-soft, #eef0ff); transition: color .15s ease, background-color .15s ease; }
1008
+ .property-node-ref-copy { min-width: 0; display: grid; gap: 3px; }
1009
+ .property-node-ref-copy strong, .property-node-ref-copy small { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1010
+ .property-node-ref-copy strong { color: var(--nova-color-text, #2e394d); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); }
1011
+ .property-node-ref-copy small { color: var(--nova-color-text-muted, #8791a3); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
1012
+ .property-node-ref-locate { color: var(--nova-color-text-muted, #8791a3); transition: color .15s ease, transform .15s ease; }
1013
+ .property-node-ref:hover .property-node-ref-locate, .property-node-ref:focus-visible .property-node-ref-locate { color: var(--nova-color-primary, #5361d6); transform: translate(1px, -1px); }
1014
+ .property-flow-list { display: grid; gap: 7px; }
1015
+ .property-flow-ref { width: 100%; min-height: 48px; border: 1px solid var(--nova-color-border); border-radius: 10px; padding: 7px 9px; display: grid; grid-template-columns: 22px minmax(0,1fr) 14px; align-items: center; gap: 8px; color: var(--nova-color-text-secondary); background: var(--nova-color-surface, #fff); text-align: left; cursor: pointer; }
1016
+ .property-flow-ref:hover, .property-flow-ref:focus-visible { border-color: var(--nova-tone-primary-border, #cbd2ff); background: var(--nova-color-primary-soft, #f8f9ff); outline: none; box-shadow: 0 0 0 2px color-mix(in srgb, var(--nova-color-primary) 12%, transparent); }
1017
+ .property-flow-index { width: 22px; height: 22px; border-radius: 7px; display: grid; place-items: center; color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #eef0ff); font-size: 10px; font-weight: 700; }
1018
+ .property-flow-copy { min-width: 0; display: grid; gap: 3px; }
1019
+ .property-flow-copy strong, .property-flow-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1020
+ .property-flow-copy strong { font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
1021
+ .property-flow-copy small { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
1022
+ .property-branch-list { display: grid; gap: 10px; }
1023
+ .property-branch-card { position: relative; overflow: hidden; border: 1px solid var(--nova-color-border); border-radius: 12px; padding: 11px; display: grid; gap: 10px; background: linear-gradient(180deg, var(--nova-color-surface, #fff) 0%, var(--nova-color-surface-subtle, #fbfcff) 100%); box-shadow: var(--nova-shadow-sm); transition: border-color .16s ease, box-shadow .16s ease; }
1024
+ .property-branch-card::before { content: ''; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--nova-color-border-strong); }
1025
+ .property-branch-card:hover { border-color: var(--nova-color-border-strong); box-shadow: var(--nova-shadow-md); }
1026
+ .property-branch-card.is-default { border-color: var(--nova-tone-primary-border, #cbd2ff); background: linear-gradient(180deg, var(--nova-color-surface, #fff) 0%, var(--nova-color-primary-soft, #f7f8ff) 100%); }
1027
+ .property-branch-card.is-default::before { background: var(--nova-color-primary, #5967d8); }
1028
+ .property-branch-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
1029
+ .property-branch-identity { min-width: 0; display: flex; align-items: center; gap: 8px; }
1030
+ .property-branch-identity > span { flex: none; width: 26px; height: 26px; border-radius: 8px; display: grid; place-items: center; color: var(--nova-tone-primary-foreground, #4f5bc8); background: var(--nova-color-primary-soft, #eef0ff); font-size: var(--nova-font-size-xs, 10px); font-weight: var(--nova-font-weight-bold, 700); }
1031
+ .property-branch-identity > div { min-width: 0; display: grid; gap: 3px; }
1032
+ .property-branch-identity strong { color: var(--nova-color-text); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); }
1033
+ .property-branch-identity small { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }
1034
+ .property-branch-locate { flex: none; height: 30px; border: 1px solid var(--nova-color-border); border-radius: 7px; padding: 0 8px; display: flex; align-items: center; gap: 4px; color: var(--nova-color-text-secondary); background: var(--nova-color-surface, #fff); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; cursor: pointer; }
1035
+ .property-branch-locate .nova-icon { color: var(--nova-color-primary); }.property-branch-locate:hover { border-color: var(--nova-tone-primary-border); color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #f5f6ff); }
1036
+ .property-branch-condition { display: grid; gap: 8px; }
1037
+ .property-branch-condition.is-single-field { grid-template-columns: minmax(0,1fr); }
1038
+ .property-branch-condition label { display: grid; gap: 4px; }
1039
+ .property-branch-condition label > span { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; font-weight: var(--nova-font-weight-semibold, 600); }
1040
+ .property-branch-condition .property-control { min-height: 36px; border-color: var(--nova-color-border); border-radius: 7px; padding: 8px; background: color-mix(in srgb, var(--nova-color-surface) 90%, transparent); font-size: var(--nova-font-size-sm, 12px); }
1041
+ .property-branch-condition textarea.property-control { min-height: 54px; resize: vertical; font-family: Menlo, Consolas, "Liberation Mono", monospace; font-size: var(--nova-font-size-sm, 12px); line-height: 18px; }
1042
+ .property-branch-foot { border-top: 1px solid var(--nova-color-divider, #edf0f5); padding-top: 9px; display: flex; align-items: center; gap: 8px; }
1043
+ .property-branch-foot.is-target-only { justify-content: flex-end; }
1044
+ .property-branch-default { flex: none; height: 28px; border: 1px solid var(--nova-color-border, #e0e4ec); border-radius: 14px; padding: 0 8px; display: flex; align-items: center; gap: 5px; color: var(--nova-color-text-muted); background: var(--nova-color-surface, #fff); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; cursor: pointer; }
1045
+ .property-branch-default input { position: absolute; opacity: 0; pointer-events: none; }
1046
+ .property-branch-default i { width: 8px; height: 8px; border: 1px solid var(--nova-color-border-strong); border-radius: 50%; background: var(--nova-color-surface, #fff); box-shadow: inset 0 0 0 2px var(--nova-color-surface, #fff); }
1047
+ .property-branch-default.is-active { border-color: var(--nova-tone-primary-border, #cbd2ff); color: var(--nova-tone-primary-foreground, #4f5bc8); background: var(--nova-color-primary-soft, #eef0ff); font-weight: var(--nova-font-weight-semibold, 600); }
1048
+ .property-branch-default.is-active i { border-color: var(--nova-color-primary, #5967d8); background: var(--nova-color-primary, #5967d8); }
1049
+ .property-branch-target { min-width: 0; flex: 1; display: grid; grid-template-columns: auto minmax(0,1fr) auto; align-items: center; gap: 5px; }
1050
+ .property-branch-target small { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs, 10px); line-height: 14px; }.property-branch-target strong { overflow: hidden; color: var(--nova-color-text-secondary); font-size: var(--nova-font-size-sm, 12px); line-height: 18px; font-weight: var(--nova-font-weight-semibold, 600); text-overflow: ellipsis; white-space: nowrap; }.property-branch-target > span { color: var(--nova-color-primary); font-size: var(--nova-font-size-sm, 12px); }
1051
+
1052
+ /* @bpmn-nova/studio */
1053
+ .nova-studio-shell { --nova-left-width: 244px; --nova-right-width: 360px; --nova-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif; --nova-font-size-xs: 10px; --nova-font-size-sm: 12px; --nova-font-size-md: 14px; --nova-font-size-lg: 16px; --nova-font-weight-regular: 400; --nova-font-weight-medium: 500; --nova-font-weight-semibold: 600; --nova-font-weight-bold: 700; width: 100%; height: 100%; min-height: 520px; overflow: hidden; display: grid; grid-template-rows: 58px minmax(0, 1fr); color: var(--nova-color-text, #263148); background: var(--nova-color-canvas, #f6f7fb); font-family: var(--nova-font-family); }
1054
+ .nova-studio-header { min-width: 0; border-bottom: 1px solid var(--nova-color-divider, #e4e8f0); background: var(--nova-color-surface, #fff); display: grid; grid-template-columns: minmax(180px, auto) auto minmax(0, 1fr); align-items: center; gap: 18px; padding: 0 12px 0 14px; }
1055
+ .nova-studio-brand { min-width: 0; display: flex; align-items: center; gap: 10px; }
1056
+ .nova-studio-brand-mark { flex: none; width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; color: var(--nova-color-text-inverse, #fff); background: linear-gradient(145deg, var(--nova-color-primary, #5362da), var(--nova-color-primary-hover)); font-size: var(--nova-font-size-md); font-weight: var(--nova-font-weight-bold); box-shadow: var(--nova-shadow-sm); }
1057
+ .nova-studio-brand-copy { min-width: 0; display: grid; gap: 2px; }
1058
+ .nova-studio-brand-copy strong { color: var(--nova-tone-primary-foreground, #3443b8); font-size: var(--nova-font-size-md); line-height: 20px; font-weight: var(--nova-font-weight-bold); letter-spacing: -.01em; }
1059
+ .nova-studio-brand-copy span { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--nova-color-text-muted, #7c8799); font-size: var(--nova-font-size-xs); line-height: 14px; }
1060
+ .nova-studio-center-controls { min-width: 0; justify-self: center; display: flex; align-items: center; gap: 8px; }
1061
+ .nova-studio-mode-switch { height: 36px; border: 1px solid var(--nova-color-divider, #e6e8ef); border-radius: 10px; padding: 3px; display: flex; align-items: center; gap: 2px; background: var(--nova-color-surface-muted, #f4f5f8); box-shadow: inset 0 1px 2px rgba(35,43,68,.03); }
1062
+ .nova-studio-mode-switch button { height: 28px; border: 0; border-radius: 7px; padding: 0 12px; display: flex; align-items: center; gap: 5px; color: var(--nova-color-text-muted, #8a93a4); background: transparent; font-size: var(--nova-font-size-sm); line-height: 18px; white-space: nowrap; cursor: pointer; }
1063
+ .nova-studio-mode-switch button.is-active { color: var(--nova-tone-primary-foreground, #4f5dd1); background: var(--nova-color-surface, #fff); font-weight: var(--nova-font-weight-semibold); box-shadow: var(--nova-shadow-sm); }
1064
+ .nova-studio-projection-switch { height: 32px; border: 1px solid var(--nova-color-border, #e2e6ef); border-radius: 8px; padding: 2px; display: flex; align-items: center; gap: 2px; background: var(--nova-color-surface, #fff); }
1065
+ .nova-studio-projection-switch.is-hidden { display: none; }
1066
+ .nova-studio-projection-switch button { height: 26px; border: 0; border-radius: 6px; padding: 0 9px; color: var(--nova-color-text-muted, #7c8799); background: transparent; font-size: var(--nova-font-size-sm); line-height: 18px; white-space: nowrap; cursor: pointer; }
1067
+ .nova-studio-projection-switch button:hover { color: var(--nova-tone-primary-foreground, #4d59ca); background: var(--nova-color-primary-soft, #f4f5ff); }.nova-studio-projection-switch button.is-active { color: var(--nova-tone-primary-foreground, #4654c8); background: var(--nova-color-primary-soft, #eef0ff); font-weight: var(--nova-font-weight-semibold); }
1068
+ .nova-studio-tools { min-width: 0; overflow: visible; display: flex; align-items: center; justify-content: flex-end; gap: 5px; }
1069
+ .nova-studio-tools::-webkit-scrollbar { display: none; }
1070
+ .nova-studio-tool-divider { flex: none; width: 1px; height: 20px; margin: 0 2px; background: var(--nova-color-divider, #e4e8f0); }
1071
+ .nova-studio-tool { flex: none; min-height: 32px; border: 1px solid var(--nova-color-border, #e2e6ef); border-radius: 7px; padding: 0 10px; display: inline-flex; align-items: center; justify-content: center; gap: 5px; color: var(--nova-color-text-secondary, #4c586d); background: var(--nova-color-surface, #fff); font-size: var(--nova-font-size-sm); line-height: 18px; white-space: nowrap; cursor: pointer; }
1072
+ .nova-studio-tool:focus { outline: none; }.nova-studio-tool:focus-visible { outline: 2px solid var(--nova-color-focus-ring, #aeb7ff); outline-offset: 1px; }
1073
+ .nova-studio-tool.is-icon { width: 31px; padding: 0; font-size: 14px; }
1074
+ .nova-studio-tool:hover, .nova-studio-tool.is-active { border-color: var(--nova-tone-primary-border, #bec6ff); color: var(--nova-tone-primary-foreground, #3948c5); background: var(--nova-color-primary-soft, #f2f4ff); }
1075
+ .nova-studio-tool.is-magic { border-color: var(--nova-tone-primary-border, #d9ddff); color: var(--nova-tone-primary-foreground, #4654c8); background: var(--nova-color-primary-soft, #f4f5ff); font-weight: var(--nova-font-weight-semibold); }
1076
+ .nova-studio-tool.is-primary { border-color: var(--nova-color-primary); color: var(--nova-color-text-inverse, #fff); background: var(--nova-color-primary, #5361d6); }
1077
+ .nova-studio-tool.is-primary:hover { border-color: var(--nova-color-primary-hover); color: var(--nova-color-text-inverse, #fff); background: var(--nova-color-primary-hover); }
1078
+ .nova-studio-tool:disabled { opacity: .4; cursor: default; }
1079
+ .nova-studio-import-input { display: none; }
1080
+ .nova-studio-beautify-split { position: relative; flex: none; display: flex; }
1081
+ .nova-studio-beautify-split .nova-studio-beautify { border-radius: 7px 0 0 7px; }
1082
+ .nova-studio-beautify-split .nova-studio-beautify-caret { width: 27px; border-left: 0; border-radius: 0 7px 7px 0; padding: 0; }
1083
+ .nova-studio-beautify-menu { position: absolute; z-index: 30; top: calc(100% + 8px); right: 0; width: 224px; border: 1px solid var(--nova-color-border, #e5e7ee); border-radius: 12px; padding: 12px; color: var(--nova-color-text-secondary, #3d4659); background: var(--nova-color-surface, #fff); box-shadow: var(--nova-shadow-lg); }
1084
+ .nova-studio-beautify-menu.is-hidden, .nova-studio-canvas-floating-head.is-hidden, .is-hidden-by-mode { display: none !important; }
1085
+ .nova-studio-beautify-title { margin-bottom: 9px; font-size: 12px; font-weight: 700; line-height: 18px; }
1086
+ .nova-studio-density { height: 32px; border-radius: 7px; padding: 3px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 2px; background: var(--nova-color-surface-muted, #f2f3f6); }
1087
+ .nova-studio-density button { border: 0; border-radius: 5px; color: var(--nova-color-text-secondary, #687386); background: transparent; font-size: var(--nova-font-size-sm); line-height: 18px; cursor: pointer; }
1088
+ .nova-studio-density button.is-active { color: var(--nova-tone-primary-foreground, #4d59ca); background: var(--nova-color-surface, #fff); font-weight: var(--nova-font-weight-semibold); box-shadow: var(--nova-shadow-sm); }
1089
+ .nova-studio-beautify-actions { margin-top: 9px; display: grid; gap: 3px; }
1090
+ .nova-studio-beautify-action { min-height: 48px; border: 0; border-radius: 8px; padding: 7px 8px; display: grid; grid-template-columns: 27px 1fr; grid-template-rows: 16px 15px; column-gap: 8px; color: var(--nova-color-text-secondary, #465166); background: transparent; text-align: left; cursor: pointer; }
1091
+ .nova-studio-beautify-action:hover { color: var(--nova-tone-primary-foreground, #4654c8); background: var(--nova-color-primary-soft, #f4f5ff); }
1092
+ .nova-studio-beautify-action > .nova-studio-beautify-action-icon { grid-row: 1 / 3; width: 25px; height: 25px; border-radius: 7px; display: grid; place-items: center; color: var(--nova-color-primary, #5361d6); background: var(--nova-color-primary-soft, #eef0ff); }
1093
+ .nova-studio-beautify-action-icon > .nova-icon-svg { width: 14px; height: 14px; }
1094
+ .nova-studio-beautify-action strong { font-size: var(--nova-font-size-sm); font-weight: var(--nova-font-weight-semibold); line-height: 18px; }.nova-studio-beautify-action small { color: #778195; color: var(--nova-color-text-muted, #778195); font-size: var(--nova-font-size-xs); line-height: 14px; }
1095
+ .nova-studio-body { min-width: 0; min-height: 0; display: grid; grid-template-columns: var(--nova-left-width) minmax(320px, 1fr) var(--nova-right-width); }
1096
+ .nova-studio-body.is-readonly { grid-template-columns: minmax(320px, 1fr) var(--nova-right-width); }
1097
+ .nova-studio-body.is-readonly .nova-studio-left { display: none; }
1098
+ .nova-studio-left, .nova-studio-right, .nova-studio-canvas-column, .nova-studio-canvas { min-width: 0; min-height: 0; overflow: hidden; }
1099
+ .nova-studio-left { border-right: 1px solid var(--nova-color-divider, #e4e8f0); background: var(--nova-color-surface, #fff); overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; }
1100
+ .nova-studio-right { border-left: 1px solid var(--nova-color-divider, #e4e8f0); background: var(--nova-color-surface, #fff); overflow: auto; }
1101
+ .nova-studio-left, .nova-studio-right { scrollbar-width: thin; scrollbar-color: #d9dee7 transparent; scrollbar-color: var(--nova-color-border-strong, #d9dee7) transparent; }
1102
+ .nova-studio-left::-webkit-scrollbar, .nova-studio-right::-webkit-scrollbar { width: 4px; height: 4px; }
1103
+ .nova-studio-left::-webkit-scrollbar-track, .nova-studio-right::-webkit-scrollbar-track { background: transparent; }
1104
+ .nova-studio-left::-webkit-scrollbar-thumb, .nova-studio-right::-webkit-scrollbar-thumb { min-height: 40px; background: #d9dee7; background: var(--nova-color-border-strong, #d9dee7); border-radius: 999px; }
1105
+ .nova-studio-left::-webkit-scrollbar-thumb:hover, .nova-studio-right::-webkit-scrollbar-thumb:hover { background: #c1c9d5; background: var(--nova-color-text-muted); }
1106
+ .nova-studio-left::-webkit-scrollbar-button, .nova-studio-right::-webkit-scrollbar-button { display: none; width: 0; height: 0; }
1107
+ .nova-studio-canvas-column { display: grid; grid-template-rows: minmax(0, 1fr) 35px; background: var(--nova-color-canvas, #f7f8fc); }
1108
+ .nova-studio-canvas-stage { position: relative; min-width: 0; min-height: 0; overflow: hidden; }
1109
+ .nova-studio-canvas { position: relative; }
1110
+ .nova-studio-canvas-stage > .nova-studio-canvas { width: 100%; height: 100%; }
1111
+ .nova-selection-toolbar {
1112
+ position: absolute;
1113
+ z-index: 24;
1114
+ min-height: 38px;
1115
+ border: 1px solid var(--nova-color-border, #dfe3ed);
1116
+ border-radius: 10px;
1117
+ padding: 4px;
1118
+ display: flex;
1119
+ align-items: center;
1120
+ gap: 3px;
1121
+ color: var(--nova-color-text-secondary, #536071);
1122
+ background: color-mix(in srgb, var(--nova-color-surface) 98%, transparent);
1123
+ box-shadow: var(--nova-shadow-md);
1124
+ pointer-events: auto;
1125
+ }
1126
+ .nova-selection-toolbar[hidden] { display: none; }
1127
+ .nova-pointer-toolbar {
1128
+ position: absolute;
1129
+ z-index: 23;
1130
+ top: 10px;
1131
+ right: 10px;
1132
+ height: 36px;
1133
+ border: 1px solid var(--nova-color-border, #dfe3ed);
1134
+ border-radius: 10px;
1135
+ padding: 3px;
1136
+ display: flex;
1137
+ align-items: center;
1138
+ gap: 2px;
1139
+ color: var(--nova-color-text-secondary);
1140
+ background: color-mix(in srgb, var(--nova-color-surface) 96%, transparent);
1141
+ box-shadow: var(--nova-shadow-md);
1142
+ pointer-events: auto;
1143
+ }
1144
+ .nova-pointer-mode { height: 28px; border: 0; border-radius: 7px; padding: 0 8px; display: inline-flex; align-items: center; gap: 5px; color: inherit; background: transparent; font-size: var(--nova-font-size-sm); font-weight: var(--nova-font-weight-semibold); cursor: pointer; }
1145
+ .nova-pointer-mode:hover { color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #f3f4ff); }
1146
+ .nova-pointer-mode.is-active { color: var(--nova-tone-primary-foreground, #4050c4); background: var(--nova-color-primary-soft, #eceeff); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--nova-color-primary) 10%, transparent); }
1147
+ .nova-pointer-mode:focus-visible { outline: 2px solid var(--nova-color-focus-ring, rgba(82,92,214,.52)); outline-offset: 1px; }
1148
+ .nova-context-menu {
1149
+ position: absolute;
1150
+ z-index: 50;
1151
+ width: 226px;
1152
+ max-height: calc(100% - 16px);
1153
+ border: 1px solid var(--nova-color-border, #dfe3ec);
1154
+ border-radius: 12px;
1155
+ padding: 6px;
1156
+ overflow: visible;
1157
+ color: var(--nova-color-text-secondary, #4d586c);
1158
+ background: color-mix(in srgb, var(--nova-color-surface) 99%, transparent);
1159
+ box-shadow: var(--nova-shadow-lg);
1160
+ font-size: 12px;
1161
+ pointer-events: auto;
1162
+ }
1163
+ .nova-context-menu[hidden] { display: none; }
1164
+ .nova-context-item {
1165
+ width: 100%;
1166
+ min-height: 38px;
1167
+ border: 0;
1168
+ border-radius: 8px;
1169
+ padding: 0 9px;
1170
+ display: flex;
1171
+ align-items: center;
1172
+ gap: 9px;
1173
+ color: inherit;
1174
+ background: transparent;
1175
+ font: inherit;
1176
+ font-weight: var(--nova-font-weight-medium);
1177
+ text-align: left;
1178
+ white-space: nowrap;
1179
+ cursor: pointer;
1180
+ }
1181
+ .nova-context-item > .nova-icon { flex: none; width: 18px; height: 18px; color: var(--nova-color-primary, #6875cf); }
1182
+ .nova-context-item > .nova-icon-svg { width: 18px; height: 18px; shape-rendering: geometricPrecision; }
1183
+ .nova-context-item:hover, .nova-context-item:focus-visible { color: var(--nova-tone-primary-foreground, #3f4dc2); background: var(--nova-color-primary-soft); outline: none; }
1184
+ .nova-context-item.is-active { color: var(--nova-tone-primary-foreground, #3f4dc2); background: var(--nova-color-primary-soft, #eceeff); font-weight: var(--nova-font-weight-semibold); }
1185
+ .nova-context-item.is-danger { color: var(--nova-tone-danger-foreground, #c14c59); }
1186
+ .nova-context-item.is-danger > .nova-icon { color: var(--nova-tone-danger-strong, #cf5664); }
1187
+ .nova-context-item.is-danger:hover, .nova-context-item.is-danger:focus-visible { color: var(--nova-tone-danger-foreground, #ad3443); background: var(--nova-tone-danger-background, #fff0f2); }
1188
+ .nova-context-item:disabled { color: var(--nova-color-text-muted, #aeb5c1); background: transparent; cursor: not-allowed; }
1189
+ .nova-context-item:disabled > .nova-icon { color: var(--nova-color-text-muted, #bdc3cd); }
1190
+ .nova-context-label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
1191
+ .nova-context-separator { height: 1px; margin: 5px 7px; background: var(--nova-color-divider, #e9ebf1); }
1192
+ .nova-context-submenu { position: relative; }
1193
+ .nova-context-submenu > .nova-context-item > .nova-icon:last-child { width: 12px; height: 12px; color: var(--nova-color-text-muted, #9aa3b2); transform: rotate(-90deg); }
1194
+ .nova-context-submenu-panel {
1195
+ position: absolute;
1196
+ z-index: 1;
1197
+ top: -6px;
1198
+ left: calc(100% + 7px);
1199
+ width: 218px;
1200
+ border: 1px solid var(--nova-color-border, #dfe3ec);
1201
+ border-radius: 11px;
1202
+ padding: 6px;
1203
+ overflow-x: hidden;
1204
+ overflow-y: auto;
1205
+ background: var(--nova-color-surface, #fff);
1206
+ box-shadow: var(--nova-shadow-lg);
1207
+ }
1208
+ .nova-context-submenu-panel[hidden] { display: none; }
1209
+ .nova-context-submenu.is-flipped > .nova-context-submenu-panel { right: calc(100% + 7px); left: auto; }
1210
+ .nova-context-submenu-panel { scrollbar-width: thin; scrollbar-color: var(--nova-color-border-strong, #d9dee7) transparent; }
1211
+ .nova-context-submenu-panel::-webkit-scrollbar { width: 4px; }
1212
+ .nova-context-submenu-panel::-webkit-scrollbar-thumb { background: var(--nova-color-border-strong, #d9dee7); border-radius: 999px; }
1213
+ @media (max-width: 1080px) {
1214
+ .nova-pointer-mode > span:last-child { display: none; }
1215
+ .nova-pointer-mode { width: 28px; padding: 0; justify-content: center; }
1216
+ }
1217
+ .nova-selection-action {
1218
+ min-width: 30px;
1219
+ height: 30px;
1220
+ border: 0;
1221
+ border-radius: 7px;
1222
+ padding: 0 7px;
1223
+ display: inline-flex;
1224
+ align-items: center;
1225
+ justify-content: center;
1226
+ gap: 5px;
1227
+ color: inherit;
1228
+ background: transparent;
1229
+ font: inherit;
1230
+ font-size: var(--nova-font-size-sm);
1231
+ font-weight: var(--nova-font-weight-semibold);
1232
+ white-space: nowrap;
1233
+ cursor: pointer;
1234
+ }
1235
+ .nova-selection-action:hover { color: var(--nova-tone-primary-foreground, #4654c8); background: var(--nova-color-primary-soft, #f0f1ff); }
1236
+ .nova-selection-action:focus-visible { outline: 2px solid var(--nova-color-focus-ring, rgba(82,92,214,.52)); outline-offset: 1px; }
1237
+ .nova-selection-action:disabled { color: var(--nova-color-text-muted, #b1b8c5); background: transparent; cursor: not-allowed; }
1238
+ .nova-selection-action.has-label { color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #f1f2ff); }
1239
+ .nova-selection-action.has-label:hover { color: var(--nova-color-primary-hover); background: color-mix(in srgb, var(--nova-color-primary-soft) 88%, var(--nova-color-primary)); }
1240
+ .nova-selection-separator { width: 1px; height: 20px; margin: 0 2px; background: var(--nova-color-divider, #e6e8ef); }
1241
+ .nova-selection-menu { position: relative; }
1242
+ .nova-selection-menu > summary { list-style: none; cursor: pointer; }
1243
+ .nova-selection-menu > summary::-webkit-details-marker { display: none; }
1244
+ .nova-selection-menu > summary .nova-icon:last-child { width: 9px; height: 9px; transition: transform .14s ease; }
1245
+ .nova-selection-menu[open] > summary .nova-icon:last-child { transform: rotate(180deg); }
1246
+ .nova-selection-menu.is-disabled > summary { color: var(--nova-color-text-muted, #b1b8c5); cursor: not-allowed; }
1247
+ .nova-selection-popover {
1248
+ position: absolute;
1249
+ left: 0;
1250
+ bottom: calc(100% + 9px);
1251
+ width: 218px;
1252
+ border: 1px solid var(--nova-color-border);
1253
+ border-radius: 10px;
1254
+ padding: 5px;
1255
+ display: grid;
1256
+ grid-template-columns: repeat(3, 1fr);
1257
+ gap: 5px;
1258
+ background: var(--nova-color-surface, #fff);
1259
+ box-shadow: var(--nova-shadow-lg);
1260
+ }
1261
+ .nova-selection-toolbar.is-below .nova-selection-popover { top: calc(100% + 9px); bottom: auto; }
1262
+ .nova-selection-popover .nova-selection-action {
1263
+ width: 66px;
1264
+ height: 56px;
1265
+ padding: 5px 3px 4px;
1266
+ flex-direction: column;
1267
+ gap: 3px;
1268
+ color: var(--nova-color-text-secondary, #596477);
1269
+ font-size: 10px;
1270
+ font-weight: 600;
1271
+ line-height: 14px;
1272
+ }
1273
+ .nova-selection-popover .nova-selection-action:hover { color: var(--nova-tone-primary-foreground, #4654c8); background: var(--nova-color-primary-soft, #f0f1ff); }
1274
+ .nova-selection-popover .nova-icon { width: 20px; height: 20px; }
1275
+ .nova-selection-popover .nova-icon-svg { width: 20px; height: 20px; shape-rendering: geometricPrecision; }
1276
+ @media (max-width: 1080px) {
1277
+ .nova-selection-action.has-label > span:last-child { display: none; }
1278
+ .nova-selection-action.has-label { min-width: 30px; padding: 0 7px; }
1279
+ }
1280
+ .nova-studio-canvas-floating-head { position: absolute; z-index: 8; top: 10px; left: 14px; right: 14px; min-width: 0; display: flex; align-items: center; gap: 8px; pointer-events: none; }
1281
+ .nova-studio-editing-mode { flex: none; height: 36px; border: 1px solid var(--nova-color-border, #e1e5ef); border-radius: 10px; padding: 0 10px; display: flex; align-items: center; gap: 6px; color: var(--nova-tone-primary-foreground); background: color-mix(in srgb, var(--nova-color-surface) 94%, transparent); font-size: var(--nova-font-size-sm); line-height: 18px; font-weight: var(--nova-font-weight-semibold); box-shadow: 0 5px 16px rgba(37,45,72,.10); box-shadow: var(--nova-shadow-md); }
1282
+ .nova-studio-editing-mode-label { color: var(--nova-tone-primary-foreground); font-size: var(--nova-font-size-sm); line-height: 18px; white-space: nowrap; }
1283
+ .nova-studio-scope-back { flex: none; height: 36px; border: 1px solid var(--nova-tone-primary-border, #d9ddff); border-radius: 10px; padding: 0 10px; display: inline-flex; align-items: center; gap: 5px; color: var(--nova-tone-primary-foreground); background: var(--nova-color-primary-soft, #f0f1ff); font-size: var(--nova-font-size-sm); line-height: 18px; font-weight: var(--nova-font-weight-semibold); white-space: nowrap; cursor: pointer; pointer-events: auto; box-shadow: 0 5px 16px rgba(37,45,72,.10); box-shadow: var(--nova-shadow-md); transition: color .14s ease, background .14s ease, border-color .14s ease; }
1284
+ .nova-studio-scope-back[hidden] { display: none; }
1285
+ .nova-studio-scope-back:hover { color: var(--nova-color-primary-hover); border-color: var(--nova-color-primary); background: color-mix(in srgb, var(--nova-color-primary-soft) 88%, var(--nova-color-primary)); }
1286
+ .nova-studio-scope-nav { flex: 0 1 auto; min-width: 54px; max-width: min(520px, calc(100% - 190px)); height: 36px; border: 1px solid var(--nova-color-border, #e1e5ef); border-radius: 10px; padding: 0 7px; display: flex; align-items: center; gap: 2px; overflow: hidden; color: var(--nova-color-text-muted); background: color-mix(in srgb, var(--nova-color-surface) 94%, transparent); box-shadow: 0 5px 16px rgba(37,45,72,.10); box-shadow: var(--nova-shadow-md); pointer-events: auto; }
1287
+ .nova-studio-scope-nav button { flex: 1 1 auto; min-width: 0; max-width: 150px; height: 28px; border: 0; border-radius: 7px; padding: 0 6px; overflow: hidden; color: var(--nova-tone-primary-foreground); background: transparent; font-size: var(--nova-font-size-sm); line-height: 18px; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; transition: color .14s ease, background .14s ease; }
1288
+ .nova-studio-scope-nav button:hover { color: var(--nova-tone-primary-foreground, #3f4dc2); background: var(--nova-color-primary-soft, #f0f1ff); }
1289
+ .nova-studio-scope-current { flex: 0 1 auto; min-width: 36px; max-width: 180px; overflow: hidden; color: var(--nova-color-text-secondary); font-size: var(--nova-font-size-sm); line-height: 18px; font-weight: var(--nova-font-weight-semibold); text-overflow: ellipsis; white-space: nowrap; }
1290
+ .nova-studio-scope-separator { flex: none; width: 12px; height: 12px; color: var(--nova-color-text-muted); transform: rotate(-90deg); }
1291
+ .nova-studio-scope-back:focus-visible, .nova-studio-scope-nav button:focus-visible { outline: 2px solid var(--nova-color-focus-ring, rgba(82,92,214,.55)); outline-offset: 1px; }
1292
+ .nova-studio-statusbar { min-width: 0; border-top: 1px solid var(--nova-color-border); padding: 0 9px 0 12px; display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--nova-color-text-muted); background: color-mix(in srgb, var(--nova-color-surface) 96%, transparent); }
1293
+ .nova-studio-status-left, .nova-studio-viewport-tools { display: flex; align-items: center; gap: 7px; }
1294
+ .nova-studio-status-left { min-width: 0; font-size: var(--nova-font-size-xs); line-height: 14px; }
1295
+ .nova-studio-status-left span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1296
+ .nova-studio-status-left i { flex: none; width: 7px; height: 7px; border-radius: 50%; }
1297
+ .nova-studio-status-left i.is-ok { background: var(--nova-tone-success-strong); }.nova-studio-status-left i.is-warning { background: var(--nova-tone-warning-strong); }.nova-studio-status-left i.is-error { background: var(--nova-tone-danger-strong); }
1298
+ .nova-studio-viewport-tools { flex: none; gap: 3px; }
1299
+ .nova-studio-viewport-tools.is-hidden { display: none; }
1300
+ .nova-studio-viewport-tools button { min-width: 26px; height: 26px; border: 1px solid var(--nova-color-border, #e2e6ef); border-radius: 5px; padding: 0 6px; display: grid; place-items: center; color: var(--nova-color-text-secondary); background: var(--nova-color-surface, #fff); font-size: var(--nova-font-size-sm); cursor: pointer; }
1301
+ .nova-studio-viewport-tools button:hover { color: var(--nova-tone-primary-foreground, #3f4dc2); background: var(--nova-color-primary-soft); }
1302
+ .nova-studio-viewport-tools button.is-text { font-size: var(--nova-font-size-xs); }
1303
+ .nova-studio-viewport-tools button.is-fit { font-size: 12px; }
1304
+ .nova-studio-zoom-text { min-width: 40px; font-size: var(--nova-font-size-xs); line-height: 14px; text-align: center; }
1305
+ .nova-studio-status-divider { width: 1px; height: 17px; margin: 0 4px; background: var(--nova-color-divider); }
1306
+ .nova-studio-readonly-panel { min-height: 100%; background: var(--nova-color-surface, #fff); }
1307
+ .nova-studio-readonly-header { position: relative; border-bottom: 1px solid var(--nova-color-divider); padding: 18px 16px 14px; display: grid; gap: 4px; }
1308
+ .nova-studio-readonly-header strong { padding-right: 65px; color: var(--nova-color-text); font-size: var(--nova-font-size-md); line-height: 20px; }.nova-studio-readonly-header span { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs); line-height: 14px; }.nova-studio-readonly-header em { position: absolute; top: 17px; right: 14px; border-radius: 10px; padding: 3px 8px; color: var(--nova-color-primary, #5361d6); background: var(--nova-color-primary-soft, #eef0ff); font-size: var(--nova-font-size-xs); line-height: 14px; font-style: normal; }
1309
+ .nova-studio-readonly-body { padding: 12px 15px; display: grid; gap: 10px; }
1310
+ .nova-studio-readonly-row { display: grid; gap: 4px; }.nova-studio-readonly-row span { color: var(--nova-color-text-muted); font-size: var(--nova-font-size-xs); line-height: 14px; }.nova-studio-readonly-row strong { min-height: 32px; border: 1px solid var(--nova-color-border); border-radius: 7px; padding: 0 9px; display: flex; align-items: center; color: var(--nova-color-text-secondary, #4d586c); background: var(--nova-color-surface-subtle, #fafbfc); font-size: var(--nova-font-size-sm); line-height: 18px; font-weight: var(--nova-font-weight-medium); }
1311
+ @media (max-width: 1120px) {
1312
+ .nova-studio-shell { --nova-left-width: 210px; --nova-right-width: 320px; }
1313
+ .nova-studio-header { grid-template-columns: minmax(150px, auto) minmax(0,1fr); gap: 10px; }
1314
+ .nova-studio-mode-switch { display: none; }
1315
+ .nova-studio-projection-switch { display: flex; }
1316
+ .nova-studio-brand-copy span { max-width: 115px; }
1317
+ }
1318
+ @media (max-width: 820px) {
1319
+ .nova-studio-shell { --nova-left-width: 186px; --nova-right-width: 280px; }
1320
+ .nova-studio-brand-copy span { display: none; }
1321
+ }
1322
+ @media (max-width: 720px) {
1323
+ .nova-studio-shell { grid-template-rows: 54px minmax(0,1fr); }
1324
+ .nova-studio-header { grid-template-columns: auto minmax(0,1fr); padding-left: 9px; }
1325
+ .nova-studio-brand-copy { display: none; }
1326
+ .nova-studio-body { grid-template-columns: 1fr; }
1327
+ .nova-studio-body.is-readonly { grid-template-columns: 1fr; }
1328
+ .nova-studio-left, .nova-studio-right { display: none; }
1329
+ .nova-studio-center-controls { display: none; }
1330
+ .nova-studio-projection-switch { display: none; }
1331
+ .nova-studio-body.is-timeline .nova-studio-canvas-column { grid-template-rows: minmax(0, 1fr); }
1332
+ .nova-studio-body.is-timeline .nova-studio-statusbar { display: none; }
1333
+ }
1334
+