@processengine/uikit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,807 @@
1
+ /* ── Design tokens (admin UI compatible) ─────────────── */
2
+ :root {
3
+ --page-bg: #f5f3ee;
4
+ --page-glow:
5
+ radial-gradient(circle at top left, rgba(79, 70, 229, 0.08), transparent 28rem),
6
+ radial-gradient(circle at top right, rgba(251, 191, 36, 0.08), transparent 24rem);
7
+
8
+ --surface-canvas: rgba(255, 255, 255, 0.52);
9
+ --surface-card: #ffffff;
10
+ --surface-subtle: #faf7f1;
11
+ --surface-muted: #f3efe7;
12
+ --surface-hover: #fffdf9;
13
+
14
+ --text-strong: #1a1a2e;
15
+ --text-strong-soft: #23233a;
16
+ --text-medium: #4b5563;
17
+ --text-dim: #6b7280;
18
+ --text-muted: #8b95a7;
19
+ --text-faint: #a2aaba;
20
+
21
+ --border-color: #e8e5df;
22
+ --border-strong: #d8d2c8;
23
+
24
+ --accent-color: #4f46e5;
25
+ --accent-soft: #eef2ff;
26
+
27
+ --ok-bg: #f0fdf4; --ok-border: #bbf7d0; --ok-text: #166534;
28
+ --err-bg: #fff1f2; --err-border: #fecdd3; --err-text: #be123c;
29
+ --neu-bg: #f1f5f9; --neu-border: #cbd5e1; --neu-text: #334155;
30
+ --warn-bg: #fffbeb; --warn-border:#fde68a; --warn-text:#92400e;
31
+
32
+ --stage-ok-bg: #f0fdf4; --stage-ok-border: #bbf7d0; --stage-ok-accent: #16a34a;
33
+ --stage-err-bg: #fff1f2; --stage-err-border: #fecdd3; --stage-err-accent: #e11d48;
34
+ --stage-neu-bg: #f8fafc; --stage-neu-border: #e2e8f0; --stage-neu-accent: #94a3b8;
35
+ --stage-act-bg: #fffbeb; --stage-act-border: #fde68a; --stage-act-accent: #d97706;
36
+
37
+ --font-sans: Inter, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
38
+ --font-mono: 'JetBrains Mono', 'SFMono-Regular', Menlo, Consolas, 'Liberation Mono', monospace;
39
+
40
+ --shadow-sm: 0 2px 8px rgba(26, 26, 46, 0.06);
41
+ --shadow-md: 0 4px 20px rgba(26, 26, 46, 0.09);
42
+ --shadow-lg: 0 8px 32px rgba(26, 26, 46, 0.12);
43
+
44
+ --r-sm: 0.625rem;
45
+ --r-md: 0.875rem;
46
+ --r-lg: 1.25rem;
47
+ --r-xl: 1.75rem;
48
+ }
49
+
50
+ /* ── Reset ───────────────────────────────────────────── */
51
+ *, *::before, *::after { box-sizing: border-box; }
52
+ html { background: var(--page-bg); }
53
+ body {
54
+ margin: 0;
55
+ min-height: 100svh;
56
+ background: var(--page-bg);
57
+ background-image: var(--page-glow);
58
+ color: var(--text-strong);
59
+ font-family: var(--font-sans);
60
+ font-size: 100%;
61
+ line-height: 1.5;
62
+ -webkit-font-smoothing: antialiased;
63
+ -moz-osx-font-smoothing: grayscale;
64
+ }
65
+ p, h1, h2, h3 { margin: 0; }
66
+ button, input, select, textarea { font: inherit; }
67
+ a { color: inherit; }
68
+
69
+ /* ── Page shell ──────────────────────────────────────── */
70
+ .sb-page {
71
+ padding: clamp(1rem, 2.5vw, 1.75rem);
72
+ min-height: 100svh;
73
+ }
74
+
75
+ .sb-frame {
76
+ max-width: 90rem;
77
+ margin: 0 auto;
78
+ padding: 0.875rem;
79
+ border: 0.0625rem solid rgba(255, 255, 255, 0.72);
80
+ border-radius: calc(var(--r-xl) + 0.5rem);
81
+ background: var(--surface-canvas);
82
+ box-shadow: var(--shadow-lg);
83
+ backdrop-filter: blur(12px);
84
+ }
85
+
86
+ /* ── Toolbar ─────────────────────────────────────────── */
87
+ .sb-toolbar {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 0.875rem;
91
+ padding: 0.625rem 0.875rem;
92
+ border: 0.0625rem solid var(--border-color);
93
+ border-radius: calc(var(--r-lg) - 0.125rem);
94
+ background: var(--surface-card);
95
+ box-shadow: var(--shadow-sm);
96
+ flex-wrap: wrap;
97
+ }
98
+
99
+ .sb-toolbar__brand {
100
+ display: inline-flex;
101
+ align-items: center;
102
+ gap: 0.625rem;
103
+ flex-shrink: 0;
104
+ }
105
+ .sb-mark {
106
+ display: inline-flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ width: 2rem;
110
+ height: 2rem;
111
+ border-radius: 999px;
112
+ background: var(--text-strong);
113
+ color: #fff;
114
+ font-weight: 800;
115
+ font-size: 0.95rem;
116
+ letter-spacing: -0.02em;
117
+ flex-shrink: 0;
118
+ }
119
+ .sb-brand-name {
120
+ font-size: 1rem;
121
+ font-weight: 700;
122
+ letter-spacing: -0.02em;
123
+ }
124
+
125
+ .sb-breadcrumb {
126
+ display: inline-flex;
127
+ align-items: center;
128
+ gap: 0.45rem;
129
+ min-width: 0;
130
+ color: var(--text-dim);
131
+ font-size: 0.86rem;
132
+ }
133
+ .sb-crumb { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
134
+ .sb-crumb--current { color: var(--text-strong); font-weight: 600; }
135
+ .sb-crumb-sep { color: var(--text-faint); }
136
+
137
+ .sb-toolbar__actions {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 0.5rem;
141
+ margin-left: auto;
142
+ flex-wrap: nowrap;
143
+ }
144
+
145
+ /* ── Buttons ─────────────────────────────────────────── */
146
+ .sb-btn {
147
+ display: inline-flex;
148
+ align-items: center;
149
+ gap: 0.4rem;
150
+ padding: 0.5rem 0.875rem;
151
+ border: 0.0625rem solid transparent;
152
+ border-radius: 999px;
153
+ font-size: 0.82rem;
154
+ font-weight: 600;
155
+ cursor: pointer;
156
+ white-space: nowrap;
157
+ transition: background 140ms, border-color 140ms, box-shadow 140ms, opacity 140ms;
158
+ }
159
+ .sb-btn:disabled { opacity: 0.48; cursor: not-allowed; }
160
+
161
+ .sb-btn--ghost {
162
+ background: var(--surface-subtle);
163
+ border-color: var(--border-color);
164
+ color: var(--text-medium);
165
+ }
166
+ .sb-btn--ghost:not(:disabled):hover {
167
+ background: var(--surface-hover);
168
+ border-color: var(--border-strong);
169
+ color: var(--text-strong);
170
+ }
171
+
172
+ .sb-btn--primary {
173
+ background: var(--text-strong);
174
+ color: #fff;
175
+ box-shadow: var(--shadow-sm);
176
+ }
177
+ .sb-btn--primary:not(:disabled):hover {
178
+ background: var(--text-strong-soft);
179
+ box-shadow: var(--shadow-md);
180
+ }
181
+
182
+ /* ── Body layout ─────────────────────────────────────── */
183
+ .sb-body { padding: 1.5rem 1rem 1rem; }
184
+
185
+ .sb-page-header { margin-bottom: 1.5rem; }
186
+ .sb-page-title {
187
+ font-size: clamp(1.9rem, 3.5vw, 2.6rem);
188
+ font-weight: 800;
189
+ letter-spacing: -0.04em;
190
+ line-height: 0.98;
191
+ color: var(--text-strong);
192
+ margin-bottom: 0.5rem;
193
+ }
194
+ .sb-page-subtitle {
195
+ max-width: 44rem;
196
+ font-size: 1rem;
197
+ line-height: 1.45;
198
+ color: var(--text-dim);
199
+ }
200
+
201
+ .sb-grid {
202
+ display: grid;
203
+ grid-template-columns: minmax(0, 1fr) 420px;
204
+ gap: 1.5rem;
205
+ align-items: start;
206
+ }
207
+
208
+ .sb-form-col {
209
+ min-width: 0;
210
+ display: flex;
211
+ flex-direction: column;
212
+ gap: 0.875rem;
213
+ }
214
+
215
+ .sb-result-col {
216
+ position: sticky;
217
+ top: 1.5rem;
218
+ min-width: 0;
219
+ }
220
+
221
+ #main-form {
222
+ display: flex;
223
+ flex-direction: column;
224
+ gap: 1.25rem;
225
+ }
226
+
227
+ /* ── Form sections ───────────────────────────────────── */
228
+ .form-section {
229
+ border: 0.0625rem solid var(--border-color);
230
+ border-radius: var(--r-xl);
231
+ background: var(--surface-card);
232
+ box-shadow: var(--shadow-sm);
233
+ overflow: hidden;
234
+ }
235
+
236
+ .form-section__hd {
237
+ display: flex;
238
+ align-items: center;
239
+ gap: 0.75rem;
240
+ padding: 0.875rem 1.1rem;
241
+ cursor: pointer;
242
+ list-style: none;
243
+ user-select: none;
244
+ transition: background 140ms;
245
+ }
246
+ .form-section__hd::-webkit-details-marker { display: none; }
247
+ .form-section__hd:hover { background: var(--surface-subtle); }
248
+
249
+ .form-section__num {
250
+ font-family: var(--font-mono);
251
+ font-size: 0.7rem;
252
+ font-weight: 600;
253
+ color: var(--accent-color);
254
+ letter-spacing: 0.06em;
255
+ min-width: 1.5rem;
256
+ }
257
+ .form-section__title {
258
+ font-size: 0.92rem;
259
+ font-weight: 700;
260
+ color: var(--text-strong);
261
+ flex: 1;
262
+ }
263
+ .form-section__arrow {
264
+ display: inline-flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ width: 1rem;
268
+ height: 1rem;
269
+ color: var(--text-faint);
270
+ flex-shrink: 0;
271
+ font-size: 1rem;
272
+ line-height: 1;
273
+ transition: transform 0.2s;
274
+ }
275
+ .form-section__arrow::before { content: '›'; }
276
+ details[open] > .form-section__hd .form-section__arrow { transform: rotate(90deg); }
277
+
278
+ .form-section__bd {
279
+ padding: 0.75rem 1.1rem 1.1rem;
280
+ border-top: 0.0625rem solid var(--border-color);
281
+ display: flex;
282
+ flex-direction: column;
283
+ gap: 0.875rem;
284
+ }
285
+
286
+ /* ── Form layout helpers ─────────────────────────────── */
287
+ .form-row-2 {
288
+ display: grid;
289
+ grid-template-columns: 1fr 1fr;
290
+ gap: 0.875rem;
291
+ }
292
+ .form-row-3 {
293
+ display: grid;
294
+ grid-template-columns: 1fr 1fr 1fr;
295
+ gap: 0.875rem;
296
+ }
297
+ .form-field--half { max-width: 48%; }
298
+ .form-field--span2 { grid-column: span 2; }
299
+ .form-field--valign-end { display: flex; align-items: flex-end; padding-bottom: 0.15rem; }
300
+
301
+ /* ── Form fields ─────────────────────────────────────── */
302
+ .form-field {
303
+ display: flex;
304
+ flex-direction: column;
305
+ gap: 0.3rem;
306
+ min-width: 0;
307
+ }
308
+ .form-field__lbl {
309
+ font-size: 0.7rem;
310
+ font-weight: 700;
311
+ letter-spacing: 0.07em;
312
+ text-transform: uppercase;
313
+ color: var(--text-faint);
314
+ line-height: 1.2;
315
+ }
316
+ .form-field__hint {
317
+ font-size: 0.68rem;
318
+ font-weight: 400;
319
+ letter-spacing: 0;
320
+ text-transform: none;
321
+ color: var(--text-muted);
322
+ opacity: 0.85;
323
+ }
324
+ .form-inp {
325
+ width: 100%;
326
+ min-height: 2.25rem;
327
+ padding: 0.45rem 0.7rem;
328
+ border: 0.0625rem solid var(--border-color);
329
+ border-radius: var(--r-md);
330
+ background: var(--surface-subtle);
331
+ color: var(--text-strong);
332
+ font-size: 0.875rem;
333
+ line-height: 1.4;
334
+ transition: border-color 140ms, box-shadow 140ms, background 140ms;
335
+ }
336
+ .form-inp::placeholder { color: var(--text-faint); opacity: 1; }
337
+ .form-inp option { color: var(--text-strong); background: var(--surface-card); }
338
+ .form-inp:focus {
339
+ outline: none;
340
+ border-color: var(--accent-color);
341
+ background: var(--surface-card);
342
+ box-shadow: 0 0 0 3px var(--accent-soft);
343
+ }
344
+ .form-inp--mono {
345
+ font-family: var(--font-mono);
346
+ font-size: 0.82rem;
347
+ letter-spacing: 0.02em;
348
+ }
349
+
350
+ /* ── Toggle switches ─────────────────────────────────── */
351
+ .form-toggle-list {
352
+ display: flex;
353
+ flex-direction: column;
354
+ gap: 0.75rem;
355
+ }
356
+ .form-toggle {
357
+ display: inline-flex;
358
+ align-items: center;
359
+ gap: 0.75rem;
360
+ cursor: pointer;
361
+ user-select: none;
362
+ }
363
+ .form-toggle input[type="checkbox"] {
364
+ position: absolute;
365
+ opacity: 0;
366
+ width: 0;
367
+ height: 0;
368
+ pointer-events: none;
369
+ }
370
+ .form-toggle__sw {
371
+ position: relative;
372
+ width: 2.25rem;
373
+ height: 1.25rem;
374
+ border-radius: 999px;
375
+ background: var(--border-strong);
376
+ border: 0.0625rem solid var(--border-strong);
377
+ flex-shrink: 0;
378
+ transition: background 180ms, border-color 180ms;
379
+ }
380
+ .form-toggle input:checked + .form-toggle__sw {
381
+ background: var(--accent-color);
382
+ border-color: var(--accent-color);
383
+ }
384
+ .form-toggle__knob {
385
+ position: absolute;
386
+ top: 0.125rem;
387
+ left: 0.125rem;
388
+ width: 0.875rem;
389
+ height: 0.875rem;
390
+ border-radius: 50%;
391
+ background: #fff;
392
+ box-shadow: 0 1px 3px rgba(0,0,0,.2);
393
+ transition: transform 180ms;
394
+ }
395
+ .form-toggle input:checked + .form-toggle__sw .form-toggle__knob {
396
+ transform: translateX(1rem);
397
+ }
398
+ .form-toggle__lbl {
399
+ font-size: 0.875rem;
400
+ font-weight: 500;
401
+ color: var(--text-medium);
402
+ }
403
+
404
+ /* ── Foreign trigger block ───────────────────────────── */
405
+ .foreign-trigger {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 0.875rem;
409
+ padding: 0.875rem 1rem;
410
+ border: 0.0625rem solid rgba(79, 70, 229, 0.15);
411
+ border-radius: var(--r-lg);
412
+ background: rgba(79, 70, 229, 0.03);
413
+ }
414
+ .foreign-trigger__label {
415
+ font-size: 0.78rem;
416
+ font-weight: 600;
417
+ color: var(--accent-color);
418
+ letter-spacing: 0.01em;
419
+ margin: 0;
420
+ }
421
+
422
+ /* ── Server control ──────────────────────────────────── */
423
+ .server-control {
424
+ display: flex;
425
+ flex-direction: column;
426
+ align-items: flex-end;
427
+ gap: 0.1rem;
428
+ padding: 0.3rem 0.55rem;
429
+ border: 0.0625rem solid transparent;
430
+ border-radius: var(--r-md);
431
+ background: transparent;
432
+ color: var(--text-dim);
433
+ cursor: pointer;
434
+ max-width: min(22rem, 40vw);
435
+ min-width: 0;
436
+ text-align: right;
437
+ transition: background 140ms, border-color 140ms;
438
+ }
439
+ .server-control:hover {
440
+ border-color: var(--border-color);
441
+ background: var(--surface-subtle);
442
+ }
443
+ .server-control__label {
444
+ font-size: 0.62rem;
445
+ font-weight: 700;
446
+ letter-spacing: 0.06em;
447
+ text-transform: uppercase;
448
+ color: var(--text-faint);
449
+ line-height: 1.2;
450
+ white-space: nowrap;
451
+ }
452
+ .server-control__value {
453
+ font-size: 0.78rem;
454
+ line-height: 1.35;
455
+ color: var(--text-muted);
456
+ max-width: 100%;
457
+ overflow: hidden;
458
+ text-overflow: ellipsis;
459
+ white-space: nowrap;
460
+ }
461
+ .server-control-form {
462
+ min-width: min(20rem, 38vw);
463
+ }
464
+ .server-control-inp {
465
+ width: 100%;
466
+ min-height: 2.2rem;
467
+ padding: 0.45rem 0.6rem;
468
+ border: 0.0625rem solid var(--border-color);
469
+ border-radius: var(--r-md);
470
+ background: var(--surface-card);
471
+ color: var(--text-strong);
472
+ font-size: 0.82rem;
473
+ box-shadow: var(--shadow-sm);
474
+ transition: border-color 140ms;
475
+ }
476
+ .server-control-inp:focus { outline: none; border-color: var(--accent-color); }
477
+ .server-control-inp--err { border-color: var(--err-border); }
478
+
479
+ /* ── Result: placeholder ─────────────────────────────── */
480
+ .result-placeholder {
481
+ display: flex;
482
+ flex-direction: column;
483
+ align-items: center;
484
+ justify-content: center;
485
+ gap: 1rem;
486
+ padding: 3rem 2rem;
487
+ border: 0.0625rem dashed var(--border-color);
488
+ border-radius: var(--r-xl);
489
+ text-align: center;
490
+ min-height: 200px;
491
+ }
492
+ .result-placeholder__icon {
493
+ width: 3rem;
494
+ height: 3rem;
495
+ color: var(--text-faint);
496
+ opacity: 0.45;
497
+ }
498
+ .result-placeholder__text {
499
+ font-size: 0.9rem;
500
+ line-height: 1.55;
501
+ color: var(--text-dim);
502
+ max-width: 22rem;
503
+ }
504
+
505
+ /* ── Result: polling ─────────────────────────────────── */
506
+ .result-polling {
507
+ display: flex;
508
+ flex-direction: column;
509
+ align-items: center;
510
+ gap: 0.875rem;
511
+ padding: 2.25rem 1.5rem;
512
+ border: 0.0625rem solid var(--stage-act-border);
513
+ border-radius: var(--r-xl);
514
+ background: var(--stage-act-bg);
515
+ text-align: center;
516
+ }
517
+ .result-polling__spinner {
518
+ width: 2.25rem;
519
+ height: 2.25rem;
520
+ border: 0.2rem solid rgba(217, 119, 6, 0.2);
521
+ border-top-color: var(--stage-act-accent);
522
+ border-radius: 50%;
523
+ animation: sb-spin 0.7s linear infinite;
524
+ }
525
+ @keyframes sb-spin { to { transform: rotate(360deg); } }
526
+ .result-polling__title {
527
+ font-size: 0.92rem;
528
+ font-weight: 700;
529
+ color: var(--text-strong);
530
+ }
531
+ .result-polling__meta {
532
+ font-size: 0.8rem;
533
+ color: var(--text-dim);
534
+ font-family: var(--font-mono);
535
+ }
536
+ .result-polling__id {
537
+ font-size: 0.7rem;
538
+ color: var(--text-muted);
539
+ font-family: var(--font-mono);
540
+ word-break: break-all;
541
+ }
542
+
543
+ /* ── Result: network error ───────────────────────────── */
544
+ .result-error-banner {
545
+ display: flex;
546
+ flex-direction: column;
547
+ gap: 0.5rem;
548
+ padding: 1.25rem;
549
+ border: 0.0625rem solid var(--err-border);
550
+ border-radius: var(--r-xl);
551
+ background: var(--err-bg);
552
+ }
553
+ .result-error-banner__title {
554
+ font-size: 0.92rem;
555
+ font-weight: 700;
556
+ color: var(--err-text);
557
+ }
558
+ .result-error-banner__msg {
559
+ font-size: 0.82rem;
560
+ color: var(--text-medium);
561
+ font-family: var(--font-mono);
562
+ white-space: pre-wrap;
563
+ word-break: break-word;
564
+ }
565
+
566
+ /* ── Result: verdict card ────────────────────────────── */
567
+ .result-card {
568
+ position: relative;
569
+ display: flex;
570
+ flex-direction: column;
571
+ gap: 1rem;
572
+ padding: 1.1rem 1.15rem 1.1rem 1.35rem;
573
+ border: 0.0625rem solid var(--stage-neu-border);
574
+ border-radius: var(--r-xl);
575
+ background: var(--surface-card);
576
+ box-shadow: var(--shadow-sm);
577
+ }
578
+ .result-card::before {
579
+ content: '';
580
+ position: absolute;
581
+ inset-block: 0.95rem;
582
+ inset-inline-start: 0.8rem;
583
+ width: 0.22rem;
584
+ border-radius: 999px;
585
+ background: var(--stage-neu-accent);
586
+ }
587
+ .result-card--success { background: var(--stage-ok-bg); border-color: var(--stage-ok-border); }
588
+ .result-card--success::before { background: var(--stage-ok-accent); }
589
+ .result-card--error { background: var(--stage-err-bg); border-color: var(--stage-err-border); }
590
+ .result-card--error::before { background: var(--stage-err-accent); }
591
+ .result-card--neutral { background: var(--stage-neu-bg); border-color: var(--stage-neu-border); }
592
+ .result-card--neutral::before { background: var(--stage-neu-accent); }
593
+
594
+ .result-card__header {
595
+ display: flex;
596
+ align-items: flex-start;
597
+ justify-content: space-between;
598
+ gap: 0.75rem;
599
+ padding-left: 0.45rem;
600
+ }
601
+ .result-card__heading {
602
+ display: flex;
603
+ flex-direction: column;
604
+ gap: 0.28rem;
605
+ min-width: 0;
606
+ }
607
+ .result-card__eyebrow {
608
+ font-size: 0.68rem;
609
+ font-weight: 700;
610
+ letter-spacing: 0.08em;
611
+ text-transform: uppercase;
612
+ color: var(--text-faint);
613
+ }
614
+ .result-card__title {
615
+ font-size: 1.08rem;
616
+ font-weight: 700;
617
+ letter-spacing: -0.02em;
618
+ color: var(--text-strong);
619
+ line-height: 1.2;
620
+ margin: 0;
621
+ }
622
+ .result-card__pill {
623
+ display: inline-flex;
624
+ align-items: center;
625
+ justify-content: center;
626
+ min-height: 1.9rem;
627
+ padding: 0.3rem 0.7rem;
628
+ border-radius: 999px;
629
+ border: 0.0625rem solid transparent;
630
+ font-size: 0.72rem;
631
+ font-weight: 700;
632
+ letter-spacing: 0.02em;
633
+ flex-shrink: 0;
634
+ }
635
+ .result-card--success .result-card__pill { background: var(--ok-bg); border-color: var(--ok-border); color: var(--ok-text); }
636
+ .result-card--error .result-card__pill { background: var(--err-bg); border-color: var(--err-border); color: var(--err-text); }
637
+ .result-card--neutral .result-card__pill { background: var(--neu-bg); border-color: var(--neu-border); color: var(--neu-text); }
638
+
639
+ .result-card__summary {
640
+ font-size: 0.875rem;
641
+ line-height: 1.5;
642
+ color: var(--text-dim);
643
+ padding-left: 0.45rem;
644
+ }
645
+
646
+ /* ── Result: meta items ──────────────────────────────── */
647
+ .result-meta {
648
+ display: flex;
649
+ flex-wrap: wrap;
650
+ gap: 0.4rem 1.1rem;
651
+ padding-left: 0.45rem;
652
+ }
653
+ .result-meta-item {
654
+ display: flex;
655
+ flex-direction: column;
656
+ gap: 0.15rem;
657
+ min-width: 0;
658
+ }
659
+ .result-meta-item__label {
660
+ font-size: 0.62rem;
661
+ font-weight: 700;
662
+ letter-spacing: 0.08em;
663
+ text-transform: uppercase;
664
+ color: var(--text-faint);
665
+ }
666
+ .result-meta-item__value {
667
+ font-size: 0.78rem;
668
+ font-family: var(--font-mono);
669
+ color: var(--text-medium);
670
+ word-break: break-all;
671
+ }
672
+
673
+ /* ── Result: validation errors ───────────────────────── */
674
+ .result-issues {
675
+ display: flex;
676
+ flex-direction: column;
677
+ gap: 0.5rem;
678
+ padding-left: 0.45rem;
679
+ }
680
+ .result-issues__heading {
681
+ font-size: 0.7rem;
682
+ font-weight: 700;
683
+ letter-spacing: 0.07em;
684
+ text-transform: uppercase;
685
+ color: var(--text-faint);
686
+ }
687
+ .result-issue {
688
+ padding: 0.6rem 0.75rem;
689
+ border: 0.0625rem solid var(--err-border);
690
+ border-radius: var(--r-md);
691
+ background: var(--err-bg);
692
+ display: flex;
693
+ flex-direction: column;
694
+ gap: 0.22rem;
695
+ }
696
+ .result-issue__code {
697
+ font-family: var(--font-mono);
698
+ font-size: 0.72rem;
699
+ font-weight: 600;
700
+ color: var(--err-text);
701
+ letter-spacing: 0.01em;
702
+ }
703
+ .result-issue__msg {
704
+ font-size: 0.82rem;
705
+ color: var(--text-strong-soft);
706
+ line-height: 1.45;
707
+ }
708
+ .result-issue__field {
709
+ font-family: var(--font-mono);
710
+ font-size: 0.68rem;
711
+ color: var(--text-dim);
712
+ }
713
+
714
+ /* ── Result: JSON disclosure ─────────────────────────── */
715
+ .result-json-disc {
716
+ border: 0.0625rem solid var(--border-color);
717
+ border-radius: var(--r-lg);
718
+ overflow: hidden;
719
+ background: var(--surface-subtle);
720
+ }
721
+ .result-json-disc summary {
722
+ display: flex;
723
+ align-items: center;
724
+ gap: 0.5rem;
725
+ padding: 0.65rem 0.875rem;
726
+ cursor: pointer;
727
+ font-size: 0.8rem;
728
+ font-weight: 600;
729
+ color: var(--text-dim);
730
+ list-style: none;
731
+ user-select: none;
732
+ transition: background 140ms, color 140ms;
733
+ }
734
+ .result-json-disc summary::-webkit-details-marker { display: none; }
735
+ .result-json-disc summary:hover { background: var(--surface-muted); color: var(--text-strong); }
736
+ .result-json-disc summary::before {
737
+ content: '›';
738
+ font-size: 1rem;
739
+ line-height: 1;
740
+ transition: transform 0.18s;
741
+ display: inline-block;
742
+ }
743
+ .result-json-disc[open] summary::before { transform: rotate(90deg); }
744
+ .result-json-pre {
745
+ margin: 0;
746
+ padding: 0.875rem 1rem;
747
+ border-top: 0.0625rem solid var(--border-color);
748
+ max-height: 26rem;
749
+ overflow: auto;
750
+ color: var(--text-medium);
751
+ font-family: var(--font-mono);
752
+ font-size: 0.78rem;
753
+ line-height: 1.6;
754
+ white-space: pre-wrap;
755
+ word-break: break-word;
756
+ }
757
+
758
+ /* ── Result: copy button ─────────────────────────────── */
759
+ .result-copy-btn {
760
+ display: flex;
761
+ align-items: center;
762
+ justify-content: center;
763
+ gap: 0.5rem;
764
+ width: 100%;
765
+ padding: 0.75rem 1rem;
766
+ border: 0.0625rem solid var(--border-color);
767
+ border-radius: var(--r-lg);
768
+ background: var(--surface-card);
769
+ color: var(--text-medium);
770
+ font-size: 0.86rem;
771
+ font-weight: 600;
772
+ cursor: pointer;
773
+ box-shadow: var(--shadow-sm);
774
+ transition: background 140ms, border-color 140ms, color 140ms, box-shadow 140ms;
775
+ }
776
+ .result-copy-btn:hover {
777
+ background: var(--surface-hover);
778
+ border-color: var(--border-strong);
779
+ color: var(--text-strong);
780
+ box-shadow: var(--shadow-md);
781
+ }
782
+ .result-copy-btn--copied {
783
+ background: var(--ok-bg);
784
+ border-color: var(--ok-border);
785
+ color: var(--ok-text);
786
+ }
787
+
788
+ /* ── Responsive ──────────────────────────────────────── */
789
+ @media (max-width: 72rem) {
790
+ .sb-grid { grid-template-columns: minmax(0, 1fr) 360px; }
791
+ }
792
+ @media (max-width: 58rem) {
793
+ .sb-grid { grid-template-columns: 1fr; }
794
+ .sb-result-col { position: static; }
795
+ .form-row-3 { grid-template-columns: 1fr 1fr; }
796
+ .form-field--span2 { grid-column: span 1; }
797
+ .sb-toolbar__actions { flex-wrap: wrap; width: 100%; margin-left: 0; }
798
+ }
799
+ @media (max-width: 38rem) {
800
+ .sb-page { padding: 0.625rem; }
801
+ .sb-frame { padding: 0.5rem; }
802
+ .sb-body { padding: 1rem 0.5rem 0.75rem; }
803
+ .form-row-2, .form-row-3 { grid-template-columns: 1fr; }
804
+ .form-field--half, .form-field--span2 { max-width: 100%; grid-column: span 1; }
805
+ .sb-page-title { font-size: 1.75rem; }
806
+ .server-control { max-width: min(14rem, 50vw); }
807
+ }