@anmol-srv/sigil 0.10.3 → 0.11.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,883 @@
1
+ /* ════════════════════════════════════════════════════════════════════════
2
+ Sigil dashboard — design system v2
3
+ Sharp corners, fixed 4px spacing scale, careful typography.
4
+ Inspired by shadcn's discipline but no framework dependency.
5
+ ════════════════════════════════════════════════════════════════════════ */
6
+
7
+ :root {
8
+ /* ── Color tokens (OKLCH-style flat dark) ──────────────────────────── */
9
+ --bg-canvas: #07080a; /* page background */
10
+ --bg-surface: #0f1115; /* card / panel */
11
+ --bg-surface-2: #161920; /* nested panel / hover */
12
+ --bg-surface-3: #1d2129; /* tertiary */
13
+ --bg-overlay: rgba(7,8,10,0.78);
14
+
15
+ --fg: #e8eaee;
16
+ --fg-2: #b6bcc7;
17
+ --fg-3: #828893;
18
+ --fg-4: #565b66;
19
+
20
+ --border: #1f2229;
21
+ --border-2: #2c3038;
22
+ --border-strong: #3a3f49;
23
+
24
+ --accent: #5e8cff;
25
+ --accent-2: #466ce0;
26
+ --accent-fg: #ffffff;
27
+
28
+ --ok: #4ec46c;
29
+ --ok-bg: rgba(78,196,108,0.10);
30
+ --warn: #e8a94a;
31
+ --warn-bg: rgba(232,169,74,0.10);
32
+ --err: #e26464;
33
+ --err-bg: rgba(226,100,100,0.10);
34
+ --info-bg: rgba(94,140,255,0.10);
35
+
36
+ /* ── Spacing scale (multiples of 4px) ──────────────────────────────── */
37
+ --s-1: 4px;
38
+ --s-2: 8px;
39
+ --s-3: 12px;
40
+ --s-4: 16px;
41
+ --s-5: 24px;
42
+ --s-6: 32px;
43
+ --s-7: 48px;
44
+ --s-8: 64px;
45
+
46
+ /* ── Type scale ────────────────────────────────────────────────────── */
47
+ --t-xs: 11px;
48
+ --t-sm: 12px;
49
+ --t-base: 13px;
50
+ --t-md: 14px;
51
+ --t-lg: 16px;
52
+ --t-xl: 20px;
53
+ --t-2xl: 26px;
54
+ --t-3xl: 34px;
55
+ --lh: 1.5;
56
+ --lh-tight: 1.25;
57
+
58
+ /* ── Fonts ─────────────────────────────────────────────────────────── */
59
+ --font-ui: ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text",
60
+ system-ui, "Segoe UI", Roboto, sans-serif;
61
+ --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, "Roboto Mono", monospace;
62
+
63
+ /* ── Layout ────────────────────────────────────────────────────────── */
64
+ --container: 1200px;
65
+ --sidebar: 232px;
66
+ --header-h: 52px;
67
+
68
+ /* ── Misc ──────────────────────────────────────────────────────────── */
69
+ --focus-ring: 0 0 0 2px var(--accent);
70
+ }
71
+
72
+ * { box-sizing: border-box; }
73
+ html, body { margin: 0; height: 100%; }
74
+ body {
75
+ background: var(--bg-canvas);
76
+ color: var(--fg);
77
+ font: var(--t-base)/var(--lh) var(--font-ui);
78
+ display: flex;
79
+ flex-direction: column;
80
+ -webkit-font-smoothing: antialiased;
81
+ text-rendering: optimizeLegibility;
82
+ }
83
+
84
+ button, input, select, textarea { font-family: inherit; font-size: inherit; }
85
+ :focus-visible { outline: none; box-shadow: var(--focus-ring); }
86
+ a { color: var(--accent); text-decoration: none; }
87
+ a:hover { text-decoration: underline; text-underline-offset: 2px; }
88
+ code, .mono { font-family: var(--font-mono); }
89
+
90
+ /* ════════════════════════════════════════════════════════════════════════
91
+ Top nav
92
+ ════════════════════════════════════════════════════════════════════════ */
93
+ header {
94
+ height: var(--header-h);
95
+ flex-shrink: 0;
96
+ border-bottom: 1px solid var(--border);
97
+ background: var(--bg-surface);
98
+ position: sticky;
99
+ top: 0;
100
+ z-index: 20;
101
+ }
102
+ .header-inner {
103
+ height: 100%;
104
+ display: flex;
105
+ align-items: center;
106
+ padding: 0 var(--s-5);
107
+ max-width: var(--container);
108
+ margin: 0 auto;
109
+ width: 100%;
110
+ }
111
+ .brand {
112
+ display: flex;
113
+ align-items: center;
114
+ gap: var(--s-3);
115
+ padding-right: var(--s-5);
116
+ margin-right: var(--s-5);
117
+ border-right: 1px solid var(--border);
118
+ height: 100%;
119
+ }
120
+ .brand-mark {
121
+ width: 20px;
122
+ height: 20px;
123
+ display: block;
124
+ flex-shrink: 0;
125
+ }
126
+ .brand-name {
127
+ font-weight: 600;
128
+ font-size: var(--t-md);
129
+ letter-spacing: -0.005em;
130
+ }
131
+ .brand-badge {
132
+ font-family: var(--font-mono);
133
+ font-size: 10px;
134
+ font-weight: 500;
135
+ background: var(--bg-surface-2);
136
+ color: var(--fg-3);
137
+ padding: 2px 6px;
138
+ border: 1px solid var(--border);
139
+ text-transform: lowercase;
140
+ letter-spacing: 0.04em;
141
+ }
142
+
143
+ nav { display: flex; flex: 1; height: 100%; }
144
+ nav a {
145
+ display: flex;
146
+ align-items: center;
147
+ height: 100%;
148
+ padding: 0 var(--s-3);
149
+ color: var(--fg-3);
150
+ text-decoration: none;
151
+ font-size: var(--t-base);
152
+ font-weight: 500;
153
+ border-bottom: 2px solid transparent;
154
+ margin-bottom: -1px; /* overlap header border */
155
+ }
156
+ nav a:hover { color: var(--fg); text-decoration: none; }
157
+ nav a.active {
158
+ color: var(--fg);
159
+ border-bottom-color: var(--accent);
160
+ }
161
+
162
+ .conn-status {
163
+ display: inline-flex;
164
+ align-items: center;
165
+ gap: var(--s-2);
166
+ font-size: var(--t-sm);
167
+ color: var(--fg-3);
168
+ margin-left: auto;
169
+ }
170
+ .conn-status::before {
171
+ content: "";
172
+ width: 6px;
173
+ height: 6px;
174
+ background: var(--fg-4);
175
+ display: inline-block;
176
+ }
177
+ .conn-status.ok { color: var(--ok); }
178
+ .conn-status.ok::before { background: var(--ok); }
179
+ .conn-status.err { color: var(--err); }
180
+ .conn-status.err::before { background: var(--err); }
181
+
182
+ /* ════════════════════════════════════════════════════════════════════════
183
+ Main layout
184
+ ════════════════════════════════════════════════════════════════════════ */
185
+ main {
186
+ flex: 1;
187
+ padding: var(--s-6) var(--s-5) var(--s-8);
188
+ max-width: var(--container);
189
+ margin: 0 auto;
190
+ width: 100%;
191
+ }
192
+ .view { display: none; }
193
+ .view.active { display: block; }
194
+
195
+ .section-head {
196
+ display: flex;
197
+ align-items: flex-end;
198
+ justify-content: space-between;
199
+ gap: var(--s-5);
200
+ margin-bottom: var(--s-5);
201
+ padding-bottom: var(--s-5);
202
+ border-bottom: 1px solid var(--border);
203
+ }
204
+ .section-head .title-block { min-width: 0; }
205
+ .section-head h2 {
206
+ margin: 0 0 var(--s-2);
207
+ font-size: var(--t-xl);
208
+ font-weight: 600;
209
+ letter-spacing: -0.015em;
210
+ line-height: var(--lh-tight);
211
+ }
212
+ .section-head p {
213
+ margin: 0;
214
+ color: var(--fg-3);
215
+ font-size: var(--t-base);
216
+ max-width: 640px;
217
+ }
218
+ .section-head .actions {
219
+ display: flex;
220
+ gap: var(--s-2);
221
+ align-items: center;
222
+ flex-shrink: 0;
223
+ }
224
+
225
+ h3.section-sub {
226
+ font-size: var(--t-xs);
227
+ text-transform: uppercase;
228
+ letter-spacing: 0.08em;
229
+ color: var(--fg-3);
230
+ margin: var(--s-6) 0 var(--s-3);
231
+ font-weight: 600;
232
+ }
233
+
234
+ /* ════════════════════════════════════════════════════════════════════════
235
+ Buttons (sharp, no radius)
236
+ ════════════════════════════════════════════════════════════════════════ */
237
+ .btn[hidden] { display: none !important; }
238
+ .btn {
239
+ display: inline-flex;
240
+ align-items: center;
241
+ gap: var(--s-2);
242
+ padding: 6px var(--s-3);
243
+ height: 32px;
244
+ border: 1px solid var(--border-2);
245
+ background: var(--bg-surface);
246
+ color: var(--fg);
247
+ font-size: var(--t-base);
248
+ font-weight: 500;
249
+ cursor: pointer;
250
+ transition: background 80ms ease, border-color 80ms ease;
251
+ white-space: nowrap;
252
+ }
253
+ .btn:hover { background: var(--bg-surface-2); border-color: var(--border-strong); }
254
+ .btn:disabled { opacity: 0.4; cursor: not-allowed; }
255
+ .btn.primary {
256
+ background: var(--accent);
257
+ color: var(--accent-fg);
258
+ border-color: var(--accent);
259
+ font-weight: 600;
260
+ }
261
+ .btn.primary:hover { background: var(--accent-2); border-color: var(--accent-2); }
262
+ .btn.danger {
263
+ border-color: rgba(226,100,100,0.40);
264
+ color: var(--err);
265
+ }
266
+ .btn.danger:hover { background: rgba(226,100,100,0.08); }
267
+ .btn.ghost {
268
+ background: transparent;
269
+ border-color: transparent;
270
+ color: var(--fg-3);
271
+ }
272
+ .btn.ghost:hover { color: var(--fg); background: var(--bg-surface-2); }
273
+ .btn.small { height: 26px; padding: 4px var(--s-2); font-size: var(--t-sm); }
274
+ .btn.large { height: 40px; padding: 8px var(--s-4); font-size: var(--t-md); }
275
+
276
+ /* ════════════════════════════════════════════════════════════════════════
277
+ Panels / cards
278
+ ════════════════════════════════════════════════════════════════════════ */
279
+ .panel {
280
+ background: var(--bg-surface);
281
+ border: 1px solid var(--border);
282
+ }
283
+ .panel-pad { padding: var(--s-5); }
284
+ .panel-head {
285
+ padding: var(--s-3) var(--s-4);
286
+ border-bottom: 1px solid var(--border);
287
+ display: flex;
288
+ align-items: center;
289
+ justify-content: space-between;
290
+ background: var(--bg-surface);
291
+ }
292
+ .panel-head .title { font-size: var(--t-sm); font-weight: 600; color: var(--fg-2); text-transform: uppercase; letter-spacing: 0.06em; }
293
+
294
+ .stat-grid {
295
+ display: grid;
296
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
297
+ gap: 1px;
298
+ background: var(--border);
299
+ border: 1px solid var(--border);
300
+ }
301
+ .stat {
302
+ background: var(--bg-surface);
303
+ padding: var(--s-4) var(--s-5);
304
+ display: flex;
305
+ flex-direction: column;
306
+ gap: var(--s-1);
307
+ }
308
+ .stat .lbl {
309
+ font-size: var(--t-xs);
310
+ text-transform: uppercase;
311
+ letter-spacing: 0.06em;
312
+ color: var(--fg-3);
313
+ font-weight: 500;
314
+ }
315
+ .stat .val {
316
+ font-size: var(--t-xl);
317
+ font-weight: 600;
318
+ letter-spacing: -0.02em;
319
+ font-family: var(--font-mono);
320
+ }
321
+ .stat .sub { color: var(--fg-3); font-size: var(--t-sm); }
322
+
323
+ /* ════════════════════════════════════════════════════════════════════════
324
+ Key-value rows (replaces dl)
325
+ ════════════════════════════════════════════════════════════════════════ */
326
+ .kv {
327
+ border: 1px solid var(--border);
328
+ background: var(--bg-surface);
329
+ }
330
+ .kv .row {
331
+ display: grid;
332
+ grid-template-columns: minmax(180px, max-content) 1fr;
333
+ gap: var(--s-5);
334
+ padding: var(--s-3) var(--s-5);
335
+ border-bottom: 1px solid var(--border);
336
+ align-items: baseline;
337
+ }
338
+ .kv .row:last-child { border-bottom: none; }
339
+ .kv .row .k { color: var(--fg-3); font-size: var(--t-sm); }
340
+ .kv .row .v { font-family: var(--font-mono); font-size: var(--t-base); overflow-wrap: anywhere; }
341
+
342
+ /* ════════════════════════════════════════════════════════════════════════
343
+ Tables
344
+ ════════════════════════════════════════════════════════════════════════ */
345
+ .table-wrap {
346
+ background: var(--bg-surface);
347
+ border: 1px solid var(--border);
348
+ overflow: hidden;
349
+ }
350
+ table { width: 100%; border-collapse: collapse; }
351
+ th, td {
352
+ text-align: left;
353
+ padding: var(--s-3) var(--s-4);
354
+ border-bottom: 1px solid var(--border);
355
+ font-size: var(--t-base);
356
+ vertical-align: middle;
357
+ }
358
+ thead th {
359
+ background: var(--bg-surface-2);
360
+ color: var(--fg-3);
361
+ font-weight: 500;
362
+ font-size: var(--t-xs);
363
+ text-transform: uppercase;
364
+ letter-spacing: 0.06em;
365
+ padding: var(--s-2) var(--s-4);
366
+ }
367
+ tbody tr { transition: background 80ms ease; }
368
+ tbody tr:hover { background: var(--bg-surface-2); }
369
+ tbody tr:last-child td { border-bottom: none; }
370
+ td.mono { font-family: var(--font-mono); font-size: var(--t-sm); }
371
+ td .device-name { font-weight: 500; }
372
+ td .device-sub { display: block; color: var(--fg-3); font-size: var(--t-xs); margin-top: 2px; font-family: var(--font-mono); }
373
+ td.actions-cell { text-align: right; white-space: nowrap; }
374
+ td.actions-cell .btn { margin-left: var(--s-2); }
375
+
376
+ .row-meta {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: var(--s-3);
380
+ padding: var(--s-2) 0;
381
+ margin-bottom: var(--s-3);
382
+ color: var(--fg-3);
383
+ font-size: var(--t-sm);
384
+ }
385
+
386
+ .empty {
387
+ padding: var(--s-7) var(--s-5);
388
+ text-align: center;
389
+ color: var(--fg-3);
390
+ font-size: var(--t-base);
391
+ }
392
+
393
+ /* ════════════════════════════════════════════════════════════════════════
394
+ Forms
395
+ ════════════════════════════════════════════════════════════════════════ */
396
+ .field { display: block; margin-bottom: var(--s-4); }
397
+ .field > .label,
398
+ form label > span {
399
+ display: block;
400
+ color: var(--fg-2);
401
+ font-size: var(--t-sm);
402
+ font-weight: 500;
403
+ margin-bottom: var(--s-2);
404
+ }
405
+ .field > .help, .help-text, span.help {
406
+ display: block;
407
+ margin-top: var(--s-2);
408
+ color: var(--fg-3);
409
+ font-size: var(--t-sm);
410
+ }
411
+
412
+ form input,
413
+ form select,
414
+ form textarea,
415
+ .onboarding-content input:not([type="radio"]):not([type="checkbox"]),
416
+ .onboarding-content select,
417
+ .input {
418
+ width: 100%;
419
+ height: 36px;
420
+ padding: 0 var(--s-3);
421
+ border: 1px solid var(--border-2);
422
+ background: var(--bg-canvas);
423
+ color: var(--fg);
424
+ font: var(--t-base) var(--font-mono);
425
+ transition: border-color 80ms ease;
426
+ }
427
+ form textarea { padding: var(--s-2) var(--s-3); height: auto; min-height: 80px; resize: vertical; }
428
+ form select,
429
+ .onboarding-content select { padding-right: var(--s-5); }
430
+ form input:focus, form select:focus, form textarea:focus,
431
+ .onboarding-content input:focus, .onboarding-content select:focus,
432
+ .input:focus { outline: none; border-color: var(--accent); }
433
+
434
+ form .row-2col,
435
+ .onboarding-content .row-2col { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s-3); }
436
+ form .actions { display: flex; gap: var(--s-2); margin-top: var(--s-2); }
437
+
438
+ /* Forms read best at a fixed measure — don't let inputs stretch the full
439
+ container width. Modal forms are exempt (already bounded by the modal). */
440
+ .view form.panel,
441
+ .onboarding-content .wizard-step .field,
442
+ .onboarding-content #ob-db-url,
443
+ .onboarding-content #ob-db-fields,
444
+ .onboarding-content #ob-llm-fields,
445
+ .onboarding-content #ob-emb-fields { max-width: 560px; }
446
+
447
+ pre.result {
448
+ background: var(--bg-canvas);
449
+ border: 1px solid var(--border);
450
+ padding: var(--s-3) var(--s-4);
451
+ font: var(--t-sm) var(--font-mono);
452
+ white-space: pre-wrap;
453
+ word-break: break-word;
454
+ max-height: 320px;
455
+ overflow: auto;
456
+ margin: var(--s-4) 0 0;
457
+ }
458
+ pre.result.ok { border-color: rgba(78,196,108,0.30); }
459
+ pre.result.err { border-color: rgba(226,100,100,0.30); }
460
+
461
+ /* ════════════════════════════════════════════════════════════════════════
462
+ Badges + status pills
463
+ ════════════════════════════════════════════════════════════════════════ */
464
+ .badge {
465
+ display: inline-block;
466
+ background: var(--bg-surface-2);
467
+ color: var(--fg-3);
468
+ font-size: var(--t-xs);
469
+ font-weight: 500;
470
+ padding: 2px var(--s-2);
471
+ text-transform: uppercase;
472
+ letter-spacing: 0.06em;
473
+ border: 1px solid var(--border);
474
+ }
475
+ .badge.ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(78,196,108,0.30); }
476
+ .badge.warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(232,169,74,0.30); }
477
+ .badge.err { background: var(--err-bg); color: var(--err); border-color: rgba(226,100,100,0.30); }
478
+ .badge.info { background: var(--info-bg); color: var(--accent); border-color: rgba(94,140,255,0.30); }
479
+
480
+ .pill {
481
+ display: inline-flex;
482
+ align-items: center;
483
+ gap: var(--s-2);
484
+ padding: 3px var(--s-3);
485
+ background: var(--bg-surface-2);
486
+ color: var(--fg-3);
487
+ font-size: var(--t-xs);
488
+ font-weight: 500;
489
+ border: 1px solid var(--border);
490
+ }
491
+ .pill::before {
492
+ content: "";
493
+ width: 6px; height: 6px;
494
+ background: var(--fg-4);
495
+ }
496
+ .pill.ok { background: var(--ok-bg); color: var(--ok); border-color: rgba(78,196,108,0.30); }
497
+ .pill.ok::before { background: var(--ok); }
498
+ .pill.warn { background: var(--warn-bg); color: var(--warn); border-color: rgba(232,169,74,0.30); }
499
+ .pill.warn::before { background: var(--warn); }
500
+ .pill.err { background: var(--err-bg); color: var(--err); border-color: rgba(226,100,100,0.30); }
501
+ .pill.err::before { background: var(--err); }
502
+
503
+ /* ════════════════════════════════════════════════════════════════════════
504
+ Activity — causal trace log
505
+ ════════════════════════════════════════════════════════════════════════ */
506
+ .trace-filters { display: flex; gap: var(--s-2); margin-bottom: var(--s-4); }
507
+ .chip {
508
+ height: 28px;
509
+ padding: 0 var(--s-3);
510
+ background: var(--bg-surface);
511
+ border: 1px solid var(--border-2);
512
+ color: var(--fg-3);
513
+ font-size: var(--t-sm);
514
+ font-weight: 500;
515
+ cursor: pointer;
516
+ }
517
+ .chip:hover { color: var(--fg); border-color: var(--border-strong); }
518
+ .chip.active { color: var(--accent-fg); background: var(--accent); border-color: var(--accent); }
519
+
520
+ .trace-list { list-style: none; padding: 0; margin: 0; border: 1px solid var(--border); }
521
+ .trace-card { background: var(--bg-surface); border-bottom: 1px solid var(--border); }
522
+ .trace-card:last-child { border-bottom: none; }
523
+ @keyframes trace-flash { from { background: var(--info-bg); } to { background: var(--bg-surface); } }
524
+ .trace-card.flash { animation: trace-flash 1.2s ease-out; }
525
+
526
+ .trace-head {
527
+ width: 100%;
528
+ display: flex;
529
+ align-items: center;
530
+ gap: var(--s-3);
531
+ padding: var(--s-3) var(--s-4);
532
+ background: transparent;
533
+ border: none;
534
+ cursor: pointer;
535
+ text-align: left;
536
+ color: var(--fg);
537
+ font: inherit;
538
+ }
539
+ .trace-head.static { cursor: default; }
540
+ .trace-head:hover:not(.static) { background: var(--bg-surface-2); }
541
+ .trace-caret { color: var(--fg-3); font-size: 10px; transition: transform 100ms ease; flex-shrink: 0; }
542
+ .trace-card.open .trace-caret { transform: rotate(90deg); }
543
+ .trace-ts { color: var(--fg-3); font-family: var(--font-mono); font-size: var(--t-xs); flex-shrink: 0; }
544
+ .trace-summary { flex: 1; min-width: 0; font-size: var(--t-base); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
545
+ .trace-ns { font-family: var(--font-mono); font-size: var(--t-xs); color: var(--fg-3); background: var(--bg-surface-2); padding: 1px 6px; border: 1px solid var(--border); flex-shrink: 0; }
546
+ .trace-dur { color: var(--fg-3); font-family: var(--font-mono); font-size: var(--t-xs); flex-shrink: 0; min-width: 44px; text-align: right; }
547
+
548
+ .trace-detail { padding: var(--s-2) var(--s-4) var(--s-4); border-top: 1px solid var(--border); background: var(--bg-canvas); }
549
+ .trace-block { margin-top: var(--s-4); }
550
+ .trace-block:first-child { margin-top: var(--s-3); }
551
+ .trace-block-h { font-size: var(--t-xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--fg-3); font-weight: 600; margin-bottom: var(--s-2); }
552
+ .kvline { display: inline-block; margin-right: var(--s-4); font-size: var(--t-sm); }
553
+ .kvline .muted { margin-right: 4px; }
554
+ .synth { background: var(--bg-surface); border: 1px solid var(--border); border-left: 2px solid var(--accent); padding: var(--s-3) var(--s-4); font-size: var(--t-base); line-height: 1.55; }
555
+ .trace-json { background: var(--bg-surface); border: 1px solid var(--border); padding: var(--s-3); font: var(--t-xs) var(--font-mono); white-space: pre-wrap; word-break: break-word; max-height: 360px; overflow: auto; margin: var(--s-2) 0 0; }
556
+
557
+ .trace-table-wrap { border: 1px solid var(--border); overflow-x: auto; }
558
+ table.trace-table { width: 100%; border-collapse: collapse; font-size: var(--t-sm); }
559
+ table.trace-table th { background: var(--bg-surface-2); color: var(--fg-3); font-size: var(--t-xs); text-transform: uppercase; letter-spacing: 0.04em; font-weight: 500; padding: var(--s-2) var(--s-3); text-align: left; white-space: nowrap; }
560
+ table.trace-table td { padding: var(--s-2) var(--s-3); border-top: 1px solid var(--border); vertical-align: top; }
561
+ table.trace-table td.num { font-family: var(--font-mono); font-size: var(--t-xs); text-align: right; white-space: nowrap; color: var(--fg-2); }
562
+ table.trace-table td.num.strong { color: var(--fg); font-weight: 600; }
563
+ table.trace-table td.fact-cell { width: 100%; line-height: 1.45; }
564
+ table.trace-table td.audm-cell { font-size: var(--t-xs); color: var(--fg-2); white-space: nowrap; }
565
+ .tag { display: inline-block; font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--fg-3); background: var(--bg-surface-2); border: 1px solid var(--border); padding: 0 4px; margin-left: 4px; }
566
+ .tag.vital { color: var(--warn); border-color: rgba(232,169,74,0.30); background: var(--warn-bg); }
567
+
568
+ /* ════════════════════════════════════════════════════════════════════════
569
+ Methods grid
570
+ ════════════════════════════════════════════════════════════════════════ */
571
+ .methods-grid {
572
+ display: grid;
573
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
574
+ gap: 1px;
575
+ background: var(--border);
576
+ border: 1px solid var(--border);
577
+ list-style: none;
578
+ padding: 0;
579
+ margin: 0;
580
+ }
581
+ .methods-grid li {
582
+ background: var(--bg-surface);
583
+ padding: var(--s-3) var(--s-4);
584
+ font: var(--t-sm) var(--font-mono);
585
+ display: flex;
586
+ align-items: center;
587
+ gap: var(--s-3);
588
+ }
589
+
590
+ /* ════════════════════════════════════════════════════════════════════════
591
+ Modal
592
+ ════════════════════════════════════════════════════════════════════════ */
593
+ .modal[hidden] { display: none !important; }
594
+ .modal {
595
+ position: fixed;
596
+ inset: 0;
597
+ background: var(--bg-overlay);
598
+ display: flex;
599
+ align-items: flex-start;
600
+ justify-content: center;
601
+ z-index: 100;
602
+ padding: 96px var(--s-5) var(--s-5);
603
+ overflow-y: auto;
604
+ animation: modal-fade 100ms ease-out;
605
+ }
606
+ @keyframes modal-fade { from { opacity: 0; } to { opacity: 1; } }
607
+ .modal-body {
608
+ background: var(--bg-surface);
609
+ border: 1px solid var(--border-strong);
610
+ width: 100%;
611
+ max-width: 560px;
612
+ animation: modal-pop 120ms ease-out;
613
+ box-shadow: 0 24px 60px rgba(0,0,0,0.6);
614
+ }
615
+ @keyframes modal-pop { from { transform: translateY(-4px); } to { transform: translateY(0); } }
616
+ .modal-header {
617
+ display: flex;
618
+ align-items: center;
619
+ justify-content: space-between;
620
+ padding: var(--s-3) var(--s-5);
621
+ border-bottom: 1px solid var(--border);
622
+ }
623
+ .modal-header h3 {
624
+ margin: 0;
625
+ font-size: var(--t-md);
626
+ font-weight: 600;
627
+ letter-spacing: -0.01em;
628
+ }
629
+ .modal-close {
630
+ background: transparent;
631
+ border: none;
632
+ cursor: pointer;
633
+ color: var(--fg-3);
634
+ width: 28px; height: 28px;
635
+ display: flex;
636
+ align-items: center;
637
+ justify-content: center;
638
+ font-size: var(--t-lg);
639
+ font-family: var(--font-ui);
640
+ }
641
+ .modal-close:hover { color: var(--fg); background: var(--bg-surface-2); }
642
+ .modal-content { padding: var(--s-5); }
643
+ .modal-footer {
644
+ display: flex;
645
+ gap: var(--s-2);
646
+ justify-content: flex-end;
647
+ padding: var(--s-3) var(--s-5);
648
+ border-top: 1px solid var(--border);
649
+ background: var(--bg-surface-2);
650
+ }
651
+ .modal-content form { background: transparent; border: none; padding: 0; }
652
+
653
+ /* Code result inside modal */
654
+ .code-card {
655
+ background: var(--bg-canvas);
656
+ border: 1px solid var(--accent);
657
+ padding: var(--s-3) var(--s-4);
658
+ margin-bottom: var(--s-3);
659
+ }
660
+ .code-card .lbl {
661
+ font-size: var(--t-xs);
662
+ color: var(--fg-3);
663
+ text-transform: uppercase;
664
+ letter-spacing: 0.06em;
665
+ margin-bottom: var(--s-2);
666
+ }
667
+ .code-card .code {
668
+ font: 600 var(--t-lg) var(--font-mono);
669
+ color: var(--fg);
670
+ letter-spacing: 0.03em;
671
+ display: flex;
672
+ align-items: center;
673
+ gap: var(--s-2);
674
+ }
675
+ .code-card .join-cmd {
676
+ margin-top: var(--s-3);
677
+ padding: var(--s-3) var(--s-4);
678
+ background: var(--bg-surface);
679
+ font: var(--t-sm) var(--font-mono);
680
+ color: var(--fg-2);
681
+ word-break: break-all;
682
+ }
683
+ .copy-btn {
684
+ background: transparent;
685
+ border: 1px solid var(--border-2);
686
+ color: var(--fg-3);
687
+ padding: 2px var(--s-2);
688
+ font: var(--t-xs) var(--font-ui);
689
+ cursor: pointer;
690
+ }
691
+ .copy-btn:hover { color: var(--fg); border-color: var(--fg-3); }
692
+
693
+ /* Radio cards */
694
+ .radio-card-group { display: flex; flex-direction: column; gap: var(--s-2); margin: var(--s-2) 0; }
695
+ .radio-card {
696
+ display: flex;
697
+ gap: var(--s-3);
698
+ align-items: flex-start;
699
+ padding: var(--s-3) var(--s-4);
700
+ background: var(--bg-canvas);
701
+ border: 1px solid var(--border-2);
702
+ cursor: pointer;
703
+ transition: border-color 80ms ease;
704
+ }
705
+ .radio-card:hover { border-color: var(--accent); }
706
+ .radio-card input { width: auto; height: auto; margin-top: 3px; accent-color: var(--accent); }
707
+ .radio-card .rc-title { font-weight: 500; font-size: var(--t-base); color: var(--fg); }
708
+ .radio-card .rc-desc { color: var(--fg-3); font-size: var(--t-sm); margin-top: 2px; }
709
+ .radio-card.danger:hover { border-color: var(--err); }
710
+ .radio-card.selected { border-color: var(--accent); background: var(--info-bg); }
711
+
712
+ /* ════════════════════════════════════════════════════════════════════════
713
+ Onboarding wizard
714
+ ════════════════════════════════════════════════════════════════════════ */
715
+ .onboarding {
716
+ position: fixed;
717
+ inset: 0;
718
+ background: var(--bg-canvas);
719
+ display: grid;
720
+ grid-template-columns: var(--sidebar) 1fr;
721
+ z-index: 50;
722
+ }
723
+ .onboarding[hidden] { display: none !important; }
724
+ .onboarding-sidebar {
725
+ background: var(--bg-surface);
726
+ border-right: 1px solid var(--border);
727
+ padding: var(--s-6) var(--s-5);
728
+ display: flex;
729
+ flex-direction: column;
730
+ gap: var(--s-5);
731
+ }
732
+ .onboarding-sidebar .brand {
733
+ border-right: none;
734
+ padding-right: 0;
735
+ margin-right: 0;
736
+ height: auto;
737
+ }
738
+ .onboarding-steps {
739
+ list-style: none;
740
+ padding: 0;
741
+ margin: 0;
742
+ display: flex;
743
+ flex-direction: column;
744
+ gap: var(--s-1);
745
+ }
746
+ .onboarding-step {
747
+ display: grid;
748
+ grid-template-columns: 24px 1fr;
749
+ gap: var(--s-3);
750
+ padding: var(--s-3);
751
+ align-items: flex-start;
752
+ cursor: default;
753
+ border: 1px solid transparent;
754
+ }
755
+ .onboarding-step .num {
756
+ display: flex;
757
+ align-items: center;
758
+ justify-content: center;
759
+ width: 22px;
760
+ height: 22px;
761
+ background: var(--bg-surface-2);
762
+ color: var(--fg-3);
763
+ font: var(--t-sm) var(--font-mono);
764
+ font-weight: 600;
765
+ border: 1px solid var(--border);
766
+ }
767
+ .onboarding-step.active {
768
+ border-color: var(--border);
769
+ background: var(--bg-surface-2);
770
+ }
771
+ .onboarding-step.active .num {
772
+ background: var(--accent);
773
+ color: var(--accent-fg);
774
+ border-color: var(--accent);
775
+ }
776
+ .onboarding-step.done .num {
777
+ background: var(--ok);
778
+ color: var(--bg-canvas);
779
+ border-color: var(--ok);
780
+ }
781
+ .onboarding-step .label { font-size: var(--t-base); font-weight: 500; color: var(--fg); }
782
+ .onboarding-step .desc { font-size: var(--t-xs); color: var(--fg-3); margin-top: 2px; }
783
+ .onboarding-step.future .label { color: var(--fg-3); }
784
+
785
+ .onboarding-content {
786
+ padding: var(--s-7) var(--s-7) var(--s-8);
787
+ overflow-y: auto;
788
+ max-width: 760px;
789
+ }
790
+ .onboarding-content h1 {
791
+ font-size: var(--t-3xl);
792
+ font-weight: 600;
793
+ letter-spacing: -0.025em;
794
+ margin: 0 0 var(--s-2);
795
+ line-height: var(--lh-tight);
796
+ }
797
+ .onboarding-content .lede {
798
+ color: var(--fg-3);
799
+ font-size: var(--t-md);
800
+ margin: 0 0 var(--s-6);
801
+ max-width: 520px;
802
+ }
803
+ .onboarding-content h2 {
804
+ font-size: var(--t-lg);
805
+ font-weight: 600;
806
+ margin: var(--s-6) 0 var(--s-3);
807
+ letter-spacing: -0.01em;
808
+ }
809
+
810
+ .wizard-step { display: none; }
811
+ .wizard-step.active { display: block; }
812
+ .wizard-actions {
813
+ display: flex;
814
+ justify-content: space-between;
815
+ gap: var(--s-3);
816
+ margin-top: var(--s-6);
817
+ padding-top: var(--s-5);
818
+ border-top: 1px solid var(--border);
819
+ }
820
+ .wizard-actions .spacer { flex: 1; }
821
+
822
+ .provider-card-grid {
823
+ display: grid;
824
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
825
+ gap: var(--s-3);
826
+ }
827
+ .provider-card {
828
+ position: relative;
829
+ display: flex;
830
+ flex-direction: column;
831
+ gap: var(--s-2);
832
+ padding: var(--s-4);
833
+ background: var(--bg-surface);
834
+ border: 1px solid var(--border);
835
+ cursor: pointer;
836
+ transition: border-color 80ms ease, background 80ms ease;
837
+ }
838
+ .provider-card:hover { border-color: var(--border-strong); }
839
+ .provider-card.selected {
840
+ border-color: var(--accent);
841
+ background: var(--info-bg);
842
+ }
843
+ .provider-card .name { font-weight: 600; font-size: var(--t-md); }
844
+ .provider-card .hint { color: var(--fg-3); font-size: var(--t-sm); }
845
+ .provider-card .check {
846
+ position: absolute;
847
+ top: var(--s-3);
848
+ right: var(--s-3);
849
+ width: 16px;
850
+ height: 16px;
851
+ background: var(--accent);
852
+ display: none;
853
+ }
854
+ .provider-card.selected .check { display: block; }
855
+
856
+ /* ════════════════════════════════════════════════════════════════════════
857
+ Footer
858
+ ════════════════════════════════════════════════════════════════════════ */
859
+ footer {
860
+ padding: var(--s-3) 0;
861
+ flex-shrink: 0;
862
+ border-top: 1px solid var(--border);
863
+ background: var(--bg-surface);
864
+ color: var(--fg-3);
865
+ font-size: var(--t-xs);
866
+ }
867
+ footer .footer-inner {
868
+ display: flex;
869
+ justify-content: space-between;
870
+ max-width: var(--container);
871
+ margin: 0 auto;
872
+ padding: 0 var(--s-5);
873
+ width: 100%;
874
+ }
875
+
876
+ /* ════════════════════════════════════════════════════════════════════════
877
+ Utilities
878
+ ════════════════════════════════════════════════════════════════════════ */
879
+ .muted { color: var(--fg-3); }
880
+ .spacer { flex: 1; }
881
+ .flex-row { display: flex; align-items: center; gap: var(--s-3); }
882
+ .text-sm { font-size: var(--t-sm); }
883
+ .text-xs { font-size: var(--t-xs); }