shokupan 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/analyzer-BqIe1p0R.js +35 -0
  2. package/dist/analyzer-BqIe1p0R.js.map +1 -0
  3. package/dist/analyzer-CKLGLFtx.cjs +35 -0
  4. package/dist/analyzer-CKLGLFtx.cjs.map +1 -0
  5. package/dist/{analyzer-Ce_7JxZh.js → analyzer.impl-CV6W1Eq7.js} +238 -21
  6. package/dist/analyzer.impl-CV6W1Eq7.js.map +1 -0
  7. package/dist/{analyzer-Bei1sVWp.cjs → analyzer.impl-D9Yi1Hax.cjs} +237 -20
  8. package/dist/analyzer.impl-D9Yi1Hax.cjs.map +1 -0
  9. package/dist/cli.cjs +1 -1
  10. package/dist/cli.js +1 -1
  11. package/dist/context.d.ts +19 -7
  12. package/dist/http-server-BEMPIs33.cjs.map +1 -1
  13. package/dist/http-server-CCeagTyU.js.map +1 -1
  14. package/dist/index.cjs +1500 -275
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.js +1482 -256
  18. package/dist/index.js.map +1 -1
  19. package/dist/plugins/application/api-explorer/plugin.d.ts +9 -0
  20. package/dist/plugins/application/api-explorer/static/explorer-client.mjs +880 -0
  21. package/dist/plugins/application/api-explorer/static/style.css +767 -0
  22. package/dist/plugins/application/api-explorer/static/theme.css +128 -0
  23. package/dist/plugins/application/asyncapi/generator.d.ts +3 -0
  24. package/dist/plugins/application/asyncapi/plugin.d.ts +15 -0
  25. package/dist/plugins/application/asyncapi/static/asyncapi-client.mjs +748 -0
  26. package/dist/plugins/application/asyncapi/static/style.css +565 -0
  27. package/dist/plugins/application/asyncapi/static/theme.css +128 -0
  28. package/dist/plugins/application/auth.d.ts +3 -1
  29. package/dist/plugins/application/dashboard/metrics-collector.d.ts +3 -1
  30. package/dist/plugins/application/dashboard/plugin.d.ts +13 -3
  31. package/dist/plugins/application/dashboard/static/registry.css +0 -53
  32. package/dist/plugins/application/dashboard/static/styles.css +29 -20
  33. package/dist/plugins/application/dashboard/static/tabulator.css +83 -31
  34. package/dist/plugins/application/dashboard/static/theme.css +128 -0
  35. package/dist/plugins/application/graphql-apollo.d.ts +33 -0
  36. package/dist/plugins/application/graphql-yoga.d.ts +25 -0
  37. package/dist/plugins/application/openapi/analyzer.d.ts +12 -119
  38. package/dist/plugins/application/openapi/analyzer.impl.d.ts +167 -0
  39. package/dist/plugins/application/scalar.d.ts +9 -2
  40. package/dist/router.d.ts +80 -51
  41. package/dist/shokupan.d.ts +14 -8
  42. package/dist/util/datastore.d.ts +71 -7
  43. package/dist/util/decorators.d.ts +2 -2
  44. package/dist/util/types.d.ts +96 -3
  45. package/package.json +32 -12
  46. package/dist/analyzer-Bei1sVWp.cjs.map +0 -1
  47. package/dist/analyzer-Ce_7JxZh.js.map +0 -1
  48. package/dist/plugins/application/dashboard/static/scrollbar.css +0 -24
  49. package/dist/plugins/application/dashboard/template.eta +0 -246
