@attrus-ds/core 1.0.10 → 1.0.12
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/dist/css/components/action-bar.css +93 -0
- package/dist/css/components/ambient.css +97 -0
- package/dist/css/components/animated-bg.css +261 -0
- package/dist/css/components/buttons.css +4 -4
- package/dist/css/components/callout.css +4 -3
- package/dist/css/components/cards.css +4 -3
- package/dist/css/components/combobox.css +16 -13
- package/dist/css/components/inputs.css +99 -15
- package/dist/css/components/number-input.css +6 -3
- package/dist/css/components/primitives.css +20 -15
- package/dist/css/components/sel-card.css +212 -0
- package/dist/css/components/sidebar.css +11 -9
- package/dist/css/components/smart-search.css +13 -11
- package/dist/css/components/status-pills.css +1 -1
- package/dist/css/components/stepper.css +81 -4
- package/dist/css/components/table.css +168 -7
- package/dist/css/components/tabs.css +4 -3
- package/dist/css/components/toast.css +2 -2
- package/dist/css/components/toggle-chip.css +137 -0
- package/dist/css/components/tooltip.css +8 -5
- package/dist/css/components/topbar.css +8 -7
- package/dist/css/index.css +5 -0
- package/dist/css/tokens.css +126 -22
- package/dist/react/ActionBar/ActionBar.d.ts +19 -0
- package/dist/react/ActionBar/ActionBar.tsx +54 -0
- package/dist/react/AmbientBackdrop/AmbientBackdrop.d.ts +17 -0
- package/dist/react/AmbientBackdrop/AmbientBackdrop.tsx +53 -0
- package/dist/react/AnimatedBackdrop/AnimatedBackdrop.d.ts +22 -0
- package/dist/react/AnimatedBackdrop/AnimatedBackdrop.tsx +317 -0
- package/dist/react/Callout/Callout.d.ts +1 -1
- package/dist/react/Callout/Callout.tsx +1 -1
- package/dist/react/Combobox/Combobox.d.ts +2 -0
- package/dist/react/Combobox/Combobox.tsx +85 -39
- package/dist/react/DataTable/DataTable.tsx +3 -3
- package/dist/react/Drawer/Drawer.tsx +7 -1
- package/dist/react/Input/Input.d.ts +1 -1
- package/dist/react/Input/Input.tsx +1 -1
- package/dist/react/Modal/Modal.tsx +8 -1
- package/dist/react/SelectableCard/SelectableCard.d.ts +39 -0
- package/dist/react/SelectableCard/SelectableCard.tsx +94 -0
- package/dist/react/SmartSearch/SmartSearch.tsx +2 -2
- package/dist/react/Stepper/Stepper.d.ts +3 -0
- package/dist/react/Stepper/Stepper.tsx +7 -0
- package/dist/react/Toast/Toast.d.ts +1 -1
- package/dist/react/Toast/Toast.tsx +1 -1
- package/dist/react/ToggleChip/ToggleChip.d.ts +29 -0
- package/dist/react/ToggleChip/ToggleChip.tsx +76 -0
- package/dist/react/Tooltip/Tooltip.d.ts +1 -1
- package/dist/react/Tooltip/Tooltip.tsx +1 -1
- package/package.json +1 -1
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
.sb-section {
|
|
57
57
|
padding: var(--space-6) var(--space-5) var(--space-2);
|
|
58
58
|
font-family: var(--font-sans);
|
|
59
|
-
font-size: var(--fs-xxs); font-weight: var(--w-
|
|
59
|
+
font-size: var(--fs-xxs); font-weight: var(--w-regular);
|
|
60
60
|
color: var(--color-foreground-muted);
|
|
61
61
|
opacity: 0.7;
|
|
62
62
|
letter-spacing: var(--ls-caps); text-transform: uppercase;
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
height: 36px; box-sizing: border-box;
|
|
69
69
|
border-radius: var(--radius-sm);
|
|
70
70
|
color: var(--color-foreground-default);
|
|
71
|
-
font-size: var(--fs-md); font-weight: var(--w-
|
|
71
|
+
font-size: var(--fs-md); font-weight: var(--w-regular);
|
|
72
72
|
cursor: pointer; position: relative;
|
|
73
73
|
white-space: nowrap; overflow: hidden;
|
|
74
74
|
transition: background .15s, color .15s;
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
.sb-item.active {
|
|
78
78
|
background: var(--color-background-selected);
|
|
79
79
|
color: var(--color-foreground-brand);
|
|
80
|
-
font-weight: var(--w-
|
|
80
|
+
font-weight: var(--w-regular);
|
|
81
81
|
}
|
|
82
82
|
.sb-item.active::before {
|
|
83
83
|
content: ""; position: absolute; left: -10px; top: 9px; bottom: 9px;
|
|
@@ -100,12 +100,13 @@
|
|
|
100
100
|
.sb-badge.alert { background: var(--color-danger-500); }
|
|
101
101
|
.sb-badge.warning { background: var(--color-warning-500); }
|
|
102
102
|
.sb-count {
|
|
103
|
-
font-family: var(--font-mono);
|
|
103
|
+
font-family: var(--font-mono);
|
|
104
|
+
font-size-adjust: var(--font-mono-adjust); font-size: var(--fs-xxs);
|
|
104
105
|
color: var(--color-foreground-muted);
|
|
105
106
|
background: var(--color-background-subtle);
|
|
106
107
|
padding: 1px 6px; border-radius: var(--radius-xs);
|
|
107
108
|
}
|
|
108
|
-
.sb-item.active .sb-count { background: var(--color-brand-subtle); color: var(--color-brand
|
|
109
|
+
.sb-item.active .sb-count { background: var(--color-brand-subtle); color: var(--color-foreground-brand); }
|
|
109
110
|
|
|
110
111
|
/* Footer — user mini-card */
|
|
111
112
|
.sb-foot {
|
|
@@ -121,7 +122,7 @@
|
|
|
121
122
|
display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
|
|
122
123
|
}
|
|
123
124
|
.sb-foot .meta { flex: 1; min-width: 0; }
|
|
124
|
-
.sb-foot .meta .name { font-size: var(--fs-sm); font-weight: var(--w-
|
|
125
|
+
.sb-foot .meta .name { font-size: var(--fs-sm); font-weight: var(--w-regular); color: var(--color-foreground-default); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
125
126
|
.sb-foot .meta .role { font-size: var(--fs-xxs); color: var(--color-foreground-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
126
127
|
.sb-foot .logout { color: var(--color-foreground-muted); cursor: pointer; flex-shrink: 0; display: inline-flex; }
|
|
127
128
|
.sb-foot .logout svg, .sb-foot .logout i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); }
|
|
@@ -169,7 +170,7 @@
|
|
|
169
170
|
height: 38px; box-sizing: border-box;
|
|
170
171
|
border-radius: var(--radius-sm);
|
|
171
172
|
color: var(--color-foreground-secondary);
|
|
172
|
-
font-size: var(--fs-sm); font-weight: var(--w-
|
|
173
|
+
font-size: var(--fs-sm); font-weight: var(--w-regular);
|
|
173
174
|
cursor: pointer; position: relative;
|
|
174
175
|
transition: var(--transition-fast);
|
|
175
176
|
}
|
|
@@ -181,11 +182,12 @@
|
|
|
181
182
|
}
|
|
182
183
|
.sb-children .sb-subitem:hover { background: var(--color-background-hover); color: var(--color-foreground-default); }
|
|
183
184
|
.sb-children .sb-subitem:hover::before { opacity: 1; background: var(--color-foreground-muted); }
|
|
184
|
-
.sb-children .sb-subitem.active { color: var(--color-foreground-brand); font-weight: var(--w-
|
|
185
|
+
.sb-children .sb-subitem.active { color: var(--color-foreground-brand); font-weight: var(--w-regular); background: var(--color-background-selected); }
|
|
185
186
|
.sb-children .sb-subitem.active::before { background: var(--color-brand-solid); opacity: 1; }
|
|
186
187
|
.sb-children .sb-subitem .count, .sb-children .sb-subitem .sb-count {
|
|
187
188
|
margin-left: auto;
|
|
188
|
-
font-family: var(--font-mono);
|
|
189
|
+
font-family: var(--font-mono);
|
|
190
|
+
font-size-adjust: var(--font-mono-adjust); font-size: var(--fs-xxs);
|
|
189
191
|
color: var(--color-foreground-muted);
|
|
190
192
|
background: var(--color-background-subtle);
|
|
191
193
|
padding: 1px 6px; border-radius: var(--radius-xs);
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
.ss-section { padding: var(--space-3) var(--space-2); border-bottom: 1px solid var(--color-border-subtle); }
|
|
20
20
|
.ss-section:last-of-type { border-bottom: 0; }
|
|
21
|
-
.ss-section-label { font-size: var(--fs-xxs); font-weight: var(--w-
|
|
21
|
+
.ss-section-label { font-size: var(--fs-xxs); font-weight: var(--w-regular); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--color-foreground-muted); padding: 0 var(--space-2); margin-bottom: var(--space-2); }
|
|
22
22
|
|
|
23
23
|
/* Suggestion chips (active state) */
|
|
24
24
|
.ss-chips { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: 0 var(--space-2); }
|
|
25
|
-
.ss-chip { display: inline-flex; align-items: center; gap: var(--space-2); padding: 4px var(--space-3); background: var(--color-background-canvas); border: 1px solid var(--color-border-default); border-radius: var(--radius-pill); font-size: var(--fs-xs); font-weight: var(--w-
|
|
25
|
+
.ss-chip { display: inline-flex; align-items: center; gap: var(--space-2); padding: 4px var(--space-3); background: var(--color-background-canvas); border: 1px solid var(--color-border-default); border-radius: var(--radius-pill); font-size: var(--fs-xs); font-weight: var(--w-regular); color: var(--color-foreground-default); cursor: pointer; transition: var(--transition-fast); }
|
|
26
26
|
.ss-chip:hover { background: var(--color-background-hover); border-color: var(--color-border-strong); }
|
|
27
27
|
.ss-chip svg, .ss-chip i { width: 11px; height: 11px; stroke-width: var(--icon-stroke); color: var(--color-foreground-muted); }
|
|
28
28
|
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
.ss-list-item:hover, .ss-list-item.is-active { background: var(--color-background-hover); }
|
|
33
33
|
.ss-list-item .icon-leading { width: 28px; height: 28px; border-radius: var(--radius-sm); background: var(--color-background-canvas); display: inline-flex; align-items: center; justify-content: center; color: var(--color-foreground-secondary); flex-shrink: 0; }
|
|
34
34
|
.ss-list-item .icon-leading svg, .ss-list-item .icon-leading i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); }
|
|
35
|
-
.ss-list-item .icon-leading.brand { background: var(--color-brand-subtle-solid); color: var(--color-brand-text); }
|
|
35
|
+
.ss-list-item .icon-leading.brand { background: var(--color-brand-subtle-solid); color: var(--color-brand-text-on-light); }
|
|
36
36
|
.ss-list-item .text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
|
|
37
|
-
.ss-list-item .text .label { font-size: var(--fs-sm); font-weight: var(--w-
|
|
37
|
+
.ss-list-item .text .label { font-size: var(--fs-sm); font-weight: var(--w-regular); color: var(--color-foreground-default); }
|
|
38
38
|
.ss-list-item .text .meta { font-size: var(--fs-xs); color: var(--color-foreground-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
39
39
|
.ss-list-item .icon-trailing { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; flex-shrink: 0; color: var(--color-foreground-muted); }
|
|
40
40
|
.ss-list-item .icon-trailing svg, .ss-list-item .icon-trailing i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); }
|
|
@@ -46,21 +46,22 @@
|
|
|
46
46
|
|
|
47
47
|
/* Empty/result label */
|
|
48
48
|
.ss-result-label { padding: 0 var(--space-2) var(--space-2); }
|
|
49
|
-
.ss-result-label .l { font-size: var(--fs-xxs); font-weight: var(--w-
|
|
49
|
+
.ss-result-label .l { font-size: var(--fs-xxs); font-weight: var(--w-regular); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--color-foreground-muted); }
|
|
50
50
|
.ss-no-result { padding: 0 var(--space-2); font-size: var(--fs-sm); color: var(--color-foreground-muted); }
|
|
51
|
-
.ss-no-result strong { color: var(--color-foreground-default); font-weight: var(--w-
|
|
51
|
+
.ss-no-result strong { color: var(--color-foreground-default); font-weight: var(--w-regular); }
|
|
52
52
|
|
|
53
53
|
/* Tip / hint card (similar match suggestion, ID format hint) */
|
|
54
54
|
.ss-hint { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3); background: var(--color-background-subtle); border: 1px solid var(--color-border-subtle); border-radius: var(--radius-sm); margin: var(--space-3) var(--space-2) 0; }
|
|
55
55
|
.ss-hint .icon-leading { color: var(--color-foreground-muted); flex-shrink: 0; display: inline-flex; align-items: center; justify-content: center; width: 14px; height: 14px; }
|
|
56
56
|
.ss-hint .icon-leading svg, .ss-hint .icon-leading i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); }
|
|
57
57
|
.ss-hint .body { font-size: var(--fs-sm); color: var(--color-foreground-secondary); line-height: var(--lh-relaxed); }
|
|
58
|
-
.ss-hint .body strong { color: var(--color-foreground-default); font-weight: var(--w-
|
|
59
|
-
.ss-hint .body code { font-family: var(--font-mono);
|
|
58
|
+
.ss-hint .body strong { color: var(--color-foreground-default); font-weight: var(--w-regular); }
|
|
59
|
+
.ss-hint .body code { font-family: var(--font-mono);
|
|
60
|
+
font-size-adjust: var(--font-mono-adjust); font-size: var(--fs-xs); color: var(--color-foreground-accent); background: var(--color-brand-subtle); padding: 1px var(--space-2); border-radius: var(--radius-xs); }
|
|
60
61
|
|
|
61
62
|
/* ID type-picker buttons */
|
|
62
63
|
.ss-typebtns { display: flex; flex-direction: column; gap: var(--space-2); padding: 0 var(--space-2); }
|
|
63
|
-
.ss-typebtn { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-3); background: var(--color-background-canvas); border: 1px solid var(--color-border-default); border-radius: var(--radius-sm); font-size: var(--fs-sm); font-weight: var(--w-
|
|
64
|
+
.ss-typebtn { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-3); background: var(--color-background-canvas); border: 1px solid var(--color-border-default); border-radius: var(--radius-sm); font-size: var(--fs-sm); font-weight: var(--w-regular); color: var(--color-foreground-default); cursor: pointer; transition: var(--transition-fast); text-align: left; width: 100%; }
|
|
64
65
|
.ss-typebtn:hover { background: var(--color-background-hover); border-color: var(--color-border-strong); }
|
|
65
66
|
.ss-typebtn svg, .ss-typebtn i { width: 16px; height: 16px; stroke-width: var(--icon-stroke); color: var(--color-foreground-muted); }
|
|
66
67
|
.ss-typebtn .grow { flex: 1; }
|
|
@@ -79,13 +80,14 @@
|
|
|
79
80
|
|
|
80
81
|
.ss-illo { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); padding: var(--space-7) var(--space-5); text-align: center; }
|
|
81
82
|
.ss-illo svg.illustration { width: 84px; height: 60px; }
|
|
82
|
-
.ss-illo .title { font-size: var(--fs-md); font-weight: var(--w-
|
|
83
|
+
.ss-illo .title { font-size: var(--fs-md); font-weight: var(--w-regular); color: var(--color-foreground-default); }
|
|
83
84
|
.ss-illo .body { font-size: var(--fs-xs); color: var(--color-foreground-muted); max-width: 32ch; line-height: var(--lh-relaxed); }
|
|
84
85
|
|
|
85
86
|
/* Footer with keyboard shortcuts */
|
|
86
87
|
.ss-foot { display: flex; align-items: center; gap: var(--space-4); padding: var(--space-2) var(--space-3); background: var(--color-background-subtle); border-top: 1px solid var(--color-border-subtle); font-size: var(--fs-xxs); color: var(--color-foreground-muted); }
|
|
87
88
|
.ss-foot .kbd-group { display: inline-flex; align-items: center; gap: 4px; }
|
|
88
|
-
kbd.ss-kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; background: var(--color-background-surface); border: 1px solid var(--color-border-default); border-radius: var(--radius-xs); font-family: var(--font-mono);
|
|
89
|
+
kbd.ss-kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 4px; background: var(--color-background-surface); border: 1px solid var(--color-border-default); border-radius: var(--radius-xs); font-family: var(--font-mono);
|
|
90
|
+
font-size-adjust: var(--font-mono-adjust); font-size: 10px; font-weight: var(--w-regular); color: var(--color-foreground-secondary); }
|
|
89
91
|
.ss-foot .sep { width: 1px; height: 12px; background: var(--color-border-default); }
|
|
90
92
|
|
|
91
93
|
|
|
@@ -66,8 +66,9 @@
|
|
|
66
66
|
background: var(--color-background-surface);
|
|
67
67
|
border: 1.5px solid var(--color-border-default);
|
|
68
68
|
font-family: var(--font-mono);
|
|
69
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
69
70
|
font-size: var(--fs-sm);
|
|
70
|
-
font-weight: var(--w-
|
|
71
|
+
font-weight: var(--w-regular);
|
|
71
72
|
color: var(--color-foreground-muted);
|
|
72
73
|
text-decoration: none;
|
|
73
74
|
transition: var(--transition-fast);
|
|
@@ -98,10 +99,30 @@ a.step-marker:focus-visible {
|
|
|
98
99
|
}
|
|
99
100
|
.step-label {
|
|
100
101
|
font-size: var(--fs-sm);
|
|
101
|
-
font-weight: var(--w-
|
|
102
|
+
font-weight: var(--w-regular);
|
|
102
103
|
letter-spacing: var(--ls-title);
|
|
103
104
|
color: var(--color-foreground-secondary);
|
|
104
105
|
line-height: var(--lh-tight);
|
|
106
|
+
/* Truncate by default — labels used to overlap into "AtivaçãoRecebimento" in any
|
|
107
|
+
narrow container. Opt into two lines with .stepper.is-wrap. */
|
|
108
|
+
white-space: nowrap;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
max-width: 100%;
|
|
112
|
+
}
|
|
113
|
+
.step-help {
|
|
114
|
+
white-space: nowrap;
|
|
115
|
+
overflow: hidden;
|
|
116
|
+
text-overflow: ellipsis;
|
|
117
|
+
max-width: 100%;
|
|
118
|
+
}
|
|
119
|
+
/* Wrap modifier — allow labels/helpers to run to two lines instead of truncating */
|
|
120
|
+
.stepper.is-wrap .step-label,
|
|
121
|
+
.stepper.is-wrap .step-help {
|
|
122
|
+
white-space: normal;
|
|
123
|
+
overflow: visible;
|
|
124
|
+
text-overflow: clip;
|
|
125
|
+
text-wrap: pretty;
|
|
105
126
|
}
|
|
106
127
|
.step-help {
|
|
107
128
|
font-size: var(--fs-xs);
|
|
@@ -199,7 +220,11 @@ a.step-marker:focus-visible {
|
|
|
199
220
|
.stepper .step-body {
|
|
200
221
|
align-items: center;
|
|
201
222
|
padding-top: 0;
|
|
202
|
-
|
|
223
|
+
/* Constrain to the step, never wider — a fixed 16ch let the body overflow its
|
|
224
|
+
own flex:1 step on both sides, so the label's nowrap+ellipsis never engaged
|
|
225
|
+
and the labels overlapped ("AtivaçãoRecebimento"). */
|
|
226
|
+
max-width: 100%;
|
|
227
|
+
min-width: 0;
|
|
203
228
|
}
|
|
204
229
|
.stepper .step-label { text-align: center; }
|
|
205
230
|
.stepper .step-help { text-align: center; }
|
|
@@ -282,10 +307,11 @@ a.step-marker:focus-visible {
|
|
|
282
307
|
.stepper.is-rule .step-label {
|
|
283
308
|
text-align: left;
|
|
284
309
|
font-family: var(--font-mono);
|
|
310
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
285
311
|
font-size: var(--fs-xxs);
|
|
286
312
|
text-transform: uppercase;
|
|
287
313
|
letter-spacing: var(--ls-caps);
|
|
288
|
-
font-weight: var(--w-
|
|
314
|
+
font-weight: var(--w-regular);
|
|
289
315
|
}
|
|
290
316
|
.stepper.is-rule .step.is-done .step-marker { background: var(--color-feedback-success-foreground); }
|
|
291
317
|
.stepper.is-rule .step.is-current .step-marker { background: var(--color-brand-accent-700); box-shadow: none; }
|
|
@@ -301,6 +327,57 @@ a.step-marker:focus-visible {
|
|
|
301
327
|
.stepper.is-collapse-sm .step { gap: 0; }
|
|
302
328
|
}
|
|
303
329
|
|
|
330
|
+
/* ============================================================
|
|
331
|
+
LABEL SIZE — .stepper-label-sm / -md / -lg
|
|
332
|
+
Type scale for the label + helper, independent of marker geometry.
|
|
333
|
+
Density (marker size, connector offset) stays with .is-compact, so the two
|
|
334
|
+
axes compose: a compact stepper can still carry a large label, and a full
|
|
335
|
+
stepper can carry a small one.
|
|
336
|
+
Default (no class) is --fs-sm for the label and --fs-xs for the helper.
|
|
337
|
+
============================================================ */
|
|
338
|
+
.stepper-label-sm .step-label { font-size: var(--fs-xs); }
|
|
339
|
+
.stepper-label-sm .step-help { font-size: var(--fs-xxs); }
|
|
340
|
+
.stepper-label-md .step-label { font-size: var(--fs-sm); }
|
|
341
|
+
.stepper-label-md .step-help { font-size: var(--fs-xs); }
|
|
342
|
+
.stepper-label-lg .step-label { font-size: var(--fs-md); }
|
|
343
|
+
.stepper-label-lg .step-help { font-size: var(--fs-sm); }
|
|
344
|
+
/* An explicit label size wins over the density modifier's own type scale */
|
|
345
|
+
.stepper.is-compact.stepper-label-md .step-label { font-size: var(--fs-sm); }
|
|
346
|
+
.stepper.is-compact.stepper-label-md .step-help { font-size: var(--fs-xs); }
|
|
347
|
+
.stepper.is-compact.stepper-label-lg .step-label { font-size: var(--fs-md); }
|
|
348
|
+
.stepper.is-compact.stepper-label-lg .step-help { font-size: var(--fs-sm); }
|
|
349
|
+
|
|
350
|
+
/* ============================================================
|
|
351
|
+
ON INVERSE — stepper on a permanently-dark surface
|
|
352
|
+
============================================================ */
|
|
353
|
+
.stepper.on-inverse .step-label { color: var(--color-foreground-inverse-secondary); }
|
|
354
|
+
.stepper.on-inverse .step-help { color: var(--color-foreground-inverse-muted); }
|
|
355
|
+
.stepper.on-inverse .step-marker {
|
|
356
|
+
background: color-mix(in srgb, var(--color-pure-white) 8%, transparent);
|
|
357
|
+
border-color: var(--color-border-inverse);
|
|
358
|
+
color: var(--color-foreground-inverse-secondary);
|
|
359
|
+
}
|
|
360
|
+
.stepper.on-inverse .step::after { background: var(--color-border-inverse); }
|
|
361
|
+
.stepper.on-inverse .step.is-current .step-marker {
|
|
362
|
+
background: var(--color-accent-solid);
|
|
363
|
+
border-color: var(--color-accent-solid);
|
|
364
|
+
color: var(--color-foreground-on-solid);
|
|
365
|
+
}
|
|
366
|
+
.stepper.on-inverse .step.is-current .step-label,
|
|
367
|
+
.stepper.on-inverse .step.is-done .step-label { color: var(--color-foreground-inverse-default); }
|
|
368
|
+
.stepper.on-inverse .step.is-done .step-marker {
|
|
369
|
+
background: color-mix(in srgb, var(--color-accent-solid) 30%, transparent);
|
|
370
|
+
border-color: var(--color-accent-solid);
|
|
371
|
+
color: var(--color-foreground-inverse-default);
|
|
372
|
+
}
|
|
373
|
+
.stepper.on-inverse .step.is-done::after { background: var(--color-accent-solid); }
|
|
374
|
+
.stepper.on-inverse .step.is-error .step-marker,
|
|
375
|
+
.stepper.on-inverse .step.is-error .step-label { color: var(--color-danger-300); }
|
|
376
|
+
.stepper.on-inverse .step.is-error .step-marker { border-color: var(--color-danger-300); }
|
|
377
|
+
.stepper.on-inverse .step.is-skipped .step-label,
|
|
378
|
+
.stepper.on-inverse .step.is-skipped .step-marker { color: var(--color-foreground-inverse-muted); }
|
|
379
|
+
.stepper.on-inverse .step-btn:focus-visible { box-shadow: var(--shadow-focus-inverse); }
|
|
380
|
+
|
|
304
381
|
/* ============================================================
|
|
305
382
|
Reduced motion
|
|
306
383
|
============================================================ */
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
}
|
|
75
75
|
.dt-toolbar .count {
|
|
76
76
|
color: var(--color-foreground-default);
|
|
77
|
-
font-weight: var(--w-
|
|
77
|
+
font-weight: var(--w-regular);
|
|
78
78
|
}
|
|
79
79
|
.dt-toolbar .count .total {
|
|
80
80
|
color: var(--color-foreground-muted);
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
}
|
|
107
107
|
.dt-pagination .range {
|
|
108
108
|
font-family: var(--font-mono);
|
|
109
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
109
110
|
font-size: var(--fs-xs);
|
|
110
111
|
color: var(--color-foreground-muted);
|
|
111
112
|
}
|
|
@@ -126,8 +127,9 @@
|
|
|
126
127
|
background: var(--color-background-surface);
|
|
127
128
|
border-radius: var(--radius-sm);
|
|
128
129
|
font-family: var(--font-mono);
|
|
130
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
129
131
|
font-size: var(--fs-xs);
|
|
130
|
-
font-weight: var(--w-
|
|
132
|
+
font-weight: var(--w-regular);
|
|
131
133
|
color: var(--color-foreground-secondary);
|
|
132
134
|
cursor: pointer;
|
|
133
135
|
transition:
|
|
@@ -165,8 +167,9 @@
|
|
|
165
167
|
---------------------------------------------------------------- */
|
|
166
168
|
.dt thead th {
|
|
167
169
|
font-family: var(--font-mono);
|
|
170
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
168
171
|
font-size: var(--fs-xxs);
|
|
169
|
-
font-weight: var(--w-
|
|
172
|
+
font-weight: var(--w-regular);
|
|
170
173
|
color: var(--color-foreground-muted);
|
|
171
174
|
text-transform: uppercase;
|
|
172
175
|
letter-spacing: var(--ls-caps);
|
|
@@ -244,7 +247,7 @@
|
|
|
244
247
|
}
|
|
245
248
|
.dt-cell-stack > .pri {
|
|
246
249
|
font-size: var(--fs-md);
|
|
247
|
-
font-weight: var(--w-
|
|
250
|
+
font-weight: var(--w-regular);
|
|
248
251
|
color: var(--color-foreground-default);
|
|
249
252
|
white-space: nowrap;
|
|
250
253
|
overflow: hidden;
|
|
@@ -257,6 +260,7 @@
|
|
|
257
260
|
}
|
|
258
261
|
.dt-cell-stack > .sub.mono {
|
|
259
262
|
font-family: var(--font-mono);
|
|
263
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
260
264
|
font-size: var(--fs-xs);
|
|
261
265
|
}
|
|
262
266
|
|
|
@@ -309,6 +313,10 @@
|
|
|
309
313
|
white-space: nowrap;
|
|
310
314
|
letter-spacing: -0.01em;
|
|
311
315
|
}
|
|
316
|
+
/* Header label follows the values (beats `.dt thead th { text-align:left }`
|
|
317
|
+
by specificity); stacked cells in a numeric column align flex to the right. */
|
|
318
|
+
.dt thead th.dt-num { text-align: right; }
|
|
319
|
+
.dt td.dt-num .dt-cell-stack { align-items: flex-end; }
|
|
312
320
|
.dt-num .ccy {
|
|
313
321
|
color: var(--color-foreground-muted);
|
|
314
322
|
font-weight: var(--w-regular);
|
|
@@ -322,6 +330,7 @@
|
|
|
322
330
|
/* IDs / hashes */
|
|
323
331
|
.dt-id {
|
|
324
332
|
font-family: var(--font-mono);
|
|
333
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
325
334
|
font-size: var(--fs-xs);
|
|
326
335
|
color: var(--color-foreground-muted);
|
|
327
336
|
white-space: nowrap;
|
|
@@ -415,7 +424,7 @@
|
|
|
415
424
|
.dt-empty .ttl {
|
|
416
425
|
display: block;
|
|
417
426
|
font-size: var(--fs-base);
|
|
418
|
-
font-weight: var(--w-
|
|
427
|
+
font-weight: var(--w-regular);
|
|
419
428
|
color: var(--color-foreground-default);
|
|
420
429
|
margin-bottom: var(--space-2);
|
|
421
430
|
}
|
|
@@ -459,6 +468,7 @@
|
|
|
459
468
|
background: var(--color-background-subtle);
|
|
460
469
|
padding: var(--space-3) var(--space-5);
|
|
461
470
|
font-family: var(--font-mono);
|
|
471
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
462
472
|
font-size: var(--fs-xxs);
|
|
463
473
|
font-weight: var(--w-regular);
|
|
464
474
|
color: var(--color-foreground-muted);
|
|
@@ -566,8 +576,9 @@
|
|
|
566
576
|
content: attr(data-label);
|
|
567
577
|
flex-shrink: 0;
|
|
568
578
|
font-family: var(--font-mono);
|
|
579
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
569
580
|
font-size: var(--fs-xxs);
|
|
570
|
-
font-weight: var(--w-
|
|
581
|
+
font-weight: var(--w-regular);
|
|
571
582
|
text-transform: uppercase;
|
|
572
583
|
letter-spacing: var(--ls-caps);
|
|
573
584
|
color: var(--color-foreground-muted);
|
|
@@ -582,7 +593,7 @@
|
|
|
582
593
|
justify-content: flex-start;
|
|
583
594
|
text-align: left;
|
|
584
595
|
font-size: var(--fs-base);
|
|
585
|
-
font-weight: var(--w-
|
|
596
|
+
font-weight: var(--w-regular);
|
|
586
597
|
padding-top: var(--space-3);
|
|
587
598
|
}
|
|
588
599
|
/* The lead block (avatar + name + country/doc) reads left-to-right */
|
|
@@ -600,3 +611,153 @@
|
|
|
600
611
|
.dt-responsive .dt tbody tr.dt-empty td { border: 0; text-align: center; }
|
|
601
612
|
.dt-responsive .dt tbody tr.dt-empty td::before { content: none; }
|
|
602
613
|
}
|
|
614
|
+
|
|
615
|
+
/* ----------------------------------------------------------------
|
|
616
|
+
12. SUBROWS — a row bound to the row above it
|
|
617
|
+
----------------------------------------------------------------
|
|
618
|
+
For a line item that belongs to another line item and shares its columns:
|
|
619
|
+
an ACH fee under its payment, a refund under its charge, a leg under its
|
|
620
|
+
transfer. This is hierarchy (tree rows), NOT a detail panel — the child
|
|
621
|
+
fills the same columns as the parent, so the two read as one block.
|
|
622
|
+
|
|
623
|
+
Structure:
|
|
624
|
+
<tr class="has-subrows"> parent — loses its bottom border, so the pair glues
|
|
625
|
+
<tr class="dt-subrow"> child — sunken bg, one type step down, no border
|
|
626
|
+
<tr class="dt-subrow is-last"> last child of the group — restores the border
|
|
627
|
+
|
|
628
|
+
Indent scales by depth through one token, so nesting costs no new rules:
|
|
629
|
+
<tr class="dt-subrow" data-depth="2">
|
|
630
|
+
|
|
631
|
+
ROW STATES DO NOT CASCADE IN CSS — a sibling selector cannot read the
|
|
632
|
+
previous row's class. The component echoes is-muted / is-error / is-selected
|
|
633
|
+
onto each subrow; without that the child visually detaches from its parent.
|
|
634
|
+
|
|
635
|
+
ACCESSIBILITY — native table semantics are kept on purpose. role="treegrid"
|
|
636
|
+
is the formally correct role for hierarchical rows, but it is a PROMISE of a
|
|
637
|
+
keyboard model (arrow-key cell/row navigation, aria-level, aria-expanded,
|
|
638
|
+
posinset/setsize). Claiming it without implementing that model is worse for
|
|
639
|
+
a screen-reader user than a plain table. Since these subrows are always
|
|
640
|
+
visible and one level deep, hierarchy is conveyed in CONTENT instead: the
|
|
641
|
+
lead cell carries a visually-hidden prefix naming its parent. Revisit
|
|
642
|
+
treegrid only if the rows ever become collapsible and keyboard-navigable.
|
|
643
|
+
---------------------------------------------------------------- */
|
|
644
|
+
|
|
645
|
+
/* Glue: the parent gives up its bottom border so no line splits the pair */
|
|
646
|
+
.dt tbody tr.has-subrows > td { border-bottom: 0; }
|
|
647
|
+
|
|
648
|
+
.dt tbody tr.dt-subrow > td {
|
|
649
|
+
background: var(--color-background-subtle);
|
|
650
|
+
border-bottom: 0;
|
|
651
|
+
padding-top: var(--space-2-5);
|
|
652
|
+
padding-bottom: var(--space-2-5);
|
|
653
|
+
font-size: var(--fs-sm);
|
|
654
|
+
color: var(--color-foreground-secondary);
|
|
655
|
+
}
|
|
656
|
+
/* The group closes with a normal rule */
|
|
657
|
+
.dt tbody tr.dt-subrow.is-last > td { border-bottom: 1px solid var(--color-border-default); }
|
|
658
|
+
|
|
659
|
+
/* Hover reads on the whole group, not on one row */
|
|
660
|
+
.dt tbody tr.has-subrows.is-clickable:hover > td,
|
|
661
|
+
.dt tbody tr.has-subrows.is-clickable:hover + tr.dt-subrow > td {
|
|
662
|
+
background: var(--color-background-hover);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/* Indent — one token, multiplied by depth */
|
|
666
|
+
/* --subrow-indent is a real token (declared in colors_and_type.css §7 spacing);
|
|
667
|
+
depth multiplies it in the calc, so no custom property is declared under a
|
|
668
|
+
component selector and N levels still cost one rule each. */
|
|
669
|
+
.dt tbody tr.dt-subrow > td:first-child {
|
|
670
|
+
padding-left: calc(var(--space-5) + var(--subrow-indent) * 1);
|
|
671
|
+
}
|
|
672
|
+
.dt tbody tr.dt-subrow[data-depth="2"] > td:first-child {
|
|
673
|
+
padding-left: calc(var(--space-5) + var(--subrow-indent) * 2);
|
|
674
|
+
}
|
|
675
|
+
.dt tbody tr.dt-subrow[data-depth="3"] > td:first-child {
|
|
676
|
+
padding-left: calc(var(--space-5) + var(--subrow-indent) * 3);
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/* Lead cell — connector glyph + content. The glyph is a ::before so it is not
|
|
680
|
+
copied with the text and not announced as a character. */
|
|
681
|
+
.dt-subrow-lead {
|
|
682
|
+
display: flex;
|
|
683
|
+
align-items: center;
|
|
684
|
+
gap: var(--space-3);
|
|
685
|
+
min-width: 0;
|
|
686
|
+
}
|
|
687
|
+
.dt-subrow-lead::before {
|
|
688
|
+
content: "\21B3";
|
|
689
|
+
color: var(--color-foreground-placeholder);
|
|
690
|
+
font-size: var(--fs-sm);
|
|
691
|
+
line-height: 1;
|
|
692
|
+
flex-shrink: 0;
|
|
693
|
+
}
|
|
694
|
+
/* Small square icon tile, quieter than the parent's .ic-tile */
|
|
695
|
+
.dt-subrow-lead > .ic-mini {
|
|
696
|
+
width: 20px; height: 20px;
|
|
697
|
+
border-radius: var(--radius-2xs);
|
|
698
|
+
background: var(--color-background-surface);
|
|
699
|
+
border: 1px solid var(--color-border-default);
|
|
700
|
+
color: var(--color-foreground-muted);
|
|
701
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
702
|
+
flex-shrink: 0;
|
|
703
|
+
}
|
|
704
|
+
.dt-subrow-lead > .ic-mini > i,
|
|
705
|
+
.dt-subrow-lead > .ic-mini > svg { width: 11px; height: 11px; stroke-width: var(--icon-stroke); }
|
|
706
|
+
.dt-subrow-lead > .txt {
|
|
707
|
+
color: var(--color-foreground-default);
|
|
708
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/* Neutral tag for the item kind (Fee, Refund, Leg) */
|
|
712
|
+
.dt-subrow-tag {
|
|
713
|
+
font-size: var(--fs-xxs);
|
|
714
|
+
color: var(--color-foreground-muted);
|
|
715
|
+
background: var(--color-background-surface);
|
|
716
|
+
border: 1px solid var(--color-border-default);
|
|
717
|
+
border-radius: var(--radius-2xs);
|
|
718
|
+
padding: 1px var(--space-2);
|
|
719
|
+
flex-shrink: 0;
|
|
720
|
+
}
|
|
721
|
+
/* Status text on a subrow is plain muted copy, not a pill — the parent owns the
|
|
722
|
+
status signal and two pills in a group compete. */
|
|
723
|
+
.dt-subrow-status { color: var(--color-foreground-muted); font-size: var(--fs-xs); flex-shrink: 0; }
|
|
724
|
+
|
|
725
|
+
/* Row states echoed from the parent by the component */
|
|
726
|
+
.dt tbody tr.dt-subrow.is-muted > td { opacity: .55; }
|
|
727
|
+
.dt tbody tr.dt-subrow.is-selected > td { background: var(--color-background-selected); }
|
|
728
|
+
.dt tbody tr.dt-subrow.is-error > td { background: color-mix(in srgb, var(--color-feedback-danger-background) 40%, transparent); }
|
|
729
|
+
|
|
730
|
+
/* Inverse / dark */
|
|
731
|
+
.dt.on-inverse tbody tr.dt-subrow > td,
|
|
732
|
+
.dark .dt tbody tr.dt-subrow > td {
|
|
733
|
+
background: color-mix(in srgb, var(--color-pure-white) 3%, transparent);
|
|
734
|
+
color: var(--color-foreground-inverse-secondary);
|
|
735
|
+
}
|
|
736
|
+
.dt.on-inverse .dt-subrow-lead > .txt,
|
|
737
|
+
.dark .dt .dt-subrow-lead > .txt { color: var(--color-foreground-inverse-default); }
|
|
738
|
+
.dt.on-inverse .dt-subrow-lead > .ic-mini,
|
|
739
|
+
.dark .dt .dt-subrow-lead > .ic-mini {
|
|
740
|
+
background: transparent;
|
|
741
|
+
border-color: var(--color-border-inverse);
|
|
742
|
+
color: var(--color-foreground-inverse-muted);
|
|
743
|
+
}
|
|
744
|
+
.dt.on-inverse .dt-subrow-tag,
|
|
745
|
+
.dark .dt .dt-subrow-tag {
|
|
746
|
+
background: transparent;
|
|
747
|
+
border-color: var(--color-border-inverse);
|
|
748
|
+
color: var(--color-foreground-inverse-muted);
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/* Mobile — inside the card stack the child becomes a nested block, still
|
|
752
|
+
visibly hanging off its parent card. */
|
|
753
|
+
@media (max-width: 900px) {
|
|
754
|
+
.dt-responsive .dt tbody tr.dt-subrow {
|
|
755
|
+
margin: calc(-1 * var(--space-3)) var(--space-3) var(--space-3);
|
|
756
|
+
border-radius: var(--shape-control);
|
|
757
|
+
border: 1px solid var(--color-border-default);
|
|
758
|
+
border-top: 0;
|
|
759
|
+
display: flex; flex-wrap: wrap; gap: var(--space-2);
|
|
760
|
+
}
|
|
761
|
+
.dt-responsive .dt tbody tr.dt-subrow > td { border-bottom: 0; padding-left: var(--space-4); }
|
|
762
|
+
.dt-responsive .dt tbody tr.dt-subrow > td::before { display: none; }
|
|
763
|
+
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
cursor: pointer;
|
|
37
37
|
font-family: var(--font-sans);
|
|
38
38
|
font-size: var(--fs-sm);
|
|
39
|
-
font-weight: var(--w-
|
|
39
|
+
font-weight: var(--w-regular);
|
|
40
40
|
color: var(--color-foreground-secondary);
|
|
41
41
|
position: relative;
|
|
42
42
|
white-space: nowrap;
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
.tab[aria-selected="true"],
|
|
48
48
|
.tab.is-active {
|
|
49
49
|
color: var(--color-brand-accent-700);
|
|
50
|
-
font-weight: var(--w-
|
|
50
|
+
font-weight: var(--w-regular);
|
|
51
51
|
}
|
|
52
52
|
.tab[aria-selected="true"]::after,
|
|
53
53
|
.tab.is-active::after {
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
height: 20px;
|
|
76
76
|
padding: 0 var(--space-2);
|
|
77
77
|
font-family: var(--font-mono);
|
|
78
|
+
font-size-adjust: var(--font-mono-adjust);
|
|
78
79
|
font-size: var(--fs-xxs);
|
|
79
80
|
font-weight: var(--w-bold);
|
|
80
81
|
background: var(--color-background-subtle);
|
|
@@ -204,7 +205,7 @@
|
|
|
204
205
|
}
|
|
205
206
|
.tab-label::after {
|
|
206
207
|
content: attr(data-label);
|
|
207
|
-
font-weight: var(--w-
|
|
208
|
+
font-weight: var(--w-regular);
|
|
208
209
|
height: 0;
|
|
209
210
|
visibility: hidden;
|
|
210
211
|
overflow: hidden;
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
}
|
|
55
55
|
.toast-title {
|
|
56
56
|
font-size: var(--fs-sm);
|
|
57
|
-
font-weight: var(--w-
|
|
57
|
+
font-weight: var(--w-regular);
|
|
58
58
|
color: var(--color-foreground-default);
|
|
59
59
|
margin: 0 0 var(--space-1);
|
|
60
60
|
letter-spacing: var(--ls-tight);
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
border: 0;
|
|
75
75
|
padding: 0;
|
|
76
76
|
font: inherit;
|
|
77
|
-
font-weight: var(--w-
|
|
77
|
+
font-weight: var(--w-regular);
|
|
78
78
|
color: var(--color-foreground-accent);
|
|
79
79
|
text-decoration: underline;
|
|
80
80
|
text-underline-offset: 3px;
|