react-native-bundle-discovery-ui 2.9.0 → 2.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/assets/global.css CHANGED
@@ -1,52 +1,956 @@
1
+ /*
2
+ * Callstack console style: an off-white page, square cards a shade darker,
3
+ * mono labels in capitals and one accent colour (orange) for brand and
4
+ * interaction only. Status colours always come with a word.
5
+ *
6
+ * The UI lives in a shadow root, so the tokens are set on `.discovery-root`,
7
+ * and discovery.js's own dark mode class replaces their values.
8
+ */
9
+
10
+ /* ------------------------------------------------------------------ */
11
+ /* Tokens */
12
+ /* ------------------------------------------------------------------ */
13
+
14
+ .discovery-root {
15
+ --font-sans: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;
16
+ --font-mono:
17
+ "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
18
+
19
+ --text-xs: 0.75rem;
20
+ --text-sm: 0.875rem;
21
+ --text-md: 1rem;
22
+ --text-lg: 1.25rem;
23
+ --text-xl: 1.75rem;
24
+ --text-2xl: 2rem;
25
+ --label-tracking: 0.08em;
26
+ --title-tracking: -0.02em;
27
+
28
+ --space-1: 4px;
29
+ --space-2: 8px;
30
+ --space-3: 12px;
31
+ --space-4: 16px;
32
+ --space-6: 24px;
33
+ --space-8: 32px;
34
+ --space-12: 48px;
35
+
36
+ --radius: 0;
37
+ --control-height: 40px;
38
+ --duration: 120ms;
39
+
40
+ --bg: #f8f8f7;
41
+ --surface: #f1f1ef;
42
+ --field: #e9e9e7;
43
+ --chip: #e6e6e3;
44
+ --border: #dededb;
45
+ --border-strong: #85857f;
46
+ --text: #111110;
47
+ --text-muted: #5a5a55;
48
+ --accent: #f76b15;
49
+ --accent-hover: #e2560a;
50
+ --on-accent: #111110;
51
+ --accent-text: #b93d0b;
52
+ --selection: #fed7aa;
53
+
54
+ --status-ok: #15803d;
55
+ --status-warn: #a16207;
56
+ --status-error: #b91c1c;
57
+ --status-idle: #57534e;
58
+ --status-error-soft: #ef4444;
59
+ --status-deprecated: #eab308;
60
+ /* Size heat: a soft amber ramp, the share of amber in each step's fill */
61
+ --heat: #f59e0b;
62
+ --heat-1: 14%;
63
+ --heat-2: 30%;
64
+ --heat-3: 52%;
65
+ }
66
+ .discovery-root.discovery-root-darkmode {
67
+ --bg: #0e0e0f;
68
+ --surface: #161618;
69
+ --field: #1e1e21;
70
+ --chip: #232326;
71
+ --border: #2b2b2f;
72
+ --border-strong: #75757d;
73
+ --text: #f2f2f0;
74
+ --text-muted: #a1a1a8;
75
+ --accent: #ff7a1a;
76
+ --accent-hover: #ff9442;
77
+ --on-accent: #0e0e0f;
78
+ --accent-text: #ff8c42;
79
+ --selection: #7c2d12;
80
+
81
+ --status-ok: #4ade80;
82
+ --status-warn: #facc15;
83
+ --status-error: #f87171;
84
+ --status-idle: #a8a29e;
85
+ --status-error-soft: #f87171;
86
+ --status-deprecated: #facc15;
87
+ --heat: #fbbf24;
88
+ --heat-1: 12%;
89
+ --heat-2: 24%;
90
+ --heat-3: 38%;
91
+ }
92
+
93
+ /* discovery.js variables, in both themes */
94
+ .discovery-root.discovery-root {
95
+ --discovery-font-family: var(--font-sans);
96
+ --discovery-ui-font-family: var(--font-sans);
97
+ --discovery-monospace-font-family: var(--font-mono);
98
+ --discovery-monospace-font-size: var(--text-xs);
99
+ --discovery-background-color: var(--bg);
100
+ --discovery-color: var(--text);
101
+ --discovery-link-color: var(--accent-text);
102
+ --discovery-link-hover-color: var(--accent-text);
103
+ --discovery-link-underline-color: color-mix(
104
+ in srgb,
105
+ var(--accent-text) 40%,
106
+ transparent
107
+ );
108
+ --discovery-input-bg-color: var(--field);
109
+ --discovery-input-color: var(--text);
110
+ --discovery-page-padding-top: var(--space-12);
111
+ --discovery-page-padding-right: var(--space-6);
112
+ --discovery-page-padding-bottom: var(--space-4);
113
+ --discovery-page-padding-left: var(--space-6);
114
+
115
+ font-family: var(--font-sans);
116
+ font-size: var(--text-sm);
117
+ line-height: 1.5;
118
+ background-color: var(--bg);
119
+ color: var(--text);
120
+ transition-duration: var(--duration);
121
+ }
122
+ @media (max-width: 767px) {
123
+ .discovery-root.discovery-root {
124
+ --discovery-page-padding-right: var(--space-4);
125
+ --discovery-page-padding-left: var(--space-4);
126
+ }
127
+ }
128
+ @media (prefers-reduced-motion: reduce) {
129
+ .discovery-root,
130
+ .discovery-root * {
131
+ transition: none !important;
132
+ }
133
+ }
134
+
135
+ /* ------------------------------------------------------------------ */
136
+ /* Base */
137
+ /* ------------------------------------------------------------------ */
138
+
139
+ ::selection {
140
+ background: var(--selection);
141
+ color: var(--text);
142
+ }
143
+ :focus-visible {
144
+ outline: 2px solid var(--accent-text);
145
+ outline-offset: 2px;
146
+ }
147
+ code,
148
+ kbd,
149
+ pre {
150
+ font-family: var(--font-mono);
151
+ }
152
+
153
+ .view-h1,
154
+ .view-h2,
155
+ .view-h3,
156
+ .view-h4,
157
+ .view-h5 {
158
+ font-weight: 600;
159
+ line-height: 1.25;
160
+ letter-spacing: var(--title-tracking);
161
+ }
162
+ .view-h1 {
163
+ font-size: var(--text-xl);
164
+ }
165
+ .view-h2 {
166
+ font-size: var(--text-lg);
167
+ }
168
+ .view-h3,
169
+ .view-h4 {
170
+ font-size: var(--text-md);
171
+ }
172
+ .view-h5 {
173
+ font-size: var(--text-sm);
174
+ }
175
+
176
+ .view-link {
177
+ color: var(--accent-text);
178
+ text-underline-offset: 2px;
179
+ transition: text-decoration-color var(--duration);
180
+ }
181
+
1
182
  hr {
2
- border: 1px solid rgb(222 222 222);
3
- margin-top: 1rem;
4
- margin-bottom: 1rem;
183
+ border: 0;
184
+ border-top: 1px solid var(--border);
185
+ margin-top: var(--space-4);
186
+ margin-bottom: var(--space-4);
187
+ }
188
+
189
+ /* A label: Geist Mono, 500, in capitals */
190
+ .view-tab,
191
+ .view-toggle,
192
+ .view-button,
193
+ .view-nav-button,
194
+ .view-table-header-cell,
195
+ .mo-card-label,
196
+ .mo-ext,
197
+ .rb-chip,
198
+ .cmp-more-btn,
199
+ .cd-fold,
200
+ .treemap-color-by-label {
201
+ font-family: var(--font-mono);
202
+ font-weight: 500;
203
+ letter-spacing: var(--label-tracking);
204
+ text-transform: uppercase;
205
+ }
206
+
207
+ /* ------------------------------------------------------------------ */
208
+ /* discovery.js controls */
209
+ /* ------------------------------------------------------------------ */
210
+
211
+ /* Buttons: secondary by default, outlined in --border-strong */
212
+ .view-button {
213
+ --discovery-view-button-color: var(--text);
214
+ --discovery-view-button-background-color: transparent;
215
+ --discovery-view-button-border-color: var(--border-strong);
216
+ --discovery-view-button-hover-background-color: var(--field);
217
+ --discovery-view-button-hover-border-color: var(--text);
218
+ --discovery-view-button-active-background-color: var(--chip);
219
+ --discovery-view-button-focus-background-color: transparent;
220
+ --discovery-view-button-focus-border-color: var(--border-strong);
221
+ min-height: var(--control-height);
222
+ padding: 0 var(--space-4);
223
+ border-radius: var(--radius);
224
+ font-size: var(--text-xs);
225
+ transition-property: background-color, border-color, color;
226
+ transition-duration: var(--duration);
227
+ }
228
+ .view-button:focus-visible {
229
+ box-shadow: none;
230
+ }
231
+ .view-button-primary,
232
+ .discovery-root-darkmode .view-button-primary {
233
+ --discovery-view-button-color: var(--on-accent);
234
+ --discovery-view-button-background-color: var(--accent);
235
+ --discovery-view-button-border-color: var(--accent);
236
+ --discovery-view-button-hover-background-color: var(--accent-hover);
237
+ --discovery-view-button-hover-border-color: var(--accent-hover);
238
+ --discovery-view-button-active-background-color: var(--accent-hover);
239
+ }
240
+
241
+ /* Inputs */
242
+ .view-input input,
243
+ .view-select {
244
+ min-height: var(--control-height);
245
+ border: 1px solid var(--border-strong);
246
+ border-radius: var(--radius);
247
+ background-color: var(--field);
248
+ color: var(--text);
249
+ transition: border-color var(--duration);
250
+ }
251
+ .view-input input {
252
+ padding: 0 var(--space-3);
253
+ font-size: var(--text-sm);
254
+ }
255
+ .view-input input::placeholder {
256
+ color: var(--text-muted);
257
+ }
258
+ .view-input input:hover,
259
+ .view-select:hover {
260
+ border-color: var(--text);
261
+ background-color: var(--field);
262
+ }
263
+ .view-input input:focus,
264
+ .view-select:focus,
265
+ .view-select.discovery-view-popup-active {
266
+ border-color: var(--border-strong);
267
+ box-shadow: none;
268
+ }
269
+ .view-input input:focus-visible {
270
+ outline: 2px solid var(--accent-text);
271
+ outline-offset: 2px;
272
+ }
273
+ .view-select {
274
+ padding-right: var(--space-8);
275
+ font-family: var(--font-mono);
276
+ }
277
+ /* A chevron in --text, 12px in from the right edge (no image) */
278
+ .view-select::after {
279
+ right: var(--space-3);
280
+ width: 8px;
281
+ height: 5px;
282
+ background-image:
283
+ linear-gradient(45deg, transparent 50%, var(--text) 50%),
284
+ linear-gradient(135deg, var(--text) 50%, transparent 50%);
285
+ background-size: 4px 5px;
286
+ background-position:
287
+ left center,
288
+ right center;
289
+ background-repeat: no-repeat;
5
290
  }