@@ -0,0 +1,767 @@
1
+ /* API Explorer Styles */
2
+
3
+ /* Reset & Base */
4
+ * {
5
+ box-sizing: border-box;
6
+ }
7
+
8
+ :root {
9
+ --primary: #f59e0b;
10
+ /* Amber-500 */
11
+ --primary-hover: #d97706;
12
+ --text-primary: #e2e8f0;
13
+ --text-secondary: #94a3b8;
14
+ --bg-primary: #0f172a;
15
+ --bg-secondary: #1e293b;
16
+ --bg-card: #020617;
17
+ --border-color: #334155;
18
+
19
+ --method-get: #3b82f6;
20
+ --method-post: #10b981;
21
+ --method-put: #f59e0b;
22
+ --method-delete: #ef4444;
23
+ --method-patch: #8b5cf6;
24
+ }
25
+
26
+ body {
27
+ margin: 0;
28
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
29
+ background: var(--bg-primary);
30
+ color: var(--text-primary);
31
+ height: 100vh;
32
+ display: flex;
33
+ overflow: hidden;
34
+ }
35
+
36
+ /* Layout */
37
+ #app {
38
+ display: flex;
39
+ width: 100%;
40
+ height: 100%;
41
+ }
42
+
43
+ /* Sidebar */
44
+ /* Sidebar */
45
+ .sidebar {
46
+ width: 300px;
47
+ background: var(--bg-secondary);
48
+ border-right: 1px solid var(--border-color);
49
+ display: flex;
50
+ flex-direction: column;
51
+ flex-shrink: 0;
52
+ transition: width 0.2s;
53
+ position: relative;
54
+ /* For resize handle */
55
+ }
56
+
57
+ /* Sidebar Header */
58
+ .sidebar-header {
59
+ padding: 16px;
60
+ border-bottom: 1px solid var(--border-color);
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 12px;
64
+ }
65
+
66
+ .toggle-sidebar {
67
+ background: transparent;
68
+ border: 1px solid var(--border-color);
69
+ color: var(--text-secondary);
70
+ border-radius: 4px;
71
+ cursor: pointer;
72
+ padding: 6px 10px;
73
+ font-size: 1rem;
74
+ line-height: 1;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ transition: all 0.2s;
79
+ }
80
+
81
+ .toggle-sidebar:hover {
82
+ color: var(--text-primary);
83
+ border-color: var(--text-primary);
84
+ background: rgba(255, 255, 255, 0.05);
85
+ }
86
+
87
+ .sidebar-header h1 {
88
+ margin: 0;
89
+ font-size: 1rem;
90
+ color: var(--text-primary);
91
+ font-weight: 600;
92
+ flex: 1;
93
+ white-space: nowrap;
94
+ overflow: hidden;
95
+ text-overflow: ellipsis;
96
+ }
97
+
98
+ .version {
99
+ font-size: 0.7rem;
100
+ color: var(--text-muted);
101
+ background: rgba(255, 255, 255, 0.05);
102
+ padding: 2px 6px;
103
+ border-radius: 4px;
104
+ font-family: 'JetBrains Mono', monospace;
105
+ }
106
+
107
+ /* Nav Tree */
108
+ .nav-tree {
109
+ flex: 1;
110
+ overflow-y: auto;
111
+ padding: 8px 0;
112
+ }
113
+
114
+ .nav-groups {
115
+ display: flex;
116
+ flex-direction: column;
117
+ overflow-y: auto;
118
+ padding-bottom: 4rem;
119
+ }
120
+
121
+ .nav-group-title {
122
+ padding: 8px 16px;
123
+ font-size: 0.8rem;
124
+ text-transform: uppercase;
125
+ color: var(--text-secondary);
126
+ font-weight: 600;
127
+ user-select: none;
128
+ cursor: pointer;
129
+ display: flex;
130
+ align-items: center;
131
+ gap: 8px;
132
+ transition: color 0.1s;
133
+ }
134
+
135
+ .nav-group-title:hover {
136
+ color: var(--text-primary);
137
+ }
138
+
139
+ .nav-group-title .chevron {
140
+ display: flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ width: 16px;
144
+ height: 16px;
145
+ transform: rotate(0deg);
146
+ transition: transform 0.2s ease;
147
+ }
148
+
149
+ .nav-group.collapsed .nav-group-title .chevron {
150
+ transform: rotate(-90deg);
151
+ }
152
+
153
+ .nav-group.collapsed .nav-items {
154
+ display: none;
155
+ }
156
+
157
+ .nav-item {
158
+ padding: 6px 16px 6px 36px;
159
+ /* Indent for items */
160
+ cursor: pointer;
161
+ display: flex;
162
+ align-items: center;
163
+ gap: 10px;
164
+ border-left: 2px solid transparent;
165
+ color: var(--text-secondary);
166
+ font-size: 0.9rem;
167
+ text-decoration: none;
168
+ /* Fix for underscores */
169
+ transition: all 0.1s;
170
+ }
171
+
172
+ .nav-item:hover {
173
+ background: rgba(255, 255, 255, 0.03);
174
+ color: var(--text-primary);
175
+ text-decoration: none;
176
+ }
177
+
178
+ .nav-item.active {
179
+ background: rgba(245, 158, 11, 0.1);
180
+ border-left-color: var(--primary);
181
+ color: var(--primary);
182
+ font-weight: 500;
183
+ }
184
+
185
+ .method-badge {
186
+ font-size: 0.65rem;
187
+ font-weight: 700;
188
+ padding: 2px 6px;
189
+ border-radius: 4px;
190
+ min-width: 45px;
191
+ text-align: center;
192
+ text-transform: uppercase;
193
+ font-family: 'JetBrains Mono', monospace;
194
+ }
195
+
196
+ .nav-label {
197
+ white-space: nowrap;
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ flex: 1;
201
+ }
202
+
203
+ /* Nav Item Wrapper (for items with source links) */
204
+ .nav-item-wrapper {
205
+ position: relative;
206
+ display: flex;
207
+ align-items: center;
208
+ }
209
+
210
+ .nav-item-wrapper .nav-item {
211
+ flex: 1;
212
+ padding-left: 36px;
213
+ /* Indent for items */
214
+ }
215
+
216
+ .nav-source-link {
217
+ opacity: 0;
218
+ padding: 4px 8px;
219
+ margin-right: 8px;
220
+ color: var(--text-secondary);
221
+ text-decoration: none;
222
+ display: flex;
223
+ align-items: center;
224
+ transition: opacity 0.2s, color 0.2s;
225
+ border-radius: 4px;
226
+ }
227
+
228
+ .nav-item-wrapper:hover .nav-source-link {
229
+ opacity: 1;
230
+ }
231
+
232
+ .nav-source-link:hover {
233
+ color: var(--primary);
234
+ background: rgba(245, 158, 11, 0.1);
235
+ }
236
+
237
+ /* Nested Subgroups */
238
+ .nav-subgroup {
239
+ display: flex;
240
+ flex-direction: column;
241
+ }
242
+
243
+ .nav-subgroup-title {
244
+ padding: 6px 16px 6px 36px;
245
+ font-size: 0.75rem;
246
+ text-transform: uppercase;
247
+ color: var(--text-secondary);
248
+ font-weight: 600;
249
+ user-select: none;
250
+ cursor: pointer;
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 6px;
254
+ transition: color 0.1s;
255
+ letter-spacing: 0.5px;
256
+ }
257
+
258
+ .nav-subgroup-title:hover {
259
+ color: var(--text-primary);
260
+ }
261
+
262
+ .nav-subgroup-title .chevron {
263
+ display: flex;
264
+ align-items: center;
265
+ justify-content: center;
266
+ width: 12px;
267
+ height: 12px;
268
+ transform: rotate(0deg);
269
+ transition: transform 0.2s ease;
270
+ }
271
+
272
+ .nav-subgroup.collapsed .nav-subgroup-title .chevron {
273
+ transform: rotate(-90deg);
274
+ }
275
+
276
+ .nav-subgroup.collapsed .nav-subgroup-items {
277
+ display: none;
278
+ }
279
+
280
+ .nav-subgroup-items {
281
+ display: flex;
282
+ flex-direction: column;
283
+ }
284
+
285
+ /* Nav Warning Icon */
286
+ .nav-warning {
287
+ margin-left: auto;
288
+ color: orange;
289
+ display: flex;
290
+ align-items: center;
291
+ }
292
+
293
+ /* Sidebar Utilities */
294
+ .sidebar-collapse-trigger {
295
+ display: none;
296
+ /* Hide for now until implemented */
297
+ }
298
+
299
+ .resize-handle {
300
+ position: absolute;
301
+ right: 0;
302
+ top: 0;
303
+ bottom: 0;
304
+ width: 4px;
305
+ cursor: col-resize;
306
+ z-index: 5;
307
+ background: transparent;
308
+ transition: background 0.2s;
309
+ }
310
+
311
+ .resize-handle:hover {
312
+ background: var(--primary);
313
+ }
314
+
315
+ /* Main Content */
316
+ .content {
317
+ flex: 1;
318
+ display: flex;
319
+ flex-direction: column;
320
+ min-width: 0;
321
+ background: var(--bg-primary);
322
+ }
323
+
324
+ /* IDE Container */
325
+ #ide-container {
326
+ flex: 1;
327
+ display: flex;
328
+ flex-direction: column;
329
+ overflow: hidden;
330
+ }
331
+
332
+ .empty-state {
333
+ margin: auto;
334
+ color: var(--text-secondary);
335
+ font-size: 1.1rem;
336
+ }
337
+
338
+ /* IDE Layout */
339
+ .ide-view {
340
+ display: flex;
341
+ flex-direction: column;
342
+ height: 100%;
343
+ }
344
+
345
+ .ide-panel {
346
+ display: flex;
347
+ flex-direction: column;
348
+ min-height: 200px;
349
+ }
350
+
351
+ .request-panel {
352
+ flex: 1;
353
+ /* Default split, adjustable via JS */
354
+ border-bottom: 1px solid var(--border-color);
355
+ background: var(--bg-primary);
356
+ }
357
+
358
+ .response-panel {
359
+ flex: 1;
360
+ background: var(--bg-card);
361
+ }
362
+
363
+ .panel-resizer {
364
+ height: 4px;
365
+ background: var(--border-color);
366
+ cursor: row-resize;
367
+ flex-shrink: 0;
368
+ transition: background 0.2s;
369
+ }
370
+
371
+ .panel-resizer:hover,
372
+ .panel-resizer.active {
373
+ background: var(--primary);
374
+ }
375
+
376
+ /* Request Header */
377
+ .request-panel-header {
378
+ padding: 12px 16px;
379
+ border-bottom: 1px solid var(--border-color);
380
+ background: var(--bg-secondary);
381
+ }
382
+
383
+ .request-header-main {
384
+ display: flex;
385
+ gap: 12px;
386
+ margin-bottom: 12px;
387
+ }
388
+
389
+ .request-url-bar {
390
+ flex: 1;
391
+ display: flex;
392
+ align-items: center;
393
+ background: var(--bg-card);
394
+ border: 1px solid var(--border-color);
395
+ border-radius: 6px;
396
+ padding: 4px;
397
+ }
398
+
399
+ .url-method {
400
+ padding: 4px 8px;
401
+ border-radius: 4px;
402
+ font-weight: 700;
403
+ font-size: 0.8rem;
404
+ margin-right: 8px;
405
+ user-select: none;
406
+ }
407
+
408
+ .badge-get {
409
+ background: rgba(59, 130, 246, 0.1);
410
+ color: var(--method-get);
411
+ }
412
+
413
+ .badge-post {
414
+ background: rgba(16, 185, 129, 0.1);
415
+ color: var(--method-post);
416
+ }
417
+
418
+ .badge-put {
419
+ background: rgba(245, 158, 11, 0.1);
420
+ color: var(--method-put);
421
+ }
422
+
423
+ .badge-delete {
424
+ background: rgba(239, 68, 68, 0.1);
425
+ color: var(--method-delete);
426
+ }
427
+
428
+ .badge-patch {
429
+ background: rgba(139, 92, 246, 0.1);
430
+ color: var(--method-patch);
431
+ }
432
+
433
+ .url-input {
434
+ flex: 1;
435
+ background: transparent;
436
+ border: none;
437
+ color: var(--text-primary);
438
+ font-family: 'JetBrains Mono', monospace;
439
+ font-size: 0.9rem;
440
+ outline: none;
441
+ }
442
+
443
+ .send-btn {
444
+ background: var(--primary);
445
+ color: #fff;
446
+ border: none;
447
+ border-radius: 6px;
448
+ padding: 0 20px;
449
+ font-weight: 600;
450
+ cursor: pointer;
451
+ transition: filter 0.2s;
452
+ }
453
+
454
+ .send-btn:hover {
455
+ filter: brightness(1.1);
456
+ }
457
+
458
+ .request-actions {
459
+ display: flex;
460
+ gap: 8px;
461
+ justify-content: flex-end;
462
+ }
463
+
464
+ /* Tabs */
465
+ .panel-tabs {
466
+ display: flex;
467
+ background: var(--bg-secondary);
468
+ border-bottom: 1px solid var(--border-color);
469
+ padding: 0 16px;
470
+ gap: 24px;
471
+ }
472
+
473
+ .panel-tab {
474
+ padding: 10px 0;
475
+ font-size: 0.9rem;
476
+ color: var(--text-secondary);
477
+ cursor: pointer;
478
+ border-bottom: 2px solid transparent;
479
+ transition: all 0.2s;
480
+ }
481
+
482
+ .panel-tab:hover {
483
+ color: var(--text-primary);
484
+ }
485
+
486
+ .panel-tab.active {
487
+ color: var(--primary);
488
+ border-bottom-color: var(--primary);
489
+ }
490
+
491
+ /* Panel Content */
492
+ .panel-content {
493
+ flex: 1;
494
+ position: relative;
495
+ overflow: hidden;
496
+ }
497
+
498
+ .panel-section {
499
+ position: absolute;
500
+ top: 0;
501
+ left: 0;
502
+ right: 0;
503
+ bottom: 0;
504
+ display: none;
505
+ /* hidden by default */
506
+ overflow-y: auto;
507
+ }
508
+
509
+ .panel-section.active {
510
+ display: block;
511
+ }
512
+
513
+ /* or flex if needed */
514
+
515
+ /* Info Tab */
516
+ .info-content .info-title {
517
+ margin: 0 0 12px 0;
518
+ font-size: 1.5rem;
519
+ }
520
+
521
+ .info-meta {
522
+ display: flex;
523
+ gap: 16px;
524
+ color: var(--text-secondary);
525
+ font-size: 0.9rem;
526
+ margin-bottom: 16px;
527
+ }
528
+
529
+ .badge {
530
+ background: var(--bg-card);
531
+ border: 1px solid var(--border-color);
532
+ padding: 2px 6px;
533
+ border-radius: 4px;
534
+ font-size: 0.75rem;
535
+ }
536
+
537
+ .middleware-section {
538
+ margin-top: 24px;
539
+ padding-top: 16px;
540
+ border-top: 1px solid var(--border-color);
541
+ }
542
+
543
+ .middleware-list {
544
+ display: flex;
545
+ flex-wrap: wrap;
546
+ gap: 8px;
547
+ margin-top: 8px;
548
+ }
549
+
550
+ .middleware-badge {
551
+ background: rgba(255, 255, 255, 0.05);
552
+ border: 1px solid var(--border-color);
553
+ padding: 4px 8px;
554
+ border-radius: 12px;
555
+ font-size: 0.8rem;
556
+ color: var(--text-secondary);
557
+ cursor: help;
558
+ }
559
+
560
+ /* Source Viewer */
561
+ .source-section {
562
+ margin-top: 24px;
563
+ display: flex;
564
+ flex-direction: column;
565
+ height: 400px;
566
+ }
567
+
568
+ .source-header {
569
+ display: flex;
570
+ justify-content: space-between;
571
+ align-items: center;
572
+ margin-bottom: 8px;
573
+ }
574
+
575
+ /* Params Table */
576
+ .params-table {
577
+ padding: 16px;
578
+ }
579
+
580
+ .param-row {
581
+ display: flex;
582
+ align-items: center;
583
+ border-bottom: 1px solid var(--border-color);
584
+ padding: 8px 0;
585
+ }
586
+
587
+ .param-key {
588
+ width: 150px;
589
+ color: var(--text-primary);
590
+ font-weight: 500;
591
+ }
592
+
593
+ .param-value {
594
+ flex: 1;
595
+ }
596
+
597
+ .param-value input {
598
+ width: 100%;
599
+ background: rgba(255, 255, 255, 0.03);
600
+ border: 1px solid var(--border-color);
601
+ padding: 6px;
602
+ border-radius: 4px;
603
+ color: var(--text-primary);
604
+ }
605
+
606
+ /* Headers Editor */
607
+ .header-row {
608
+ display: flex;
609
+ gap: 8px;
610
+ margin-bottom: 8px;
611
+ }
612
+
613
+ .header-row input {
614
+ width: 100%;
615
+ background: var(--bg-card);
616
+ border: 1px solid var(--border-color);
617
+ padding: 6px;
618
+ border-radius: 4px;
619
+ color: var(--text-primary);
620
+ }
621
+
622
+ /* Response Status Bar */
623
+ .response-status-bar {
624
+ padding: 8px 16px;
625
+ border-bottom: 1px solid var(--border-color);
626
+ background: var(--bg-secondary);
627
+ display: flex;
628
+ align-items: center;
629
+ font-size: 0.9rem;
630
+ color: var(--text-secondary);
631
+ }
632
+
633
+ .monaco-container {
634
+ width: 100%;
635
+ height: 100%;
636
+ min-height: 200px;
637
+ }
638
+
639
+ /* Buttons */
640
+ .btn {
641
+ background: var(--bg-secondary);
642
+ border: 1px solid var(--border-color);
643
+ color: var(--text-primary);
644
+ padding: 6px 12px;
645
+ border-radius: 4px;
646
+ cursor: pointer;
647
+ transition: all 0.1s;
648
+ }
649
+
650
+ .btn:hover {
651
+ border-color: var(--text-primary);
652
+ }
653
+
654
+ .btn-sm {
655
+ font-size: 0.8rem;
656
+ padding: 4px 8px;
657
+ }
658
+
659
+ .icon-btn {
660
+ display: flex;
661
+ align-items: center;
662
+ gap: 4px;
663
+ }
664
+
665
+ /* Response Loader */
666
+ .response-loader {
667
+ position: absolute;
668
+ top: 50%;
669
+ left: 50%;
670
+ transform: translate(-50%, -50%);
671
+ color: var(--text-secondary);
672
+ }
673
+
674
+ /* Markdown */
675
+ .markdown-content {
676
+ line-height: 1.6;
677
+ }
678
+
679
+ .markdown-content pre {
680
+ background: var(--bg-card);
681
+ padding: 12px;
682
+ border-radius: 6px;
683
+ overflow-x: auto;
684
+ }
685
+
686
+ .markdown-alert {
687
+ padding: 12px;
688
+ border-radius: 6px;
689
+ margin: 12px 0;
690
+ border-left: 4px solid;
691
+ background: rgba(255, 255, 255, 0.03);
692
+ }
693
+
694
+ .markdown-alert-title {
695
+ font-weight: bold;
696
+ margin-bottom: 4px;
697
+ }
698
+
699
+ .markdown-alert.note {
700
+ border-color: #3b82f6;
701
+ }
702
+
703
+ .markdown-alert.tip {
704
+ border-color: #10b981;
705
+ }
706
+
707
+ .markdown-alert.important {
708
+ border-color: #8b5cf6;
709
+ }
710
+
711
+ .markdown-alert.warning {
712
+ border-color: #f59e0b;
713
+ }
714
+
715
+ .markdown-alert.caution {
716
+ border-color: #ef4444;
717
+ }
718
+
719
+ /* Highlights */
720
+ .warning-line-highlight {
721
+ background: rgba(251, 191, 36, 0.15);
722
+ border-left: 3px solid #fbbf24;
723
+ }
724
+
725
+ .closure-highlight {
726
+ background: rgb(50 84 217 / 20%);
727
+ /* Blue - SEND (Handler) */
728
+ border-left: 2px solid rgba(59, 130, 246, 0.5);
729
+ }
730
+
731
+ .emit-highlight {
732
+ background: rgba(16, 185, 129, 0.15);
733
+ /* Green - RECV (Emit) */
734
+ border-left: 3px solid #34d399;
735
+ }
736
+
737
+ .warning-glyph {
738
+ background: #fbbf24;
739
+ width: 5px !important;
740
+ margin-left: 3px;
741
+ }
742
+
743
+ .doc-source-link,
744
+ .doc-source-link:visited {
745
+ color: var(--text-muted);
746
+ padding: 4px 8px;
747
+ border-radius: 4px;
748
+ border: 1px solid var(--border-color);
749
+ display: inline-flex;
750
+ align-items: center;
751
+ background: var(--bg-secondary);
752
+ transition: all 0.2s;
753
+ font-size: 0.8rem;
754
+ font-weight: 500;
755
+ text-decoration: none;
756
+ }
757
+
758
+ .doc-source-link:hover {
759
+ color: var(--primary);
760
+ border-color: var(--primary);
761
+ }
762
+
763
+ .success-line-highlight {
764
+ background: rgba(6, 182, 212, 0.15);
765
+ /* Cyan - Success/Static */
766
+ border-left: 3px solid #06b6d4;
767
+ }