@24vlh/vds 0.1.0 → 0.1.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.
@@ -1,591 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Tables System
3
- *
4
- * Responsibilities:
5
- * - Provide full table architecture: wrappers, panels, headers, body,
6
- * sticky headers/cols, row states, groups, expandable rows
7
- * - Implement visual variants (bordered/minimal/striped/inset/clear)
8
- * - Supply density modes (A/B/C/compact) + HF mode for high-frequency data
9
- * - Define numerical, currency, percent, and trend helpers using
10
- * tabular-nums, masks, and semantic lanes
11
- * - Support empty/loading states, responsive collapse, and metric tables
12
- *
13
- * System Notes:
14
- * - 100% token-driven: spacing, borders, radii, text-scales, numeric
15
- * variants, semantic colours
16
- * - Pure CSS; JS optional only for toggling expandable rows
17
- * - Compatible with skeleton loaders, overlays, finance states, and
18
- * dark/light themes
19
- ************************************************************/
20
-
21
- /* ---------------------------------------------------------
22
- 1. TABLE TOKEN DEFINITIONS
23
- --------------------------------------------------------- */
24
-
25
- [data-vds-table],
26
- .vds-table {
27
- --table-currency-tint: color-mix(in srgb, currentColor 50%, transparent 30%);
28
- }
29
-
30
- /* ---------------------------------------------------------
31
- 2. TABLE WRAPPERS & PANELS
32
- --------------------------------------------------------- */
33
-
34
- .table-wrapper {
35
- width: 100%;
36
- overflow-x: auto;
37
- -webkit-overflow-scrolling: touch;
38
- }
39
-
40
- .table-panel {
41
- background-color: var(--color-surface);
42
- border-radius: var(--radius-md);
43
- border: var(--border-width) solid var(--color-border-subtle);
44
- box-shadow: var(--shadow-xs);
45
- padding: var(--space-4);
46
- }
47
-
48
- .table-panel__header {
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- gap: var(--space-3);
53
- margin-bottom: var(--space-3);
54
- }
55
-
56
- .table-panel__title {
57
- font-size: var(--text-sm);
58
- font-weight: 600;
59
- color: var(--color-text);
60
- }
61
-
62
- .table-panel__meta {
63
- font-size: var(--text-xs);
64
- color: var(--color-text-muted);
65
- }
66
-
67
- /* ---------------------------------------------------------
68
- 3. BASE TABLE STRUCTURE
69
- --------------------------------------------------------- */
70
-
71
- .table {
72
- width: 100%;
73
- border-collapse: collapse;
74
- border-spacing: 0;
75
- background-color: var(--color-surface);
76
- color: var(--color-text);
77
-
78
- --table-cell-pad-y: var(--space-3);
79
- --table-cell-pad-x: var(--space-4);
80
- --table-cell-font-size: var(--text-sm);
81
- }
82
-
83
- .table th,
84
- .table td {
85
- padding: var(--table-cell-pad-y) var(--table-cell-pad-x);
86
- border-bottom: var(--border-width) solid var(--color-border-subtle);
87
- vertical-align: middle;
88
- text-align: left;
89
- font-size: var(--table-cell-font-size);
90
- }
91
-
92
- .table th {
93
- font-weight: 600;
94
- color: var(--color-text);
95
- background-color: var(--color-surface-subtle);
96
- border-bottom: var(--border-width-strong) solid var(--color-border-strong);
97
- white-space: nowrap;
98
- font-size: var(--text-sm);
99
- }
100
-
101
- .table caption {
102
- caption-side: top;
103
- text-align: left;
104
- margin-bottom: var(--space-2);
105
- font-size: var(--text-xs);
106
- color: var(--color-text-muted);
107
- }
108
-
109
- /* ---------------------------------------------------------
110
- 4. DENSITY (A/B/C) & COMPACT
111
- --------------------------------------------------------- */
112
-
113
- .table--a {
114
- --table-cell-pad-y: var(--space-4);
115
- --table-cell-pad-x: var(--space-5);
116
- --table-cell-font-size: var(--text-md);
117
- }
118
-
119
- .table--b {
120
- --table-cell-pad-y: var(--space-3);
121
- --table-cell-pad-x: var(--space-4);
122
- --table-cell-font-size: var(--text-sm);
123
- }
124
-
125
- .table--c {
126
- --table-cell-pad-y: var(--space-2);
127
- --table-cell-pad-x: var(--space-3);
128
- --table-cell-font-size: var(--text-xs);
129
- }
130
-
131
- .table--compact {
132
- --table-cell-pad-y: var(--space-1);
133
- }
134
-
135
- /* ---------------------------------------------------------
136
- 5. VISUAL VARIANTS
137
- --------------------------------------------------------- */
138
-
139
- .table--bordered th,
140
- .table--bordered td {
141
- border: var(--border-width) solid var(--color-border-subtle);
142
- }
143
-
144
- .table--no-borders th,
145
- .table--no-borders td {
146
- border: none;
147
- }
148
-
149
- .table--striped tbody tr:nth-child(odd) {
150
- background-color: var(--color-surface-subtle);
151
- }
152
-
153
- .table--hover tbody tr:hover {
154
- background-color: var(--color-surface-soft);
155
- }
156
-
157
- .table--minimal th,
158
- .table--minimal td {
159
- background-color: transparent;
160
- border-bottom-color: var(--color-border-subtle);
161
- }
162
-
163
- .table--clear th,
164
- .table--clear td {
165
- border: none;
166
- background-color: transparent;
167
- }
168
-
169
- .table--inset {
170
- border-radius: var(--radius-md);
171
- overflow: hidden;
172
- }
173
-
174
- .table--truncate-cells th,
175
- .table--truncate-cells td {
176
- white-space: nowrap;
177
- overflow: hidden;
178
- text-overflow: ellipsis;
179
- }
180
-
181
- /* ---------------------------------------------------------
182
- 6. STICKY HEADER / COL
183
- --------------------------------------------------------- */
184
-
185
- .table--sticky-header thead th {
186
- position: sticky;
187
- top: 0;
188
- z-index: var(--z-sticky);
189
- background-color: var(--color-bg-elevated, var(--color-surface));
190
- box-shadow: 0 1px 0 var(--color-border-subtle);
191
- }
192
-
193
- .table--sticky-col td:first-child,
194
- .table--sticky-col th:first-child {
195
- position: sticky;
196
- left: 0;
197
- z-index: var(--z-sticky-col);
198
- background-color: var(--color-bg-elevated, var(--color-surface));
199
- }
200
-
201
- /* ---------------------------------------------------------
202
- 7. ROW STATES
203
- --------------------------------------------------------- */
204
-
205
- .table-row--selected {
206
- background-color: var(--color-accent-soft);
207
- }
208
-
209
- .table-row--success {
210
- background-color: var(--table-row-good-bg, var(--color-success-soft));
211
- }
212
-
213
- .table-row--danger {
214
- background-color: var(--table-row-bad-bg, var(--color-danger-soft));
215
- }
216
-
217
- .table-row--warning {
218
- background-color: var(--table-row-warning-bg, var(--color-warning-soft));
219
- }
220
-
221
- .table-row--info {
222
- background-color: var(--table-row-info-bg, var(--color-info-soft));
223
- }
224
-
225
- .table-row--muted {
226
- background-color: var(--table-row-muted-bg, var(--color-muted-bg));
227
- color: var(--color-text-muted);
228
- }
229
-
230
- /* ---------------------------------------------------------
231
- 8. INLINE ACTIONS
232
- --------------------------------------------------------- */
233
-
234
- .table-actions {
235
- display: flex;
236
- gap: var(--space-2);
237
- align-items: center;
238
- }
239
-
240
- .table-actions .icon {
241
- width: var(--icon-sm);
242
- height: var(--icon-sm);
243
- color: var(--color-icon-muted);
244
- flex-shrink: 0;
245
- cursor: pointer;
246
- }
247
-
248
- .table-actions .icon:hover {
249
- color: var(--color-icon-strong);
250
- }
251
-
252
- /* ---------------------------------------------------------
253
- 9. EXPANDABLE ROWS
254
- --------------------------------------------------------- */
255
-
256
- .table-row--expandable {
257
- cursor: pointer;
258
- }
259
-
260
- .table-row--details {
261
- display: none;
262
- }
263
-
264
- .table-row--expanded + .table-row--details,
265
- .table-row--details[data-expanded="true"] {
266
- display: table-row;
267
- }
268
-
269
- .table-row--details td {
270
- padding: var(--space-4);
271
- background-color: var(--color-surface-subtle);
272
- }
273
-
274
- /* ---------------------------------------------------------
275
- 10. GROUP HEADERS
276
- --------------------------------------------------------- */
277
-
278
- .table-group-header th {
279
- background-color: var(--color-surface-soft);
280
- font-weight: 600;
281
- padding-top: var(--space-3);
282
- padding-bottom: var(--space-2);
283
- border-top: var(--border-width-strong) solid var(--color-border-strong);
284
- }
285
-
286
- /* ---------------------------------------------------------
287
- 11. METRIC TABLES
288
- --------------------------------------------------------- */
289
-
290
- .metric-table {
291
- width: 100%;
292
- border-collapse: collapse;
293
- }
294
-
295
- .metric-table tr:not(:last-child) td {
296
- border-bottom: var(--border-width) solid var(--color-border-subtle);
297
- }
298
-
299
- .metric-table__label {
300
- font-weight: 500;
301
- color: var(--color-text-muted);
302
- padding: var(--space-2) 0;
303
- font-size: var(--text-xs);
304
- }
305
-
306
- .metric-table__value {
307
- text-align: right;
308
- font-weight: 600;
309
- padding: var(--space-2) 0;
310
- font-size: var(--text-sm);
311
- font-feature-settings: "tnum";
312
- font-variant-numeric: tabular-nums;
313
- }
314
-
315
- /* ---------------------------------------------------------
316
- 12. EMPTY & LOADING STATES
317
- --------------------------------------------------------- */
318
-
319
- .table-empty {
320
- text-align: center;
321
- padding: var(--space-6) 0;
322
- color: var(--color-text-muted);
323
- }
324
-
325
- .table-empty__content {
326
- display: flex;
327
- flex-direction: column;
328
- align-items: center;
329
- text-align: center;
330
- }
331
-
332
- .table-empty__icon {
333
- display: flex;
334
- align-items: center;
335
- justify-content: center;
336
- margin-bottom: 0.5rem;
337
- margin-bottom: var(--space-2, 0.5rem);
338
- }
339
-
340
- .table-loading td {
341
- position: relative;
342
- color: transparent;
343
- overflow: hidden;
344
- }
345
-
346
- .table-loading td::after {
347
- content: "";
348
- position: absolute;
349
- top: 0;
350
- right: 0;
351
- bottom: 0;
352
- left: 0;
353
- transform: translateX(-150%);
354
- background: linear-gradient(90deg, transparent, var(--color-muted-bg), transparent);
355
- animation: table-loading 1.6s infinite;
356
- }
357
-
358
- @keyframes table-loading {
359
- 0% {
360
- transform: translateX(-150%);
361
- }
362
- 100% {
363
- transform: translateX(150%);
364
- }
365
- }
366
-
367
- /* ---------------------------------------------------------
368
- 13. RESPONSIVE COLLAPSE
369
- --------------------------------------------------------- */
370
-
371
- @media (max-width: 640px) {
372
- .table--collapse thead {
373
- display: none;
374
- }
375
-
376
- .table--collapse tbody tr {
377
- display: block;
378
- border: var(--border-width) solid var(--color-border-subtle);
379
- margin-bottom: var(--space-4);
380
- border-radius: var(--radius-md);
381
- background-color: var(--color-surface);
382
- overflow: hidden;
383
- }
384
-
385
- .table--collapse tbody td {
386
- display: flex;
387
- justify-content: space-between;
388
- padding: var(--space-3);
389
- border-bottom: var(--border-width) solid var(--color-border-subtle);
390
- font-size: var(--text-sm);
391
- }
392
-
393
- .table--collapse tbody td:last-child {
394
- border-bottom: none;
395
- }
396
-
397
- .table--collapse tbody td::before {
398
- content: attr(data-label);
399
- font-weight: 600;
400
- color: var(--color-text-muted);
401
- margin-right: var(--space-2);
402
- font-size: var(--text-xs);
403
- }
404
- }
405
-
406
- /* ---------------------------------------------------------
407
- 14. HIGH FREQUENCY TABLE (HF)
408
- --------------------------------------------------------- */
409
-
410
- .table--hf {
411
- font-size: var(--text-xs);
412
- }
413
-
414
- .table--hf th,
415
- .table--hf td {
416
- padding: var(--space-1) var(--space-2);
417
- border: var(--border-width) solid var(--color-border-subtle);
418
- }
419
-
420
- .table--hf thead th {
421
- background-color: var(--color-surface-subtle);
422
- position: sticky;
423
- top: 0;
424
- z-index: var(--z-sticky);
425
- border-bottom: var(--border-width-strong) solid var(--color-border-strong);
426
- }
427
-
428
- .table--hf td[data-type="num"] {
429
- text-align: right;
430
- font-feature-settings: "tnum";
431
- font-variant-numeric: tabular-nums;
432
- }
433
-
434
- /* ---------------------------------------------------------
435
- 15. NUMERIC / CURRENCY / PERCENT HELPERS (SPAN-BASED)
436
- --------------------------------------------------------- */
437
-
438
- .t-num,
439
- .t-pct {
440
- text-align: right;
441
- font-feature-settings: "tnum";
442
- font-variant-numeric: tabular-nums;
443
- white-space: nowrap;
444
- }
445
-
446
- .t-cur {
447
- display: flex;
448
- justify-content: space-between;
449
- align-items: baseline;
450
- font-feature-settings: "tnum";
451
- font-variant-numeric: tabular-nums;
452
- white-space: nowrap;
453
- }
454
-
455
- .cur-eur::before {
456
- content: "€";
457
- }
458
-
459
- .cur-usd::before {
460
- content: "$";
461
- }
462
-
463
- .cur-gbp::before {
464
- content: "£";
465
- }
466
-
467
- .cur-ron::before {
468
- content: "RON";
469
- }
470
-
471
- .cur-chf::before {
472
- content: "CHF";
473
- }
474
-
475
- .cur-jpy::before {
476
- content: "¥";
477
- }
478
-
479
- .cur-eur::before,
480
- .cur-usd::before,
481
- .cur-gbp::before,
482
- .cur-ron::before,
483
- .cur-chf::before,
484
- .cur-jpy::before {
485
- margin-right: var(--space-1);
486
- font-size: var(--text-xxxs);
487
- font-weight: 600;
488
- color: var(--table-currency-tint);
489
- }
490
-
491
- .t-pct {
492
- color: inherit;
493
- }
494
-
495
- /* ---------------------------------------------------------
496
- 16. TREND HELPERS (SPAN-BASED)
497
- --------------------------------------------------------- */
498
-
499
- .t-trend {
500
- display: flex;
501
- justify-content: space-between;
502
- align-items: center;
503
- font-feature-settings: "tnum";
504
- font-variant-numeric: tabular-nums;
505
- white-space: nowrap;
506
- text-align: right;
507
- width: 100%;
508
- }
509
-
510
- .t-up,
511
- .t-down,
512
- .t-flat {
513
- display: inline-flex;
514
- align-items: center;
515
- }
516
-
517
- .t-up {
518
- color: var(--table-trend-up, var(--color-success-strong));
519
- }
520
-
521
- .t-down {
522
- color: var(--table-trend-down, var(--color-danger-strong));
523
- }
524
-
525
- .t-flat {
526
- color: var(--table-trend-flat, var(--color-text-muted));
527
- }
528
-
529
- .t-up::before,
530
- .t-down::before,
531
- .t-flat::before {
532
- content: "";
533
- width: var(--icon-xs);
534
- height: var(--icon-xs);
535
- -webkit-mask-size: contain;
536
- mask-size: contain;
537
- -webkit-mask-repeat: no-repeat;
538
- mask-repeat: no-repeat;
539
- background-color: currentColor;
540
- margin-right: var(--space-1);
541
- }
542
-
543
- .t-up::before {
544
- -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'><path d='M9 15 H7 V8 H5 L8 1 L11 8 H9 Z'/></svg>");
545
- mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'><path d='M9 15 H7 V8 H5 L8 1 L11 8 H9 Z'/></svg>");
546
- }
547
-
548
- .t-down::before {
549
- -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'><path d='M7 1 H9 V8 H11 L8 15 L5 8 H7 Z'/></svg>");
550
- mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'><path d='M7 1 H9 V8 H11 L8 15 L5 8 H7 Z'/></svg>");
551
- }
552
-
553
- .t-flat::before {
554
- -webkit-mask-image: url("data:image/svg+xml,<svg stroke='currentColor' fill='none' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'><line x1='3' y1='8' x2='13' y2='8' stroke-width='2'/></svg>");
555
- mask-image: url("data:image/svg+xml,<svg stroke='currentColor' fill='none' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg'><line x1='3' y1='8' x2='13' y2='8' stroke-width='2'/></svg>");
556
- }
557
-
558
- /* ---------------------------------------------------------
559
- 17. FINANCE ROW STATES (NAMESPACED)
560
- --------------------------------------------------------- */
561
-
562
- .table-fin--good {
563
- background-color: var(--table-row-good-bg, var(--color-success-soft));
564
- }
565
-
566
- .table-fin--bad {
567
- background-color: var(--table-row-bad-bg, var(--color-danger-soft));
568
- }
569
-
570
- .table-fin--warning {
571
- background-color: var(--table-row-warning-bg, var(--color-warning-soft));
572
- }
573
-
574
- .table-fin--info {
575
- background-color: var(--table-row-info-bg, var(--color-info-soft));
576
- }
577
-
578
- .table-fin--muted {
579
- background-color: var(--table-row-muted-bg, var(--color-muted-bg));
580
- color: var(--color-text-muted);
581
- }
582
-
583
- .table-fin--flagged {
584
- background-color: var(--table-row-flagged-bg, var(--color-danger-soft));
585
- border-left: var(--border-width-strong) solid var(--color-danger);
586
- }
587
-
588
- .table-fin--curious {
589
- background-color: var(--table-row-curious-bg, var(--color-surface-subtle));
590
- border-left: var(--border-width-strong) solid var(--color-accent);
591
- }
1
+ .vds-table,[data-vds-table]{--table-currency-tint:color-mix(in srgb,currentColor 50%,transparent 30%)}.table-wrapper{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.table-panel{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);padding:var(--space-4)}.table-panel__header{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between;margin-bottom:var(--space-3)}.table-panel__title{color:var(--color-text);font-size:var(--text-sm);font-weight:600}.table-panel__meta{color:var(--color-text-muted);font-size:var(--text-xs)}.table{--table-cell-pad-y:var(--space-3);--table-cell-pad-x:var(--space-4);--table-cell-font-size:var(--text-sm);background-color:var(--color-surface);border-collapse:collapse;border-spacing:0;color:var(--color-text);width:100%}.table td,.table th{border-bottom:var(--border-width) solid var(--color-border-subtle);font-size:var(--table-cell-font-size);padding:var(--table-cell-pad-y) var(--table-cell-pad-x);text-align:left;vertical-align:middle}.table th{background-color:var(--color-surface-subtle);border-bottom:var(--border-width-strong) solid var(--color-border-strong);color:var(--color-text);font-size:var(--text-sm);font-weight:600;white-space:nowrap}.table caption{caption-side:top;color:var(--color-text-muted);font-size:var(--text-xs);margin-bottom:var(--space-2);text-align:left}.table--a{--table-cell-pad-y:var(--space-4);--table-cell-pad-x:var(--space-5);--table-cell-font-size:var(--text-md)}.table--b{--table-cell-pad-y:var(--space-3);--table-cell-pad-x:var(--space-4);--table-cell-font-size:var(--text-sm)}.table--c{--table-cell-pad-y:var(--space-2);--table-cell-pad-x:var(--space-3);--table-cell-font-size:var(--text-xs)}.table--compact{--table-cell-pad-y:var(--space-1)}.table--bordered td,.table--bordered th{border:var(--border-width) solid var(--color-border-subtle)}.table--no-borders td,.table--no-borders th{border:none}.table--striped tbody tr:nth-child(odd){background-color:var(--color-surface-subtle)}.table--hover tbody tr:hover{background-color:var(--color-surface-soft)}.table--minimal td,.table--minimal th{background-color:transparent;border-bottom-color:var(--color-border-subtle)}.table--clear td,.table--clear th{background-color:transparent;border:none}.table--inset{border-radius:var(--radius-md);overflow:hidden}.table--truncate-cells td,.table--truncate-cells th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.table--sticky-header thead th{background-color:var(--color-bg-elevated,var(--color-surface));box-shadow:0 1px 0 var(--color-border-subtle);position:sticky;top:0;z-index:var(--z-sticky)}.table--sticky-col td:first-child,.table--sticky-col th:first-child{background-color:var(--color-bg-elevated,var(--color-surface));left:0;position:sticky;z-index:var(--z-sticky-col)}.table-row--selected{background-color:var(--color-accent-soft)}.table-row--success{background-color:var(--table-row-good-bg,var(--color-success-soft))}.table-row--danger{background-color:var(--table-row-bad-bg,var(--color-danger-soft))}.table-row--warning{background-color:var(--table-row-warning-bg,var(--color-warning-soft))}.table-row--info{background-color:var(--table-row-info-bg,var(--color-info-soft))}.table-row--muted{background-color:var(--table-row-muted-bg,var(--color-muted-bg));color:var(--color-text-muted)}.table-actions{align-items:center;display:flex;gap:var(--space-2)}.table-actions .icon{color:var(--color-icon-muted);cursor:pointer;flex-shrink:0;height:var(--icon-sm);width:var(--icon-sm)}.table-actions .icon:hover{color:var(--color-icon-strong)}.table-row--expandable{cursor:pointer}.table-row--details{display:none}.table-row--details[data-expanded=true],.table-row--expanded+.table-row--details{display:table-row}.table-row--details td{background-color:var(--color-surface-subtle);padding:var(--space-4)}.table-group-header th{background-color:var(--color-surface-soft);border-top:var(--border-width-strong) solid var(--color-border-strong);font-weight:600;padding-bottom:var(--space-2);padding-top:var(--space-3)}.metric-table{border-collapse:collapse;width:100%}.metric-table tr:not(:last-child) td{border-bottom:var(--border-width) solid var(--color-border-subtle)}.metric-table__label{color:var(--color-text-muted);font-size:var(--text-xs);font-weight:500;padding:var(--space-2) 0}.metric-table__value{font-feature-settings:"tnum";font-size:var(--text-sm);font-variant-numeric:tabular-nums;font-weight:600;padding:var(--space-2) 0;text-align:right}.table-empty{color:var(--color-text-muted);padding:var(--space-6) 0;text-align:center}.table-empty__content{align-items:center;display:flex;flex-direction:column;text-align:center}.table-empty__icon{align-items:center;display:flex;justify-content:center;margin-bottom:.5rem;margin-bottom:var(--space-2,.5rem)}.table-loading td{color:transparent;overflow:hidden;position:relative}.table-loading td:after{animation:table-loading 1.6s infinite;background:linear-gradient(90deg,transparent,var(--color-muted-bg),transparent);bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:translateX(-150%)}@keyframes table-loading{0%{transform:translateX(-150%)}to{transform:translateX(150%)}}@media (max-width:640px){.table--collapse thead{display:none}.table--collapse tbody tr{background-color:var(--color-surface);border:var(--border-width) solid var(--color-border-subtle);border-radius:var(--radius-md);display:block;margin-bottom:var(--space-4);overflow:hidden}.table--collapse tbody td{border-bottom:var(--border-width) solid var(--color-border-subtle);display:flex;font-size:var(--text-sm);justify-content:space-between;padding:var(--space-3)}.table--collapse tbody td:last-child{border-bottom:none}.table--collapse tbody td:before{color:var(--color-text-muted);content:attr(data-label);font-size:var(--text-xs);font-weight:600;margin-right:var(--space-2)}}.table--hf{font-size:var(--text-xs)}.table--hf td,.table--hf th{border:var(--border-width) solid var(--color-border-subtle);padding:var(--space-1) var(--space-2)}.table--hf thead th{background-color:var(--color-surface-subtle);border-bottom:var(--border-width-strong) solid var(--color-border-strong);position:sticky;top:0;z-index:var(--z-sticky)}.t-num,.t-pct,.table--hf td[data-type=num]{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right}.t-cur,.t-num,.t-pct{white-space:nowrap}.t-cur{font-feature-settings:"tnum";align-items:baseline;display:flex;font-variant-numeric:tabular-nums;justify-content:space-between}.cur-eur:before{content:"€"}.cur-usd:before{content:"$"}.cur-gbp:before{content:"£"}.cur-ron:before{content:"RON"}.cur-chf:before{content:"CHF"}.cur-jpy:before{content:"¥"}.cur-chf:before,.cur-eur:before,.cur-gbp:before,.cur-jpy:before,.cur-ron:before,.cur-usd:before{color:var(--table-currency-tint);font-size:var(--text-xxxs);font-weight:600;margin-right:var(--space-1)}.t-pct{color:inherit}.t-trend{font-feature-settings:"tnum";align-items:center;display:flex;font-variant-numeric:tabular-nums;justify-content:space-between;text-align:right;white-space:nowrap;width:100%}.t-down,.t-flat,.t-up{align-items:center;display:inline-flex}.t-up{color:var(--table-trend-up,var(--color-success-strong))}.t-down{color:var(--table-trend-down,var(--color-danger-strong))}.t-flat{color:var(--table-trend-flat,var(--color-text-muted))}.t-down:before,.t-flat:before,.t-up:before{background-color:currentColor;content:"";height:var(--icon-xs);margin-right:var(--space-1);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:var(--icon-xs)}.t-up:before{-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor"><path d="M9 15H7V8H5l3-7 3 7H9Z"/></svg>');mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor"><path d="M9 15H7V8H5l3-7 3 7H9Z"/></svg>')}.t-down:before{-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor"><path d="M7 1h2v7h2l-3 7-3-7h2Z"/></svg>');mask-image:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor"><path d="M7 1h2v7h2l-3 7-3-7h2Z"/></svg>')}.t-flat:before{-webkit-mask-image:url('data:image/svg+xml;charset=utf-8,<svg stroke="currentColor" fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path stroke-width="2" d="M3 8h10"/></svg>');mask-image:url('data:image/svg+xml;charset=utf-8,<svg stroke="currentColor" fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path stroke-width="2" d="M3 8h10"/></svg>')}.table-fin--good{background-color:var(--table-row-good-bg,var(--color-success-soft))}.table-fin--bad{background-color:var(--table-row-bad-bg,var(--color-danger-soft))}.table-fin--warning{background-color:var(--table-row-warning-bg,var(--color-warning-soft))}.table-fin--info{background-color:var(--table-row-info-bg,var(--color-info-soft))}.table-fin--muted{background-color:var(--table-row-muted-bg,var(--color-muted-bg));color:var(--color-text-muted)}.table-fin--flagged{background-color:var(--table-row-flagged-bg,var(--color-danger-soft));border-left:var(--border-width-strong) solid var(--color-danger)}.table-fin--curious{background-color:var(--table-row-curious-bg,var(--color-surface-subtle));border-left:var(--border-width-strong) solid var(--color-accent)}