6
291
 
292
+ .view-checkbox > input {
293
+ border: 1px solid var(--border-strong);
294
+ border-radius: var(--radius);
295
+ background-color: var(--field);
296
+ }
297
+ .view-checkbox > input:checked,
298
+ .view-checkbox > input:active {
299
+ border-color: var(--accent);
300
+ background-color: var(--accent);
301
+ }
302
+ .view-checkbox > input:focus-visible {
303
+ box-shadow: none;
304
+ outline: 2px solid var(--accent-text);
305
+ outline-offset: 2px;
306
+ }
307
+
308
+ /* Toggle groups: a segmented control of labels */
309
+ .view-toggle-group {
310
+ align-items: center;
311
+ }
312
+ .view-toggle-group-before {
313
+ color: var(--text-muted);
314
+ font-family: var(--font-mono);
315
+ font-size: var(--text-xs);
316
+ font-weight: 500;
317
+ letter-spacing: var(--label-tracking);
318
+ text-transform: uppercase;
319
+ }
320
+ .view-toggle {
321
+ display: inline-flex;
322
+ align-items: center;
323
+ min-height: 32px;
324
+ padding: 0 var(--space-3);
325
+ border: 1px solid var(--border-strong);
326
+ border-radius: var(--radius);
327
+ background: transparent;
328
+ color: var(--text-muted);
329
+ font-size: var(--text-xs);
330
+ transition-property: background-color, color;
331
+ transition-duration: var(--duration);
332
+ }
333
+ .view-toggle-group .view-toggle + .view-toggle {
334
+ margin-left: -1px;
335
+ }
336
+ .view-toggle:hover {
337
+ background-color: var(--field);
338
+ color: var(--text);
339
+ }
340
+ .view-toggle.checked {
341
+ border-color: var(--accent);
342
+ background-color: var(--accent);
343
+ color: var(--on-accent);
344
+ position: relative;
345
+ z-index: 1;
346
+ }
347
+
348
+ /* Tabs: labels in --text-muted, the current one in --text with an orange underline */
349
+ .view-tabs-buttons {
350
+ --discovery-view-tabs-border: 1px solid var(--border);
351
+ margin-top: 0;
352
+ flex-wrap: nowrap;
353
+ overflow-x: auto;
354
+ scrollbar-width: none;
355
+ }
356
+ .view-tabs-buttons::before {
357
+ width: 0;
358
+ }
359
+ .view-tab {
360
+ display: inline-flex;
361
+ align-items: center;
362
+ gap: var(--space-2);
363
+ height: var(--control-height);
364
+ padding: 0 var(--space-4);
365
+ border-bottom: var(--discovery-view-tabs-border);
366
+ color: var(--text-muted);
367
+ font-size: var(--text-xs);
368
+ transition: color var(--duration);
369
+ }
370
+ .view-tab:hover {
371
+ color: var(--text);
372
+ }
373
+ .view-tab.active {
374
+ padding-bottom: 0;
375
+ border-bottom: 2px solid var(--accent);
376
+ color: var(--text);
377
+ }
378
+ .view-tab.active::before {
379
+ display: none;
380
+ }
381
+
382
+ /* Badges: a small square box with a mono value; their colours are not used */
383
+ .view-badge,
384
+ .view-pill-badge,
385
+ .discovery-root-darkmode .view-badge,
386
+ .discovery-root-darkmode .view-pill-badge {
387
+ display: inline-flex;
388
+ align-items: center;
389
+ padding: 0 var(--space-2);
390
+ border: 1px solid color-mix(in srgb, var(--border-strong) 45%, var(--border));
391
+ border-radius: var(--radius);
392
+ background: var(--bg);
393
+ color: var(--text);
394
+ font-family: var(--font-mono);
395
+ font-size: var(--text-xs);
396
+ font-weight: 500;
397
+ line-height: 18px;
398
+ text-shadow: none;
399
+ vertical-align: 1px;
400
+ }
401
+ .view-badge > .prefix,
402
+ .view-badge > .postfix,
403
+ .view-pill-badge > .prefix,
404
+ .view-pill-badge > .postfix {
405
+ margin-top: 0;
406
+ margin-bottom: 0;
407
+ padding: 0 var(--space-2);
408
+ border-radius: var(--radius);
409
+ background-color: transparent;
410
+ color: var(--text);
411
+ font-weight: 400;
412
+ }
413
+ .view-badge > .prefix,
414
+ .view-pill-badge > .prefix {
415
+ margin-left: calc(-1 * var(--space-2));
416
+ border-right: 1px solid var(--border);
417
+ }
418
+ .view-badge > .postfix,
419
+ .view-pill-badge > .postfix {
420
+ margin-right: calc(-1 * var(--space-2));
421
+ border-left: 1px solid var(--border);
422
+ }
423
+ .view-badge[href]:hover,
424
+ .view-pill-badge[href]:hover {
425
+ background-image: none;
426
+ background-color: var(--field);
427
+ }
428
+ /* A count in a tab */
429
+ .view-tab .view-pill-badge {
430
+ margin-right: 0;
431
+ background: transparent;
432
+ color: inherit;
433
+ letter-spacing: 0;
434
+ }
435
+
436
+ /* Lists and trees: bigger text, readable hover states */
437
+ .view-tree {
438
+ font-size: var(--text-sm);
439
+ line-height: 28px;
440
+ }
441
+ .view-tree-leaf-toggle,
442
+ .view-tree-leaf-toggle:hover {
443
+ color: var(--text-muted);
444
+ }
445
+ .view-link:hover {
446
+ text-decoration-color: currentColor;
447
+ }
448
+ .view-text-match {
449
+ border-bottom: 2px solid var(--accent-text);
450
+ background: var(--selection);
451
+ color: var(--text);
452
+ }
453
+ /* The checked toggle keeps its colours on hover */
454
+ .view-toggle.checked:hover {
455
+ border-color: var(--accent-hover);
456
+ background-color: var(--accent-hover);
457
+ color: var(--on-accent);
458
+ }
459
+ .sort-toggle-group .view-toggle {
460
+ min-height: var(--control-height);
461
+ }
462
+
463
+ /* A file extension: its own colour, as a tint with readable text */
464
+ .view-pill-badge.ext-badge,
465
+ .discovery-root-darkmode .view-pill-badge.ext-badge {
466
+ border-color: color-mix(
467
+ in srgb,
468
+ var(--discovery-view-badge-color) 70%,
469
+ var(--bg)
470
+ );
471
+ background: color-mix(
472
+ in srgb,
473
+ var(--discovery-view-badge-color) 22%,
474
+ var(--bg)
475
+ );
476
+ color: var(--text);
477
+ }
478
+
479
+ /* Problems a developer has to see: duplicated (light red), outdated (amber),
480
+ deprecated (yellow). `--status` colours the edge, the fill and the square */
481
+ .view-pill-badge.badge-danger,
482
+ .view-pill-badge.badge-warn,
483
+ .view-pill-badge.badge-deprecated,
484
+ .discovery-root-darkmode .view-pill-badge.badge-danger,
485
+ .discovery-root-darkmode .view-pill-badge.badge-warn,
486
+ .discovery-root-darkmode .view-pill-badge.badge-deprecated,
487
+ .mo-chip.mo-chip-danger,
488
+ .mo-chip.mo-chip-warn,
489
+ .mo-chip.mo-chip-deprecated {
490
+ --status: var(--status-error-soft);
491
+ border-color: color-mix(in srgb, var(--status) 60%, var(--bg));
492
+ background: color-mix(in srgb, var(--status) 8%, var(--bg));
493
+ color: var(--status-error);
494
+ font-weight: 600;
495
+ }
496
+ .view-pill-badge.badge-warn,
497
+ .discovery-root-darkmode .view-pill-badge.badge-warn,
498
+ .mo-chip.mo-chip-warn {
499
+ --status: var(--status-warn);
500
+ color: var(--status-warn);
501
+ }
502
+ .view-pill-badge.badge-deprecated,
503
+ .discovery-root-darkmode .view-pill-badge.badge-deprecated,
504
+ .mo-chip.mo-chip-deprecated {
505
+ --status: var(--status-deprecated);
506
+ border-color: var(--status);
507
+ background: color-mix(in srgb, var(--status) 22%, var(--bg));
508
+ color: var(--text);
509
+ }
510
+ .view-pill-badge.badge-danger::before,
511
+ .view-pill-badge.badge-warn::before,
512
+ .view-pill-badge.badge-deprecated::before,
513
+ .mo-chip.mo-chip-danger::before,
514
+ .mo-chip.mo-chip-warn::before,
515
+ .mo-chip.mo-chip-deprecated::before {
516
+ content: "";
517
+ flex: none;
518
+ display: inline-block;
519
+ width: 8px;
520
+ height: 8px;
521
+ margin-right: var(--space-1);
522
+ background: var(--status);
523
+ }
524
+
525
+ /* The biggest packages and modules: a soft amber, the bigger the stronger */
526
+ .size-heat,
527
+ .discovery-root-darkmode .view-pill-badge.size-heat {
528
+ --heat-mix: var(--heat-1);
529
+ border: 1px solid color-mix(in srgb, var(--heat) 70%, var(--bg));
530
+ background: color-mix(in srgb, var(--heat) var(--heat-mix), var(--bg));
531
+ color: var(--text);
532
+ font-weight: 600;
533
+ }
534
+ .size-heat-2,
535
+ .discovery-root-darkmode .view-pill-badge.size-heat-2 {
536
+ --heat-mix: var(--heat-2);
537
+ }
538
+ .size-heat-3,
539
+ .discovery-root-darkmode .view-pill-badge.size-heat-3 {
540
+ --heat-mix: var(--heat-3);
541
+ border-color: var(--heat);
542
+ }
543
+ .in-row-size.size-heat {
544
+ justify-self: end;
545
+ padding: 0 var(--space-2);
546
+ }
547
+
548
+ /* Expandable rows (module trees, package lists, findings) */
549
+ .view-expand > .header {
550
+ --discovery-view-expand-trigger-size: 28px;
551
+ background-color: var(--surface);
552
+ font-size: var(--text-sm);
553
+ line-height: 1.5;
554
+ transition: background-color var(--duration);
555
+ }
556
+ .view-expand > .header:hover {
557
+ background-color: var(--field);
558
+ }
559
+ .view-expand > .header > .header-content {
560
+ padding: var(--space-1) var(--space-2);
561
+ }
562
+ .view-expand > .header > .trigger {
563
+ background-image: none;
564
+ background-color: var(--chip);
565
+ }
566
+ .view-expand > .header > .trigger::before {
567
+ transition: none;
568
+ }
569
+
570
+ /* Tables: labels as headers, roomy rows with a line between them */
571
+ .view-table {
572
+ --table-cell-padding-top: var(--space-4);
573
+ --table-cell-padding-right: var(--space-4);
574
+ --table-cell-padding-bottom: var(--space-4);
575
+ --table-cell-padding-left: var(--space-4);
576
+ border: 1px solid var(--border);
577
+ background: var(--surface);
578
+ font-size: var(--text-sm);
579
+ line-height: 1.5;
580
+ }
581
+ .view-table-header-cell {
582
+ border: 0;
583
+ border-bottom: 1px solid var(--border);
584
+ background-color: var(--surface);
585
+ color: var(--text-muted);
586
+ font-size: var(--text-xs);
587
+ }
588
+ .view-table-header-cell.sortable:hover {
589
+ background-color: var(--field);
590
+ }
591
+ .view-table > tbody > .view-table-row:not(:last-child) > td,
592
+ .view-table > tbody:not(:last-child) > .view-table-row:last-child > td {
593
+ border-bottom: 1px solid var(--border);
594
+ }
595
+ .view-table-cell.number {
596
+ font-family: var(--font-mono);
597
+ }
598
+
599
+ /* Alerts: a card with a status square */
600
+ .view-alert,
601
+ .discovery-root-darkmode .view-alert {
602
+ display: flex;
603
+ align-items: baseline;
604
+ flex-wrap: wrap;
605
+ gap: 0 var(--space-2);
606
+ padding: var(--space-3) var(--space-4);
607
+ border: 1px solid var(--border);
608
+ border-radius: var(--radius);
609
+ background: var(--surface);
610
+ color: var(--text);
611
+ }
612
+ .view-alert-success::before,
613
+ .view-alert-warning::before,
614
+ .view-alert-danger::before {
615
+ content: "";
616
+ flex: none;
617
+ width: 8px;
618
+ height: 8px;
619
+ background: var(--status-ok);
620
+ }
621
+ .view-alert-warning::before {
622
+ background: var(--status-warn);
623
+ }
624
+ .view-alert-danger::before {
625
+ background: var(--status-error);
626
+ }
627
+
628
+ /* Popups and menus */
629
+ .discovery-view-popup {
630
+ border: 1px solid var(--border);
631
+ border-radius: var(--radius);
632
+ box-shadow: none;
633
+ background-color: var(--bg);
634
+ }
635
+ .view-menu-item {
636
+ padding: var(--space-2) var(--space-3);
637
+ }
638
+ .view-menu-item:hover,
639
+ .view-menu-item.discovery-view-popup-active {
640
+ background: var(--field);
641
+ }
642
+ .view-menu-item.selected {
643
+ background: var(--chip);
644
+ }
645
+
646
+ /* Nav buttons in the top right corner */
647
+ .discovery-nav,
648
+ .discovery-root-darkmode .discovery-nav {
649
+ padding: 0;
650
+ border: 1px solid var(--border);
651
+ border-top: 0;
652
+ border-radius: var(--radius);
653
+ background-color: var(--bg);
654
+ -webkit-backdrop-filter: none;
655
+ backdrop-filter: none;
656
+ }
657
+ .discovery-nav > :first-child,
658
+ .discovery-nav > :last-child {
659
+ border-radius: var(--radius);
660
+ }
661
+ .view-nav-button,
662
+ .discovery-root-darkmode .view-nav-button {
663
+ padding: var(--space-1) var(--space-3);
664
+ background-color: transparent;
665
+ color: var(--text-muted);
666
+ font-size: var(--text-xs);
667
+ transition: color var(--duration);
668
+ }
669
+ .view-nav-button + .view-nav-button {
670
+ margin-left: 0;
671
+ border-left: 1px solid var(--border);
672
+ }
673
+ .view-nav-button:hover,
674
+ .view-nav-button:focus,
675
+ .view-nav-button.discovery-view-popup-active {
676
+ background-color: var(--field);
677
+ color: var(--text);
678
+ }
679
+
680
+ /* Source code */
681
+ .view-source {
682
+ border: 1px solid var(--border);
683
+ border-radius: var(--radius);
684
+ background-color: var(--surface);
685
+ }
686
+
687
+ /* ------------------------------------------------------------------ */
688
+ /* Helpers */
689
+ /* ------------------------------------------------------------------ */
690
+
7
691
  .inline-block {
8
692
  display: inline-block;
9
693
  }
694
+ .flex-no-wrap {
695
+ flex-wrap: nowrap;
696
+ }
697
+ .width-50p {
698
+ width: 50%;
699
+ }
700
+ .no-margin {
701
+ margin: 0;
702
+ }
703
+ .two-column > * {
704
+ width: 50%;
705
+ }
706
+ .m-v-8 {
707
+ margin-top: var(--space-2);
708
+ margin-bottom: var(--space-2);
709
+ }
710
+ .m-l-0_5em {
711
+ margin-left: var(--space-2);
712
+ }
713
+ .m-r-0_3em {
714
+ margin-right: var(--space-1);
715
+ }
716
+ .i-duplicate {
717
+ display: inline-block;
718
+ padding: 0 var(--space-2);
719
+ border: 1px solid var(--border);
720
+ background: var(--chip);
721
+ color: var(--text);
722
+ font-family: var(--font-mono);
723
+ font-size: var(--text-xs);
724
+ }
725
+ .i-duplicate::before {
726
+ content: "";
727
+ display: inline-block;
728
+ width: 8px;
729
+ height: 8px;
730
+ margin-right: var(--space-1);
731
+ background: var(--status-error);
732
+ }
733
+
734
+ /* An 8px square of a status colour, before the status's word */
735
+ .mo-chip-warn::before,
736
+ .mo-chip-danger::before,
737
+ .rb-chip-ok::before,
738
+ .rb-chip-warn::before,
739
+ .mo-card-danger .mo-card-label::before,
740
+ .mo-card-good .mo-card-label::before,
741
+ .in-severity::before,
742
+ .cmp-warning::before {
743
+ content: "";
744
+ flex: none;
745
+ display: inline-block;
746
+ width: 8px;
747
+ height: 8px;
748
+ margin-right: var(--space-2);
749
+ background: var(--status-idle);
750
+ }
751
+ .mo-chip-warn::before,
752
+ .rb-chip-warn::before,
753
+ .cmp-warning::before,
754
+ .in-finding-medium .in-severity::before {
755
+ background: var(--status-warn);
756
+ }
757
+ .mo-chip-danger::before,
758
+ .mo-card-danger .mo-card-label::before,
759
+ .in-finding-high .in-severity::before {
760
+ background: var(--status-error);
761
+ }
762
+ .rb-chip-ok::before,
763
+ .mo-card-good .mo-card-label::before {
764
+ background: var(--status-ok);
765
+ }
766
+
767
+ /* ------------------------------------------------------------------ */
768
+ /* Default page */
769
+ /* ------------------------------------------------------------------ */
770
+
10
771
  .discovery-content > .page-default {
772
+ box-sizing: border-box;
11
773
  height: 100%;
12
774
  overflow: hidden;
13
- padding-top: 16px;
14
- padding-bottom: 16px;
775
+ padding-top: var(--space-4);
776
+ padding-bottom: var(--space-4);
15
777
  }
16
778
  .view-tabs-content > .view-content-filter > .view-input {
17
- padding-top: 12px;
18
- padding-bottom: 12px;
779
+ padding-top: var(--space-4);
780
+ padding-bottom: var(--space-4);
19
781
  margin: 0;
20
- background-color: var(--discovery-background-color);
782
+ background-color: var(--bg);
21
783
  position: sticky;
22
784
  top: 0;
23
785
  z-index: 1;
24
786
  }
25
787
  .main-tabs {
26
- height: calc(100% - 20px);
27
- margin-top: 12px;
788
+ height: calc(100% - var(--control-height) - var(--space-4));
789
+ margin-top: var(--space-4);
28
790
  }
29
791
  .main-tabs .view-tabs-content {
30
- height: calc(100% - 32px);
792
+ height: calc(100% - var(--control-height) - 1px);
31
793
  }
32
794
  .view-pill-badge.cmp-tab-delta-good {
33
- color: #1a9b4b;
34
- background: rgb(26 155 75 / 15%);
795
+ color: var(--status-ok);
35
796
  }
36
797
  .view-pill-badge.cmp-tab-delta-bad {
37
- color: #d1343e;
38
- background: rgb(209 52 62 / 15%);
798
+ color: var(--status-error);
39
799
  }
40
800
  .view-pill-badge.cmp-tab-delta-ok {
41
- opacity: 0.75;
801
+ color: var(--text-muted);
802
+ }
803
+
804
+ /* Report bar on top of the default page */
805
+ .report-bar {
806
+ display: flex;
807
+ align-items: center;
808
+ gap: var(--space-6);
809
+ height: var(--control-height);
810
+ /* leave room for the discovery.js nav buttons on the right */
811
+ padding-right: 170px;
812
+ font-size: var(--text-sm);
813
+ white-space: nowrap;
814
+ overflow: hidden;
815
+ }
816
+ .rb-build {
817
+ display: flex;
818
+ gap: var(--space-2);
819
+ flex: none;
820
+ }
821
+ .rb-chip {
822
+ display: inline-flex;
823
+ align-items: center;
824
+ height: 28px;
825
+ padding: 0 var(--space-2);
826
+ border: 1px solid var(--border);
827
+ background: var(--surface);
828
+ color: var(--text);
829
+ font-size: var(--text-xs);
830
+ }
831
+ .rb-chip-platform {
832
+ border-color: var(--chip);
833
+ background: var(--chip);
834
+ }
835
+ .rb-chip-warn {
836
+ cursor: help;
837
+ }
838
+ .rb-size {
839
+ display: flex;
840
+ flex: none;
841
+ align-items: center;
842
+ gap: var(--space-3);
843
+ }
844
+ .rb-total {
845
+ font-family: var(--font-mono);
846
+ font-size: var(--text-md);
847
+ font-weight: 500;
848
+ letter-spacing: var(--title-tracking);
849
+ }
850
+ .rb-split {
851
+ display: flex;
852
+ flex: none;
853
+ width: 96px;
854
+ height: 8px;
855
+ overflow: hidden;
856
+ background: var(--border);
857
+ }
858
+ .rb-split-own,
859
+ .rb-dot-own {
860
+ background: var(--accent);
861
+ }
862
+ .rb-split-nm,
863
+ .rb-dot-nm {
864
+ background: var(--border-strong);
865
+ }
866
+ .rb-legend {
867
+ display: flex;
868
+ gap: var(--space-4);
869
+ color: var(--text-muted);
870
+ }
871
+ .rb-legend .rb-chip {
872
+ height: 22px;
873
+ margin-left: var(--space-1);
874
+ letter-spacing: 0;
875
+ }
876
+ .rb-dot {
877
+ display: inline-block;
878
+ width: 8px;
879
+ height: 8px;
880
+ margin-right: var(--space-2);
881
+ }
882
+ /* The least important part: shrinks first */
883
+ .rb-date {
884
+ min-width: 0;
885
+ margin-left: auto;
886
+ overflow: hidden;
887
+ text-overflow: ellipsis;
888
+ color: var(--text-muted);
889
+ font-family: var(--font-mono);
890
+ font-size: var(--text-xs);
891
+ }
892
+ @media (max-width: 1000px) {
893
+ .rb-date {
894
+ display: none;
895
+ }
896
+ }
897
+
898
+ /* Tabs with several sections scroll as a whole */
899
+ .tab-scroll {
900
+ height: 100%;
901
+ overflow: auto;
902
+ padding-top: var(--space-4);
903
+ box-sizing: border-box;
904
+ }
905
+ .dup-title {
906
+ display: flex;
907
+ align-items: center;
908
+ gap: var(--space-2);
909
+ margin: var(--space-6) 0 var(--space-3);
910
+ }
911
+ .dup-title:first-child {
912
+ margin-top: 0;
913
+ }
914
+ .dup-empty {
915
+ display: block;
916
+ color: var(--text-muted);
42
917
  }
918
+
919
+ /* Sortable list: sort toggles, filter, the list */
920
+ .sortable-content-filter {
921
+ display: grid;
922
+ grid-template-columns: auto 1fr;
923
+ grid-template-rows: auto auto minmax(0, 1fr);
924
+ column-gap: var(--space-4);
925
+ align-items: center;
926
+ height: 100%;
927
+ }
928
+ .sort-toggle-group .view-toggle.checked {
929
+ cursor: pointer;
930
+ }
931
+ .sortable-content-filter > .filtered-size {
932
+ grid-row: 2;
933
+ grid-column: 1 / -1;
934
+ justify-self: start;
935
+ margin-bottom: var(--space-2);
936
+ }
937
+ .sortable-content-filter > .content {
938
+ grid-row: 3;
939
+ grid-column: 1 / -1;
940
+ align-self: stretch;
941
+ }
942
+
943
+ /* ------------------------------------------------------------------ */
944
+ /* Treemap */
945
+ /* ------------------------------------------------------------------ */
946
+
43
947
  .treemap-filter,
44
948
  .view-treemap {
45
949
  width: 100%;
46
950
  height: 100%;
47
951
  }
48
952
  .treemap-filter > .content {
49
- height: calc(100% - 60px);
953
+ height: calc(100% - 72px);
50
954
  width: 100%;
51
955
  }
52
956
  .treemap-tooltip {
@@ -54,13 +958,12 @@ hr {
54
958
  z-index: 10;
55
959
  display: none;
56
960
  max-width: 480px;
961
+ padding: var(--space-2) var(--space-3);
57
962
  pointer-events: none;
58
963
  overflow-wrap: anywhere;
59
- background-color: var(--discovery-background-color, #fff);
60
- border: 1px solid #ccc;
61
- padding: 5px 8px;
62
- border-radius: 5px;
63
- box-shadow: 0 0 5px rgb(0 0 0 / 20%);
964
+ border: 1px solid var(--border);
965
+ background-color: var(--bg);
966
+ font-size: var(--text-sm);
64
967
  }
65
968
  .treemap-header {
66
969
  position: absolute;
@@ -70,14 +973,14 @@ hr {
70
973
  height: 26px;
71
974
  display: flex;
72
975
  align-items: center;
73
- gap: 12px;
976
+ gap: var(--space-3);
74
977
  }
75
978
  .treemap-breadcrumb {
76
979
  flex: 1;
77
980
  min-width: 0;
78
981
  display: flex;
79
982
  align-items: center;
80
- gap: 4px;
983
+ gap: var(--space-1);
81
984
  overflow: hidden;
82
985
  white-space: nowrap;
83
986
  }
@@ -85,99 +988,87 @@ hr {
85
988
  flex: none;
86
989
  display: flex;
87
990
  align-items: center;
88
- gap: 8px;
89
- font-size: 12px;
991
+ gap: var(--space-2);
992
+ font-size: var(--text-xs);
90
993
  white-space: nowrap;
91
994
  }
92
995
  .treemap-legend {
93
996
  display: flex;
94
- gap: 10px;
95
- opacity: 0.85;
997
+ gap: var(--space-3);
998
+ color: var(--text-muted);
999
+ font-family: var(--font-mono);
96
1000
  }
97
1001
  .treemap-swatch {
98
1002
  display: inline-block;
99
- width: 10px;
100
- height: 10px;
101
- margin-right: 4px;
102
- border-radius: 2px;
103
- vertical-align: -1px;
1003
+ width: 8px;
1004
+ height: 8px;
1005
+ margin-right: var(--space-1);
1006
+ vertical-align: 0;
104
1007
  }
105
1008
  .treemap-color-by-label {
106
- opacity: 0.6;
1009
+ color: var(--text-muted);
107
1010
  }
108
1011
  .treemap-color-by .view-toggle {
1012
+ min-height: 26px;
109
1013
  cursor: pointer;
110
1014
  }
111
1015
  .treemap-breadcrumb-item {
1016
+ padding: 1px var(--space-2);
1017
+ border: 1px solid var(--border);
1018
+ background: var(--surface);
1019
+ font-family: var(--font-mono);
1020
+ font-size: var(--text-xs);
112
1021
  cursor: pointer;
113
- padding: 2px 8px;
114
- border-radius: 4px;
115
- background: rgb(128 128 128 / 15%);
1022
+ transition: background-color var(--duration);
116
1023
  }
117
1024
  .treemap-breadcrumb-item:hover {
118
- background: rgb(128 128 128 / 30%);
1025
+ background: var(--field);
119
1026
  }
120
1027
  .treemap-breadcrumb-item:last-child {
121
- font-weight: bold;
122
- }
123
- .flex-no-wrap {
124
- flex-wrap: nowrap;
125
- }
126
- .width-50p {
127
- width: 50%;
128
- }
129
- .no-margin {
130
- margin: 0;
131
- }
132
- .two-column > * {
133
- width: 50%;
134
- }
135
- .m-v-8 {
136
- margin-top: 8px;
137
- margin-bottom: 8px;
1028
+ border-color: var(--chip);
1029
+ background: var(--chip);
1030
+ font-weight: 600;
138
1031
  }
139
- .i-duplicate {
1032
+
1033
+ /* ------------------------------------------------------------------ */
1034
+ /* Copy button, prettify checkbox */
1035
+ /* ------------------------------------------------------------------ */
1036
+
1037
+ .copy-to-clipboard {
140
1038
  display: inline-block;
141
- background: #da444e;
142
- color: #fff;
143
- border-radius: 0.5em;
144
- padding: 0 0.5em;
145
- }
146
- .m-l-0_5em {
147
- margin-left: 0.5em;
148
- }
149
- .m-r-0_3em {
150
- margin-right: 0.3em;
1039
+ height: var(--control-height);
1040
+ width: var(--control-height);
1041
+ padding: 0;
151
1042
  }
152
- .copy-to-clipboard {
1043
+ /* The icon, in the button's text colour */
1044
+ .copy-to-clipboard::after {
1045
+ content: "";
1046
+ position: absolute;
1047
+ inset: 0;
1048
+ background-color: currentColor;
153
1049
  /* from: https://tabler.io/icons/icon/clipboard-copy */
154
- background: url("data:image/svg+xml,%3Csvg%20%20xmlns=%22http://www.w3.org/2000/svg%22%20%20width=%2224%22%20%20height=%2224%22%20%20viewBox=%220%200%2024%2024%22%20%20fill=%22none%22%20%20stroke=%22currentColor%22%20%20stroke-width=%222%22%20%20stroke-linecap=%22round%22%20%20stroke-linejoin=%22round%22%20%20class=%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-clipboard-copy%22%3E%3Cpath%20stroke=%22none%22%20d=%22M0%200h24v24H0z%22%20fill=%22none%22/%3E%3Cpath%20d=%22M9%205h-2a2%202%200%200%200%20-2%202v12a2%202%200%200%200%202%202h3m9%20-9v-5a2%202%200%200%200%20-2%20-2h-2%22%20/%3E%3Cpath%20d=%22M13%2017v-1a1%201%200%200%201%201%20-1h1m3%200h1a1%201%200%200%201%201%201v1m0%203v1a1%201%200%200%201%20-1%201h-1m-3%200h-1a1%201%200%200%201%20-1%20-1v-1%22%20/%3E%3Cpath%20d=%22M9%203m0%202a2%202%200%200%201%202%20-2h2a2%202%200%200%201%202%202v0a2%202%200%200%201%20-2%202h-2a2%202%200%200%201%20-2%20-2z%22%20/%3E%3C/svg%3E");
155
- background-repeat: no-repeat;
156
- background-position: center;
157
- display: inline-block;
158
- height: 32px;
159
- width: 32px;
1050
+ mask:
1051
+ url("data:image/svg+xml,%3Csvg%20%20xmlns=%22http://www.w3.org/2000/svg%22%20%20width=%2224%22%20%20height=%2224%22%20%20viewBox=%220%200%2024%2024%22%20%20fill=%22none%22%20%20stroke=%22currentColor%22%20%20stroke-width=%222%22%20%20stroke-linecap=%22round%22%20%20stroke-linejoin=%22round%22%20%20class=%22icon%20icon-tabler%20icons-tabler-outline%20icon-tabler-clipboard-copy%22%3E%3Cpath%20stroke=%22none%22%20d=%22M0%200h24v24H0z%22%20fill=%22none%22/%3E%3Cpath%20d=%22M9%205h-2a2%202%200%200%200%20-2%202v12a2%202%200%200%200%202%202h3m9%20-9v-5a2%202%200%200%200%20-2%20-2h-2%22%20/%3E%3Cpath%20d=%22M13%2017v-1a1%201%200%200%201%201%20-1h1m3%200h1a1%201%200%200%201%201%201v1m0%203v1a1%201%200%200%201%20-1%201h-1m-3%200h-1a1%201%200%200%201%20-1%20-1v-1%22%20/%3E%3Cpath%20d=%22M9%203m0%202a2%202%200%200%201%202%20-2h2a2%202%200%200%201%202%202v0a2%202%200%200%201%20-2%202h-2a2%202%200%200%201%20-2%20-2z%22%20/%3E%3C/svg%3E")
1052
+ no-repeat center / 18px;
160
1053
  }
161
1054
  .copy-to-clipboard::before {
162
1055
  position: absolute;
163
- top: -8px;
164
- font-size: 0.7rem;
165
- border-radius: 4px;
166
- display: inline-block;
167
- padding: 1px 4px;
168
- color: #fff;
169
- left: 78%;
1056
+ top: calc(-1 * var(--space-6));
1057
+ right: 0;
1058
+ padding: 2px var(--space-2);
1059
+ background: var(--text);
1060
+ color: var(--bg);
1061
+ font-size: var(--text-xs);
1062
+ white-space: nowrap;
170
1063
  opacity: 0;
171
- transition: opacity 0.3s ease-in-out;
1064
+ transition: opacity var(--duration);
172
1065
  }
173
1066
  .copy-to-clipboard.done::before {
174
- content: "Copied!";
175
- background: green;
1067
+ content: "Copied";
176
1068
  opacity: 1;
177
1069
  }
178
1070
  .copy-to-clipboard.err::before {
179
- content: "Error!";
180
- background: red;
1071
+ content: "Copy failed";
181
1072
  opacity: 1;
182
1073
  }
183
1074
  .prettify-checkbox {
@@ -186,458 +1077,199 @@ hr {
186
1077
  margin-top: -26px;
187
1078
  z-index: 1;
188
1079
  }
189
- .sortable-content-filter {
190
- display: grid;
191
- grid-template-columns: auto 1fr;
192
- grid-template-rows: auto auto minmax(0, 1fr);
193
- column-gap: 1em;
194
- align-items: center;
195
- height: 100%;
196
- }
197
- .sort-toggle-group .view-toggle.checked {
198
- cursor: pointer;
199
- }
200
- .sortable-content-filter > .filtered-size {
201
- grid-row: 2;
202
- grid-column: 1 / -1;
203
- justify-self: start;
204
- margin-bottom: 0.5em;
205
- }
206
- .sortable-content-filter > .content {
207
- grid-row: 3;
208
- grid-column: 1 / -1;
209
- align-self: stretch;
210
- }
211
1080
 
212
- /* Module page */
1081
+ /* ------------------------------------------------------------------ */
1082
+ /* Module and package pages */
1083
+ /* ------------------------------------------------------------------ */
1084
+
213
1085
  .mo-wrap {
214
1086
  position: relative;
215
- margin-bottom: 20px;
1087
+ margin-bottom: var(--space-6);
216
1088
  }
217
1089
  .mo-copy {
218
1090
  position: absolute;
219
- top: 16px;
220
- right: 16px;
1091
+ top: var(--space-4);
1092
+ right: var(--space-4);
221
1093
  }
222
1094
  .mo-header {
223
1095
  display: flex;
224
- gap: 16px;
1096
+ gap: var(--space-4);
225
1097
  align-items: flex-start;
226
- padding: 18px 64px 18px 20px;
227
- border: 1px solid rgb(128 128 128 / 22%);
228
- border-radius: 14px;
229
- background: linear-gradient(
230
- 135deg,
231
- rgb(120 90 230 / 10%),
232
- rgb(0 170 255 / 6%) 60%,
233
- transparent
234
- );
1098
+ padding: var(--space-6) 64px var(--space-6) var(--space-6);
1099
+ border: 1px solid var(--border);
1100
+ background: var(--surface);
235
1101
  }
236
1102
  .mo-ext {
237
1103
  flex: none;
238
- min-width: 44px;
239
- padding: 10px 8px;
240
- border-radius: 10px;
1104
+ min-width: 48px;
1105
+ box-sizing: border-box;
1106
+ padding: var(--space-2);
1107
+ border: 1px solid var(--border);
1108
+ background: var(--chip);
1109
+ color: var(--text);
1110
+ font-size: var(--text-xs);
1111
+ line-height: 1;
241
1112
  text-align: center;
242
- font: 600 12px / 1 var(--discovery-monospace-font-family);
243
- text-transform: uppercase;
244
1113
  }
245
1114
  .mo-title {
246
1115
  min-width: 0;
247
1116
  }
248
1117
  .mo-dir {
249
- opacity: 0.6;
250
- font: 13px / 1.4 var(--discovery-monospace-font-family);
1118
+ color: var(--text-muted);
1119
+ font: var(--text-sm) / 1.5 var(--font-mono);
251
1120
  overflow-wrap: anywhere;
252
1121
  }
253
1122
  .mo-file {
254
- font-size: 24px;
1123
+ font-size: var(--text-xl);
255
1124
  font-weight: 600;
256
1125
  line-height: 1.25;
1126
+ letter-spacing: var(--title-tracking);
257
1127
  overflow-wrap: anywhere;
258
1128
  }
259
1129
  .mo-chips {
260
1130
  display: flex;
261
1131
  flex-wrap: wrap;
262
- gap: 6px;
263
- margin-top: 10px;
1132
+ gap: var(--space-2);
1133
+ margin-top: var(--space-3);
264
1134
  }
265
1135
  .mo-chip {
266
1136
  display: inline-flex;
267
1137
  align-items: center;
268
- gap: 4px;
269
- padding: 3px 10px;
270
- border-radius: 999px;
271
- font-size: 12px;
272
- background: rgb(128 128 128 / 15%);
273
- color: inherit;
1138
+ gap: var(--space-1);
1139
+ padding: 2px var(--space-2);
1140
+ border: 1px solid var(--chip);
1141
+ background: var(--chip);
1142
+ color: var(--text);
1143
+ font-family: var(--font-mono);
1144
+ font-size: var(--text-xs);
274
1145
  text-decoration: none;
1146
+ transition: border-color var(--duration);
275
1147
  }
276
- a.mo-chip:hover {
277
- background: rgb(128 128 128 / 28%);
278
- }
279
- .mo-chip-pkg {
280
- background: rgb(0 170 255 / 18%);
281
- }
282
- .mo-chip-src {
283
- background: rgb(148 111 234 / 25%);
284
- }
285
- .mo-chip-entry {
286
- background: rgb(255 200 0 / 35%);
287
- }
288
- .mo-chip-warn {
289
- background: rgb(255 165 0 / 28%);
290
- }
291
- .mo-chip-danger {
292
- background: rgb(220 50 60 / 22%);
293
- }
294
- .mo-cards {
295
- display: grid;
296
- grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
297
- gap: 12px;
298
- margin-top: 12px;
299
- }
300
- .mo-card {
301
- padding: 14px 16px;
302
- border: 1px solid rgb(128 128 128 / 22%);
303
- border-radius: 12px;
304
- background: var(--discovery-background-color);
305
- }
306
- .mo-card-accent {
307
- border-color: rgb(120 90 230 / 45%);
308
- }
309
- .mo-card-danger {
310
- border-color: rgb(220 50 60 / 45%);
311
- background: rgb(220 50 60 / 6%);
312
- }
313
- .mo-card-label {
314
- font-size: 11px;
315
- font-weight: 600;
316
- letter-spacing: 0.06em;
317
- text-transform: uppercase;
318
- opacity: 0.6;
319
- }
320
- .mo-card-value {
321
- margin-top: 4px;
322
- font-size: 22px;
323
- font-weight: 600;
324
- font-variant-numeric: tabular-nums;
325
- }
326
- .mo-card-sub {
327
- margin-top: 2px;
328
- font-size: 12px;
329
- opacity: 0.75;
330
- }
331
- .mo-good {
332
- color: #1a9b4b;
333
- font-weight: 600;
334
- }
335
- .mo-bad {
336
- color: #d1343e;
337
- font-weight: 600;
338
- }
339
- .mo-bar {
340
- height: 4px;
341
- margin-top: 10px;
342
- border-radius: 2px;
343
- background: rgb(128 128 128 / 18%);
344
- overflow: hidden;
345
- }
346
- .mo-bar > div {
347
- height: 100%;
348
- border-radius: 2px;
349
- background: linear-gradient(90deg, #7c5ce6, #00aaff);
350
- }
351
- .mo-pane-title {
352
- opacity: 0.85;
353
- }
354
- .mo-import {
355
- display: flex;
356
- flex-wrap: wrap;
357
- align-items: center;
358
- gap: 6px;
359
- padding: 6px 4px;
360
- border-bottom: 1px solid rgb(128 128 128 / 12%);
361
- }
362
- .mo-import-specifier {
363
- font-family: var(--discovery-monospace-font-family);
364
- font-weight: 600;
365
- }
366
- .mo-arrow {
367
- opacity: 0.4;
368
- }
369
-
370
- /* Tabs with several sections scroll as a whole */
371
- .tab-scroll {
372
- height: 100%;
373
- overflow: auto;
374
- padding-top: 12px;
375
- box-sizing: border-box;
376
- }
377
- .dup-title {
378
- margin: 16px 0 8px;
379
- }
380
- .dup-title:first-child {
381
- margin-top: 0;
382
- }
383
- .dup-empty {
384
- display: block;
385
- opacity: 0.75;
386
- }
387
-
388
- /* Insights tab */
389
- .insights .mo-cards {
390
- margin-top: 0;
391
- }
392
- .mo-card-good {
393
- border-color: rgb(26 155 75 / 45%);
394
- background: rgb(26 155 75 / 6%);
395
- }
396
- .in-tops {
397
- display: grid;
398
- grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
399
- gap: 12px;
400
- margin-top: 12px;
401
- }
402
- .in-top {
403
- padding: 14px 16px;
404
- border: 1px solid rgb(128 128 128 / 22%);
405
- border-radius: 12px;
406
- }
407
- .in-top .mo-card-label {
408
- margin-bottom: 6px;
409
- }
410
- .in-row {
411
- display: grid;
412
- grid-template-columns: minmax(0, 1fr) auto 4.5em;
413
- grid-template-areas: "name size share" "bar bar bar";
414
- column-gap: 8px;
415
- padding: 5px 4px 6px;
416
- border-radius: 6px;
417
- color: inherit;
418
- text-decoration: none;
419
- font-size: 13px;
420
- }
421
- .in-row:hover {
422
- background: rgb(128 128 128 / 10%);
423
- }
424
- .in-row-name {
425
- grid-area: name;
426
- overflow: hidden;
427
- text-overflow: ellipsis;
428
- white-space: nowrap;
429
- }
430
- .in-row-size {
431
- grid-area: size;
432
- font-variant-numeric: tabular-nums;
433
- }
434
- .in-row-share {
435
- grid-area: share;
436
- text-align: right;
437
- opacity: 0.6;
438
- font-variant-numeric: tabular-nums;
439
- }
440
- .in-row-bar {
441
- grid-area: bar;
442
- height: 3px;
443
- margin-top: 4px;
444
- border-radius: 2px;
445
- background: rgb(128 128 128 / 15%);
446
- overflow: hidden;
447
- }
448
- .in-row-bar > span {
449
- display: block;
450
- height: 100%;
451
- background: linear-gradient(90deg, #7c5ce6, #00aaff);
452
- }
453
- /* Compare tab */
454
- .compare .mo-cards {
455
- /* All five cards in one row, stretched to the full width */
456
- grid-template-columns: repeat(auto-fit, minmax(135px, 1fr));
457
- margin-top: 12px;
458
- }
459
- .cmp-title {
460
- display: flex;
461
- align-items: center;
462
- gap: 8px;
463
- font-size: 13px;
464
- opacity: 0.85;
465
- }
466
- .compare .mo-card-sub {
467
- opacity: 1;
468
- }
469
- .cmp-change {
470
- display: flex;
471
- flex-wrap: wrap;
472
- align-items: center;
473
- gap: 4px 8px;
474
- margin-top: 4px;
475
- }
476
- .cmp-pill {
477
- padding: 2px 8px;
478
- border-radius: 999px;
479
- font-weight: 600;
480
- font-variant-numeric: tabular-nums;
481
- background: rgb(128 128 128 / 15%);
482
- }
483
- .cmp-pill-up {
484
- color: #d1343e;
485
- background: rgb(220 50 60 / 14%);
486
- }
487
- .cmp-pill-down {
488
- color: #1a9b4b;
489
- background: rgb(26 155 75 / 14%);
490
- }
491
- .cmp-from {
492
- opacity: 0.6;
493
- }
494
- .cmp-warning {
495
- margin-top: 12px;
496
- padding: 10px 14px;
497
- border: 1px solid rgb(255 165 0 / 45%);
498
- border-radius: 8px;
499
- background: rgb(255 165 0 / 10%);
500
- font-size: 13px;
501
- }
502
- .cmp-empty {
503
- margin-top: 16px;
504
- }
505
- /* Masonry: sections of different heights fill the columns without gaps */
506
- .cmp-sections {
507
- columns: 460px;
508
- column-gap: 12px;
509
- margin: 12px 0 16px;
1148
+ .mo-chip b {
1149
+ font-weight: 500;
1150
+ color: var(--text-muted);
510
1151
  }
511
- .cmp-section {
512
- break-inside: avoid;
513
- margin-bottom: 12px;
1152
+ a.mo-chip:hover {
1153
+ border-color: var(--border-strong);
514
1154
  }
515
- .cmp-row {
516
- display: grid;
517
- grid-template-columns: minmax(0, 1fr) auto 6em;
518
- column-gap: 12px;
519
- align-items: baseline;
520
- padding: 5px 4px;
521
- border-radius: 6px;
522
- color: inherit;
523
- text-decoration: none;
524
- font-size: 13px;
1155
+ .mo-chip-warn,
1156
+ .mo-chip-danger {
1157
+ gap: 0;
525
1158
  }
526
- a.cmp-row:hover {
527
- background: rgb(128 128 128 / 10%);
1159
+ .mo-chip-link {
1160
+ border-color: var(--border-strong);
1161
+ background: transparent;
528
1162
  }
529
- .cmp-row-name {
530
- overflow: hidden;
531
- text-overflow: ellipsis;
532
- white-space: nowrap;
1163
+ a.mo-chip-link:hover {
1164
+ border-color: var(--text);
1165
+ background: var(--field);
533
1166
  }
534
- .cmp-row-detail {
535
- max-width: 260px;
536
- overflow: hidden;
537
- text-overflow: ellipsis;
538
- white-space: nowrap;
539
- opacity: 0.6;
540
- font-variant-numeric: tabular-nums;
1167
+
1168
+ /* Stat cards */
1169
+ .mo-cards {
1170
+ display: grid;
1171
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1172
+ gap: var(--space-4);
1173
+ margin-top: var(--space-4);
541
1174
  }
542
- .cmp-row-delta {
543
- text-align: right;
544
- font-variant-numeric: tabular-nums;
1175
+ .mo-card {
1176
+ padding: var(--space-6);
1177
+ border: 1px solid var(--border);
1178
+ background: var(--surface);
545
1179
  }
546
- .cmp-more-btn {
547
- margin-top: 6px;
548
- padding: 4px 10px;
549
- border: 1px solid rgb(128 128 128 / 30%);
550
- border-radius: 999px;
551
- background: none;
552
- color: inherit;
553
- font: inherit;
554
- font-size: 12px;
555
- cursor: pointer;
1180
+ .mo-card-label {
1181
+ display: flex;
1182
+ align-items: center;
1183
+ color: var(--text-muted);
1184
+ font-size: var(--text-xs);
556
1185
  }
557
- .cmp-more-btn:hover {
558
- background: rgb(128 128 128 / 12%);
1186
+ .mo-card-value {
1187
+ margin-top: var(--space-2);
1188
+ font-size: var(--text-xl);
1189
+ font-weight: 500;
1190
+ line-height: 1.25;
1191
+ letter-spacing: var(--title-tracking);
1192
+ font-variant-numeric: tabular-nums;
559
1193
  }
560
- @media (max-width: 520px) {
561
- .cmp-row-detail {
562
- display: none;
563
- }
1194
+ .mo-card-sub {
1195
+ margin-top: var(--space-1);
1196
+ color: var(--text-muted);
1197
+ font-size: var(--text-sm);
564
1198
  }
565
-
566
- .in-title {
567
- margin: 20px 0 8px;
1199
+ .mo-good,
1200
+ .mo-bad {
1201
+ color: var(--status-ok);
1202
+ font-weight: 500;
568
1203
  }
569
- .in-finding {
570
- margin-bottom: 8px;
571
- border: 1px solid rgb(128 128 128 / 22%);
572
- border-left-width: 4px;
573
- border-radius: 8px;
1204
+ .mo-bad {
1205
+ color: var(--status-error);
574
1206
  }
575
- .in-finding-high {
576
- border-left-color: rgb(220 50 60 / 70%);
1207
+ .mo-bar {
1208
+ height: 4px;
1209
+ margin-top: var(--space-3);
1210
+ overflow: hidden;
1211
+ background: var(--border);
577
1212
  }
578
- .in-finding-medium {
579
- border-left-color: rgb(255 165 0 / 80%);
1213
+ .mo-bar > div {
1214
+ height: 100%;
1215
+ background: var(--accent);
580
1216
  }
581
- .in-finding-low {
582
- border-left-color: rgb(0 170 255 / 60%);
1217
+ .mo-pane-title {
1218
+ color: var(--text-muted);
583
1219
  }
584
- .in-finding > .header .header-content {
1220
+ .mo-import {
585
1221
  display: flex;
586
1222
  flex-wrap: wrap;
587
1223
  align-items: center;
588
- gap: 6px;
589
- font-weight: 600;
590
- }
591
- .in-severity {
592
- font-weight: normal;
593
- }
594
- .in-packages {
595
- font-weight: normal;
1224
+ gap: var(--space-2);
1225
+ padding: var(--space-2) var(--space-1);
1226
+ border-bottom: 1px solid var(--border);
596
1227
  }
597
- .in-packages .mo-chip {
598
- margin-right: 4px;
1228
+ .mo-import-specifier {
1229
+ font-family: var(--font-mono);
1230
+ font-weight: 500;
599
1231
  }
600
- .in-finding-content {
601
- padding: 0 12px 8px;
1232
+ .mo-arrow {
1233
+ color: var(--text-muted);
602
1234
  }
603
- .in-pre {
604
- white-space: pre-wrap;
605
- font-family: var(--discovery-monospace-font-family);
606
- font-size: 12px;
607
- padding: 8px 10px;
608
- border-radius: 6px;
609
- background: rgb(128 128 128 / 10%);
1235
+
1236
+ /* Package page */
1237
+ .po-links {
1238
+ margin-top: var(--space-2);
1239
+ align-items: center;
610
1240
  }
611
- .in-affected {
612
- margin: 8px 0;
1241
+ .po-badge {
1242
+ line-height: 0;
613
1243
  }
614
- .in-docs {
615
- margin-top: 8px;
1244
+ .po-badge img {
1245
+ height: 20px;
616
1246
  }
617
1247
 
618
1248
  /* Package page: "Why is this in my bundle?" */
619
1249
  .why {
620
- margin-top: 16px;
1250
+ margin-top: var(--space-4);
621
1251
  }
622
1252
  .why-hint {
623
1253
  display: block;
624
- margin-bottom: 8px;
625
- opacity: 0.75;
1254
+ margin: var(--space-4) 0 var(--space-2);
1255
+ color: var(--text-muted);
626
1256
  }
627
1257
  .why-chain .why-step {
628
1258
  position: relative;
629
- padding: 4px 0 4px 22px;
1259
+ padding: var(--space-1) 0 var(--space-1) var(--space-6);
630
1260
  }
631
1261
  .why-chain .why-step::before {
632
1262
  content: "↓";
633
1263
  position: absolute;
634
- left: 4px;
635
- opacity: 0.45;
1264
+ left: var(--space-1);
1265
+ color: var(--text-muted);
636
1266
  }
637
1267
  .why-chain .view-list-item:first-child .why-step::before {
638
- content: "●";
639
- font-size: 10px;
640
- top: 7px;
1268
+ content: "";
1269
+ top: 12px;
1270
+ width: 8px;
1271
+ height: 8px;
1272
+ background: var(--text-muted);
641
1273
  }
642
1274
  .why-step-target {
643
1275
  font-weight: 600;
@@ -651,26 +1283,25 @@ a.cmp-row:hover {
651
1283
  .ig-legend {
652
1284
  display: flex;
653
1285
  flex-wrap: wrap;
654
- gap: 4px 12px;
655
- margin: 8px 0;
656
- font-size: 12px;
1286
+ gap: var(--space-1) var(--space-3);
1287
+ margin: var(--space-2) 0;
1288
+ font-size: var(--text-xs);
657
1289
  }
658
1290
  .ig-dot {
659
1291
  display: inline-block;
660
- width: 10px;
661
- height: 10px;
662
- margin-right: 4px;
663
- border-radius: 50%;
664
- vertical-align: -1px;
1292
+ width: 8px;
1293
+ height: 8px;
1294
+ margin-right: var(--space-1);
1295
+ vertical-align: 0;
665
1296
  }
666
1297
  .ig-hint {
667
- opacity: 0.6;
1298
+ color: var(--text-muted);
668
1299
  }
669
1300
  .ig-svg {
670
1301
  display: block;
671
1302
  width: 100%;
672
- border: 1px solid rgb(128 128 128 / 22%);
673
- border-radius: 12px;
1303
+ border: 1px solid var(--border);
1304
+ background: var(--surface);
674
1305
  cursor: grab;
675
1306
  touch-action: none;
676
1307
  user-select: none;
@@ -680,20 +1311,22 @@ a.cmp-row:hover {
680
1311
  }
681
1312
  .ig-links path {
682
1313
  fill: none;
683
- stroke: rgb(128 128 128 / 45%);
1314
+ stroke: var(--border-strong);
1315
+ stroke-opacity: 0.6;
684
1316
  stroke-width: 1.2;
685
1317
  }
686
1318
  .ig-arrow {
687
- fill: rgb(128 128 128 / 70%);
1319
+ fill: var(--border-strong);
688
1320
  }
689
1321
  .ig-node {
690
1322
  cursor: pointer;
691
1323
  }
692
1324
  .ig-node text {
693
- fill: currentColor;
1325
+ fill: var(--text);
1326
+ font-family: var(--font-mono);
694
1327
  font-size: 11px;
695
1328
  paint-order: stroke;
696
- stroke: var(--discovery-background-color);
1329
+ stroke: var(--surface);
697
1330
  stroke-width: 3px;
698
1331
  }
699
1332
  .ig-has-hover .ig-node:not(.ig-active),
@@ -701,146 +1334,296 @@ a.cmp-row:hover {
701
1334
  opacity: 0.2;
702
1335
  }
703
1336
  .ig-links path.ig-active {
704
- stroke: rgb(128 128 128 / 90%);
1337
+ stroke: var(--text);
1338
+ stroke-opacity: 1;
705
1339
  stroke-width: 2;
706
1340
  }
707
1341
 
708
- /* Package page */
709
- .po-icon {
710
- background: rgb(203 56 55 / 22%);
711
- text-transform: none;
1342
+ /* ------------------------------------------------------------------ */
1343
+ /* Insights tab */
1344
+ /* ------------------------------------------------------------------ */
1345
+
1346
+ .insights .mo-cards {
1347
+ margin-top: 0;
712
1348
  }
713
- .po-links {
714
- margin-top: 6px;
715
- align-items: center;
1349
+
1350
+ /* A panel: a card with a header line over its rows */
1351
+ .in-tops {
1352
+ display: grid;
1353
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
1354
+ gap: var(--space-4);
1355
+ margin-top: var(--space-4);
716
1356
  }
717
- .mo-chip-link {
718
- background: transparent;
719
- border: 1px solid rgb(128 128 128 / 30%);
1357
+ .in-top {
1358
+ border: 1px solid var(--border);
1359
+ background: var(--surface);
720
1360
  }
721
- a.mo-chip-link:hover {
722
- background: rgb(128 128 128 / 12%);
1361
+ .in-top > .mo-card-label {
1362
+ padding: var(--space-4) var(--space-6);
1363
+ border-bottom: 1px solid var(--border);
723
1364
  }
724
- .po-badge {
725
- line-height: 0;
1365
+ .in-row {
1366
+ display: grid;
1367
+ grid-template-columns: minmax(0, 1fr) auto 4.5rem;
1368
+ grid-template-areas: "name size share" "bar bar bar";
1369
+ column-gap: var(--space-3);
1370
+ padding: var(--space-3) var(--space-6);
1371
+ color: inherit;
1372
+ text-decoration: none;
1373
+ font-size: var(--text-sm);
1374
+ transition: background-color var(--duration);
726
1375
  }
727
- .po-badge img {
728
- height: 20px;
1376
+ .in-row:not(:last-child) {
1377
+ border-bottom: 1px solid var(--border);
729
1378
  }
730
-
731
- /* Report bar on top of the default page */
732
- .report-bar {
733
- display: flex;
734
- align-items: center;
735
- gap: 20px;
736
- height: 24px;
737
- /* leave room for the discovery.js nav buttons on the right */
738
- padding-right: 170px;
739
- font-size: 13px;
1379
+ .in-row:hover {
1380
+ background: var(--field);
1381
+ }
1382
+ .in-row-name {
1383
+ grid-area: name;
1384
+ overflow: hidden;
1385
+ text-overflow: ellipsis;
740
1386
  white-space: nowrap;
1387
+ }
1388
+ .in-row-name .mo-chip {
1389
+ margin-left: var(--space-1);
1390
+ padding-top: 0;
1391
+ padding-bottom: 0;
1392
+ }
1393
+ .in-row-size,
1394
+ .in-row-share {
1395
+ font-family: var(--font-mono);
1396
+ font-size: var(--text-xs);
1397
+ line-height: 21px;
1398
+ text-align: right;
1399
+ }
1400
+ .in-row-size {
1401
+ grid-area: size;
1402
+ }
1403
+ .in-row-share {
1404
+ grid-area: share;
1405
+ color: var(--text-muted);
1406
+ }
1407
+ .in-row-bar {
1408
+ grid-area: bar;
1409
+ height: 2px;
1410
+ margin-top: var(--space-2);
741
1411
  overflow: hidden;
1412
+ background: var(--border);
742
1413
  }
743
- .rb-build {
1414
+ .in-row-bar > span {
1415
+ display: block;
1416
+ height: 100%;
1417
+ background: var(--accent);
1418
+ }
1419
+
1420
+ /* Recommendations */
1421
+ .in-title {
744
1422
  display: flex;
745
- gap: 6px;
746
- flex: none;
1423
+ align-items: center;
1424
+ gap: var(--space-2);
1425
+ margin: var(--space-8) 0 var(--space-3);
747
1426
  }
748
- .rb-chip {
749
- padding: 2px 9px;
750
- border-radius: 999px;
751
- font-size: 12px;
752
- background: rgb(128 128 128 / 15%);
1427
+ .in-finding {
1428
+ margin-bottom: var(--space-2);
1429
+ border: 1px solid var(--border);
1430
+ background: var(--surface);
753
1431
  }
754
- .rb-chip-platform {
755
- font-weight: 600;
756
- background: rgb(120 90 230 / 18%);
1432
+ .view-list > .view-list-item > .view-expand.in-finding {
1433
+ margin-bottom: var(--space-2);
757
1434
  }
758
- .rb-chip-ok {
759
- color: #1a9b4b;
760
- background: rgb(26 155 75 / 12%);
1435
+ .in-finding > .header {
1436
+ background: transparent;
1437
+ font-size: var(--text-sm);
761
1438
  }
762
- .rb-chip-warn {
763
- color: #b35c00;
764
- font-weight: 600;
765
- background: rgb(255 165 0 / 25%);
766
- cursor: help;
1439
+ .in-finding > .header > .header-content {
1440
+ padding: var(--space-3) var(--space-4);
767
1441
  }
768
- .rb-size {
1442
+ .in-finding > .header .header-content {
769
1443
  display: flex;
770
- flex: none;
1444
+ flex-wrap: wrap;
771
1445
  align-items: center;
772
- gap: 10px;
1446
+ gap: var(--space-2);
1447
+ font-weight: 600;
773
1448
  }
774
- .rb-total {
775
- font-size: 15px;
776
- font-variant-numeric: tabular-nums;
1449
+ .in-finding > .header > .trigger {
1450
+ background: transparent;
777
1451
  }
778
- .rb-split {
1452
+ .in-finding.expanded > .header {
1453
+ border-bottom: 1px solid var(--border);
1454
+ }
1455
+ .in-severity,
1456
+ .in-packages {
1457
+ font-weight: normal;
1458
+ }
1459
+ .in-severity {
1460
+ border-color: var(--border);
1461
+ background: var(--bg);
1462
+ }
1463
+ .in-packages .mo-chip {
1464
+ margin-right: var(--space-1);
1465
+ }
1466
+ .in-finding-content {
1467
+ padding: var(--space-4) var(--space-6) var(--space-6);
1468
+ }
1469
+ .in-pre {
1470
+ white-space: pre-wrap;
1471
+ font-family: var(--font-mono);
1472
+ font-size: var(--text-xs);
1473
+ padding: var(--space-3) var(--space-4);
1474
+ border: 1px solid var(--border);
1475
+ background: var(--field);
1476
+ }
1477
+ .in-affected {
1478
+ margin: var(--space-3) 0;
1479
+ }
1480
+ .in-docs {
1481
+ margin-top: var(--space-3);
1482
+ }
1483
+
1484
+ /* ------------------------------------------------------------------ */
1485
+ /* Compare tab */
1486
+ /* ------------------------------------------------------------------ */
1487
+
1488
+ .compare .mo-cards {
1489
+ /* All five cards in one row, stretched to the full width */
1490
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1491
+ margin-top: var(--space-4);
1492
+ }
1493
+ .cmp-title {
779
1494
  display: flex;
780
- flex: none;
781
- width: 100px;
782
- height: 8px;
783
- border-radius: 4px;
784
- overflow: hidden;
785
- background: rgb(128 128 128 / 15%);
1495
+ align-items: center;
1496
+ gap: var(--space-2);
1497
+ color: var(--text-muted);
1498
+ font-size: var(--text-sm);
786
1499
  }
787
- .rb-split-own,
788
- .rb-dot-own {
789
- background: #8e6fe0;
1500
+ .cmp-change {
1501
+ display: flex;
1502
+ flex-wrap: wrap;
1503
+ align-items: center;
1504
+ gap: var(--space-1) var(--space-2);
1505
+ margin-top: var(--space-1);
790
1506
  }
791
- .rb-split-nm,
792
- .rb-dot-nm {
793
- background: #2b9fd8;
1507
+ .cmp-pill {
1508
+ padding: 0 var(--space-2);
1509
+ border: 1px solid var(--border);
1510
+ background: var(--bg);
1511
+ color: var(--text);
1512
+ font-family: var(--font-mono);
1513
+ font-size: var(--text-xs);
1514
+ font-weight: 500;
794
1515
  }
795
- .rb-legend {
1516
+ .cmp-pill-up {
1517
+ color: var(--status-error);
1518
+ }
1519
+ .cmp-pill-down {
1520
+ color: var(--status-ok);
1521
+ }
1522
+ .cmp-from {
1523
+ color: var(--text-muted);
1524
+ }
1525
+ .cmp-warning {
796
1526
  display: flex;
797
- gap: 6px;
1527
+ align-items: baseline;
1528
+ margin-top: var(--space-4);
1529
+ padding: var(--space-3) var(--space-4);
1530
+ border: 1px solid var(--border);
1531
+ background: var(--surface);
1532
+ font-size: var(--text-sm);
798
1533
  }
799
- .rb-chip-own {
800
- background: rgb(142 111 224 / 16%);
1534
+ .cmp-empty {
1535
+ margin-top: var(--space-4);
801
1536
  }
802
- .rb-chip-nm {
803
- background: rgb(43 159 216 / 16%);
1537
+ /* Masonry: sections of different heights fill the columns without gaps */
1538
+ .cmp-sections {
1539
+ columns: 460px;
1540
+ column-gap: var(--space-4);
1541
+ margin: var(--space-4) 0;
804
1542
  }
805
- .rb-dot {
806
- display: inline-block;
807
- width: 8px;
808
- height: 8px;
809
- margin-right: 5px;
810
- border-radius: 50%;
1543
+ .cmp-section {
1544
+ break-inside: avoid;
1545
+ margin-bottom: var(--space-4);
811
1546
  }
812
- /* The least important part: shrinks first */
813
- .rb-date {
814
- min-width: 0;
815
- margin-left: auto;
1547
+ .cmp-row {
1548
+ display: grid;
1549
+ grid-template-columns: minmax(0, 1fr) auto 6rem;
1550
+ column-gap: var(--space-3);
1551
+ align-items: baseline;
1552
+ padding: var(--space-3) var(--space-6);
1553
+ color: inherit;
1554
+ text-decoration: none;
1555
+ font-size: var(--text-sm);
1556
+ transition: background-color var(--duration);
1557
+ }
1558
+ .cmp-section > .cmp-row:not(:last-of-type),
1559
+ .cmp-more > .cmp-row {
1560
+ border-bottom: 1px solid var(--border);
1561
+ }
1562
+ a.cmp-row:hover {
1563
+ background: var(--field);
1564
+ }
1565
+ .cmp-row-name {
816
1566
  overflow: hidden;
817
1567
  text-overflow: ellipsis;
818
- opacity: 0.6;
819
- font-size: 12px;
1568
+ white-space: nowrap;
820
1569
  }
821
- @media (max-width: 1000px) {
822
- .rb-date {
1570
+ .cmp-row-detail {
1571
+ max-width: 260px;
1572
+ overflow: hidden;
1573
+ text-overflow: ellipsis;
1574
+ white-space: nowrap;
1575
+ color: var(--text-muted);
1576
+ font-family: var(--font-mono);
1577
+ font-size: var(--text-xs);
1578
+ }
1579
+ .cmp-row-delta {
1580
+ text-align: right;
1581
+ font-family: var(--font-mono);
1582
+ font-size: var(--text-xs);
1583
+ }
1584
+ .cmp-more-btn {
1585
+ display: block;
1586
+ width: calc(100% - 2 * var(--space-6));
1587
+ min-height: var(--control-height);
1588
+ margin: var(--space-3) var(--space-6) var(--space-6);
1589
+ padding: 0 var(--space-4);
1590
+ border: 1px solid var(--border-strong);
1591
+ background: transparent;
1592
+ color: var(--text);
1593
+ font-size: var(--text-xs);
1594
+ cursor: pointer;
1595
+ transition: background-color var(--duration);
1596
+ }
1597
+ .cmp-more-btn:hover {
1598
+ background: var(--field);
1599
+ }
1600
+ @media (max-width: 520px) {
1601
+ .cmp-row-detail {
823
1602
  display: none;
824
1603
  }
825
1604
  }
826
1605
 
827
- /* Code diff (module-diff page) */
1606
+ /* ------------------------------------------------------------------ */
1607
+ /* Code diff (module-diff page) */
1608
+ /* ------------------------------------------------------------------ */
1609
+
828
1610
  .cd-stats {
829
- margin: 0 0 6px;
830
- font-size: 12px;
831
- opacity: 0.8;
1611
+ margin: 0 0 var(--space-2);
1612
+ color: var(--text-muted);
1613
+ font-family: var(--font-mono);
1614
+ font-size: var(--text-xs);
832
1615
  }
833
1616
  .cd-stat-add {
834
- color: #2da44e;
1617
+ color: var(--status-ok);
835
1618
  }
836
1619
  .cd-stat-del {
837
- color: #cf222e;
1620
+ color: var(--status-error);
838
1621
  }
839
1622
  .cd-code {
840
1623
  overflow: auto;
841
- border: 1px solid rgb(128 128 128 / 20%);
842
- border-radius: 6px;
843
- font: 12px / 1.5 var(--discovery-monospace-font-family);
1624
+ border: 1px solid var(--border);
1625
+ background: var(--surface);
1626
+ font: var(--text-xs) / 1.5 var(--font-mono);
844
1627
  }
845
1628
  .cd-line {
846
1629
  display: grid;
@@ -848,9 +1631,9 @@ a.mo-chip-link:hover {
848
1631
  min-width: max-content;
849
1632
  }
850
1633
  .cd-no {
851
- padding-right: 6px;
1634
+ padding-right: var(--space-2);
852
1635
  text-align: right;
853
- opacity: 0.4;
1636
+ color: var(--text-muted);
854
1637
  user-select: none;
855
1638
  }
856
1639
  .cd-sign {
@@ -858,30 +1641,32 @@ a.mo-chip-link:hover {
858
1641
  user-select: none;
859
1642
  }
860
1643
  .cd-text {
861
- padding-right: 12px;
1644
+ padding-right: var(--space-3);
862
1645
  white-space: pre;
863
1646
  }
864
1647
  .cd-add {
865
- background: rgb(46 160 67 / 15%);
1648
+ background: color-mix(in srgb, var(--status-ok) 14%, transparent);
866
1649
  }
867
1650
  .cd-del {
868
- background: rgb(248 81 73 / 15%);
1651
+ background: color-mix(in srgb, var(--status-error) 14%, transparent);
869
1652
  }
870
1653
  .cd-fold {
871
1654
  display: block;
872
1655
  width: 100%;
873
- padding: 2px 8px;
1656
+ padding: var(--space-1) var(--space-2);
874
1657
  border: 0;
875
- background: rgb(128 128 128 / 10%);
876
- color: inherit;
877
- font: inherit;
1658
+ border-top: 1px solid var(--border);
1659
+ border-bottom: 1px solid var(--border);
1660
+ background: var(--field);
1661
+ color: var(--text-muted);
1662
+ font-size: var(--text-xs);
878
1663
  text-align: left;
879
- opacity: 0.7;
880
1664
  cursor: pointer;
1665
+ transition: color var(--duration);
881
1666
  }
882
1667
  .cd-fold:hover {
883
- opacity: 1;
1668
+ color: var(--text);
884
1669
  }
885
1670
  .cd-empty {
886
- opacity: 0.6;
1671
+ color: var(--text-muted);
887
1672
  }