@attrus-ds/core 1.0.3 → 1.0.6
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/buttons.css +1 -1
- package/dist/css/components/callout.css +1 -1
- package/dist/css/components/combobox.css +5 -5
- package/dist/css/components/inputs.css +3 -3
- package/dist/css/components/overlays.css +5 -5
- package/dist/css/components/primitives.css +4 -4
- package/dist/css/components/sidebar.css +20 -7
- package/dist/css/components/smart-search.css +3 -3
- package/dist/css/components/status-pills.css +2 -2
- package/dist/css/components/table.css +3 -3
- package/dist/css/components/toast.css +1 -1
- package/dist/css/components/topbar.css +1 -1
- package/dist/css/tokens.css +184 -125
- package/package.json +1 -1
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
4. VARIANTS
|
|
133
133
|
---------------------------------------------------------------- */
|
|
134
134
|
|
|
135
|
-
/* PRIMARY — brand solid */
|
|
135
|
+
/* PRIMARY — brand-blue solid */
|
|
136
136
|
.btn-primary {
|
|
137
137
|
background: var(--color-brand-solid);
|
|
138
138
|
color: var(--color-brand-on-solid);
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
--callout-fg theme-aware foreground → icon color
|
|
39
39
|
============================================================ */
|
|
40
40
|
.callout {
|
|
41
|
-
--callout-tint: var(--color-brand-
|
|
41
|
+
--callout-tint: var(--color-brand-solid); /* info / royal */
|
|
42
42
|
--callout-fg: var(--color-foreground-accent); /* sky, theme-aware */
|
|
43
43
|
display: flex;
|
|
44
44
|
gap: var(--space-3);
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
.combobox-avatar {
|
|
74
74
|
width: 24px; height: 24px;
|
|
75
75
|
border-radius: var(--radius-pill);
|
|
76
|
-
background: var(--color-brand-
|
|
77
|
-
color: var(--color-brand-
|
|
76
|
+
background: var(--color-brand-subtle-solid);
|
|
77
|
+
color: var(--color-brand-text);
|
|
78
78
|
display: inline-flex; align-items: center; justify-content: center;
|
|
79
79
|
font-size: var(--fs-xxs);
|
|
80
80
|
font-weight: var(--w-semibold);
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
margin-top: 1px;
|
|
199
199
|
}
|
|
200
200
|
.combobox-option.is-selected .combobox-option-meta {
|
|
201
|
-
color: var(--color-brand-
|
|
201
|
+
color: var(--color-brand-text);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
.combobox-option-check {
|
|
@@ -306,9 +306,9 @@
|
|
|
306
306
|
.combobox-filters { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-3); border-bottom: 1px solid var(--color-border-subtle); }
|
|
307
307
|
.combobox-filter-chip { display: inline-flex; align-items: center; gap: var(--space-2); padding: 4px var(--space-3); background: var(--color-background-surface); border: 1px solid var(--color-border-default); border-radius: var(--radius-pill); font-family: var(--font-sans); font-size: var(--fs-xs); font-weight: var(--w-medium); color: var(--color-foreground-secondary); cursor: pointer; transition: var(--transition-fast); }
|
|
308
308
|
.combobox-filter-chip:hover { background: var(--color-background-hover); border-color: var(--color-border-strong); color: var(--color-foreground-default); }
|
|
309
|
-
.combobox-filter-chip.is-active { background: var(--color-background-selected); border-color: var(--color-brand-
|
|
309
|
+
.combobox-filter-chip.is-active { background: var(--color-background-selected); border-color: var(--color-brand-border); color: var(--color-foreground-brand); font-weight: var(--w-semibold); }
|
|
310
310
|
.combobox-filter-chip .count { font-family: var(--font-mono); font-size: var(--fs-xxs); color: var(--color-foreground-muted); }
|
|
311
|
-
.combobox-filter-chip.is-active .count { color: var(--color-brand-
|
|
311
|
+
.combobox-filter-chip.is-active .count { color: var(--color-brand-text); }
|
|
312
312
|
.combobox-meta { padding: var(--space-2) var(--space-3) var(--space-1); font-size: var(--fs-xxs); font-weight: var(--w-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--color-foreground-muted); border-bottom: 1px solid var(--color-border-subtle); }
|
|
313
313
|
.combobox-foot-meta { padding: var(--space-2) var(--space-3); font-size: var(--fs-xs); color: var(--color-foreground-muted); border-top: 1px solid var(--color-border-subtle); }
|
|
314
314
|
|
|
@@ -469,7 +469,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
469
469
|
font-size: var(--fs-xl);
|
|
470
470
|
font-weight: var(--w-semibold);
|
|
471
471
|
border: 1px solid var(--color-border-default);
|
|
472
|
-
border-radius: var(--shape-
|
|
472
|
+
border-radius: var(--shape-control);
|
|
473
473
|
outline: none;
|
|
474
474
|
background: var(--color-background-surface);
|
|
475
475
|
color: var(--color-foreground-default);
|
|
@@ -842,7 +842,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
842
842
|
white-space: nowrap;
|
|
843
843
|
}
|
|
844
844
|
.file-status.ok { color: var(--color-feedback-success-foreground); background: var(--color-feedback-success-background); }
|
|
845
|
-
.file-status.pending { color: var(--color-brand-text); background: var(--color-brand-
|
|
845
|
+
.file-status.pending { color: var(--color-brand-text); background: color-mix(in srgb, var(--color-brand-solid) 10%, transparent); }
|
|
846
846
|
.file-status.err { color: var(--color-feedback-danger-foreground); background: var(--color-feedback-danger-background); cursor: pointer; }
|
|
847
847
|
|
|
848
848
|
.file-remove {
|
|
@@ -952,7 +952,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
952
952
|
.dark .chips:focus-within,
|
|
953
953
|
.dark .number-input:focus-within,
|
|
954
954
|
.dark .date-trigger:focus-visible {
|
|
955
|
-
border-color: var(--color-
|
|
955
|
+
border-color: var(--color-border-focus);
|
|
956
956
|
box-shadow: var(--shadow-focus-sky);
|
|
957
957
|
}
|
|
958
958
|
.dark .field > label { color: var(--color-foreground-inverse-default); }
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
display: flex;
|
|
38
38
|
flex-direction: column;
|
|
39
39
|
background: var(--color-background-surface);
|
|
40
|
-
border-radius: var(--
|
|
40
|
+
border-radius: var(--shape-overlay);
|
|
41
41
|
box-shadow: var(--shadow-2xl);
|
|
42
42
|
opacity: 0;
|
|
43
43
|
pointer-events: none;
|
|
@@ -237,7 +237,7 @@
|
|
|
237
237
|
justify-content: space-between;
|
|
238
238
|
gap: var(--space-4);
|
|
239
239
|
padding: var(--space-6);
|
|
240
|
-
background: var(--glass-
|
|
240
|
+
background: var(--glass-chrome);
|
|
241
241
|
-webkit-backdrop-filter: var(--glass-blur);
|
|
242
242
|
backdrop-filter: var(--glass-blur);
|
|
243
243
|
border-bottom: 1px solid var(--color-border-subtle);
|
|
@@ -307,7 +307,7 @@
|
|
|
307
307
|
display: inline-flex;
|
|
308
308
|
align-items: center;
|
|
309
309
|
justify-content: center;
|
|
310
|
-
border-radius: var(--
|
|
310
|
+
border-radius: var(--shape-container);
|
|
311
311
|
}
|
|
312
312
|
.drawer-lead i, .drawer-lead svg { width: 20px; height: 20px; stroke-width: var(--icon-stroke); }
|
|
313
313
|
|
|
@@ -328,7 +328,7 @@
|
|
|
328
328
|
justify-content: flex-end;
|
|
329
329
|
gap: var(--space-3);
|
|
330
330
|
padding: var(--space-5) var(--space-6);
|
|
331
|
-
background: var(--glass-
|
|
331
|
+
background: var(--glass-chrome);
|
|
332
332
|
-webkit-backdrop-filter: var(--glass-blur);
|
|
333
333
|
backdrop-filter: var(--glass-blur);
|
|
334
334
|
border-top: 1px solid var(--color-border-subtle);
|
|
@@ -343,7 +343,7 @@
|
|
|
343
343
|
display: flex;
|
|
344
344
|
justify-content: center;
|
|
345
345
|
padding: var(--space-3) 0 var(--space-1);
|
|
346
|
-
background: var(--glass-
|
|
346
|
+
background: var(--glass-chrome);
|
|
347
347
|
-webkit-backdrop-filter: var(--glass-blur);
|
|
348
348
|
backdrop-filter: var(--glass-blur);
|
|
349
349
|
flex-shrink: 0;
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
/* Tone — accent-on-tinted-bg uses the same background+foreground pair as feedback pills,
|
|
34
34
|
so an Avatar reads as the same "object" as a status pill that references it. */
|
|
35
|
-
.av-brand { background: var(--color-brand-
|
|
35
|
+
.av-brand { background: var(--color-brand-subtle-solid); color: var(--color-brand-text); }
|
|
36
36
|
.av-success { background: var(--color-feedback-success-background); color: var(--color-feedback-success-foreground); }
|
|
37
37
|
.av-warning { background: var(--color-feedback-warning-background); color: var(--color-feedback-warning-foreground); }
|
|
38
38
|
.av-danger { background: var(--color-feedback-danger-background); color: var(--color-feedback-danger-foreground); }
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
padding: var(--space-5);
|
|
142
142
|
background: var(--color-background-surface);
|
|
143
143
|
border: 1px solid var(--color-border-default);
|
|
144
|
-
border-radius: var(--
|
|
144
|
+
border-radius: var(--shape-container);
|
|
145
145
|
}
|
|
146
146
|
.stat-label {
|
|
147
147
|
font-family: var(--font-mono);
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
.eyebrow-muted { color: var(--color-foreground-muted); }
|
|
254
254
|
.eyebrow-secondary { color: var(--color-foreground-secondary); }
|
|
255
255
|
.eyebrow-default { color: var(--color-foreground-default); }
|
|
256
|
-
.eyebrow-brand { color: var(--color-brand-
|
|
256
|
+
.eyebrow-brand { color: var(--color-brand-text); }
|
|
257
257
|
.eyebrow-inverse { color: var(--color-foreground-inverse-muted); }
|
|
258
258
|
|
|
259
259
|
/* =================== FILTER CHIP =================== */
|
|
@@ -280,7 +280,7 @@
|
|
|
280
280
|
/* Selected (aria-pressed via FilterChip TSX) — same active treatment as combobox filter chips */
|
|
281
281
|
.filter-chip[aria-pressed="true"] {
|
|
282
282
|
background: var(--color-background-selected);
|
|
283
|
-
border-color: var(--color-brand-
|
|
283
|
+
border-color: var(--color-brand-border);
|
|
284
284
|
color: var(--color-foreground-brand);
|
|
285
285
|
font-weight: var(--w-semibold);
|
|
286
286
|
}
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
font-family: var(--font-sans);
|
|
59
59
|
font-size: var(--fs-xxs); font-weight: var(--w-semibold);
|
|
60
60
|
color: var(--color-foreground-muted);
|
|
61
|
+
opacity: 0.7;
|
|
61
62
|
letter-spacing: var(--ls-caps); text-transform: uppercase;
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -66,7 +67,7 @@
|
|
|
66
67
|
padding: 8px 10px; margin: 3px 10px;
|
|
67
68
|
height: 36px; box-sizing: border-box;
|
|
68
69
|
border-radius: var(--radius-sm);
|
|
69
|
-
color: var(--color-foreground-
|
|
70
|
+
color: var(--color-foreground-default);
|
|
70
71
|
font-size: var(--fs-md); font-weight: var(--w-medium);
|
|
71
72
|
cursor: pointer; position: relative;
|
|
72
73
|
white-space: nowrap; overflow: hidden;
|
|
@@ -81,10 +82,10 @@
|
|
|
81
82
|
.sb-item.active::before {
|
|
82
83
|
content: ""; position: absolute; left: -10px; top: 9px; bottom: 9px;
|
|
83
84
|
width: 2px; border-radius: var(--radius-pill);
|
|
84
|
-
background: var(--color-brand-
|
|
85
|
+
background: var(--color-brand-solid);
|
|
85
86
|
}
|
|
86
87
|
.sb-item .ic { width: 15px; height: 15px; stroke-width: var(--icon-stroke); flex-shrink: 0; opacity: 0.85; }
|
|
87
|
-
.sb-item.active .ic { color: var(--color-brand-
|
|
88
|
+
.sb-item.active .ic { color: var(--color-brand-solid); opacity: 1; }
|
|
88
89
|
.sb-item .label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
89
90
|
.sb-item.disabled { color: var(--color-foreground-placeholder); cursor: not-allowed; }
|
|
90
91
|
.sb-item.disabled:hover { background: transparent; }
|
|
@@ -94,7 +95,7 @@
|
|
|
94
95
|
font-family: var(--font-sans); font-size: 9px; font-weight: var(--w-bold);
|
|
95
96
|
letter-spacing: .06em; line-height: 1.4;
|
|
96
97
|
padding: 1px var(--space-2-5); border-radius: var(--radius-pill);
|
|
97
|
-
background: var(--color-brand-
|
|
98
|
+
background: var(--color-brand-solid); color: var(--color-brand-on-solid);
|
|
98
99
|
}
|
|
99
100
|
.sb-badge.alert { background: var(--color-danger-500); }
|
|
100
101
|
.sb-badge.warning { background: var(--color-warning-500); }
|
|
@@ -104,7 +105,7 @@
|
|
|
104
105
|
background: var(--color-background-subtle);
|
|
105
106
|
padding: 1px 6px; border-radius: var(--radius-xs);
|
|
106
107
|
}
|
|
107
|
-
.sb-item.active .sb-count { background:
|
|
108
|
+
.sb-item.active .sb-count { background: var(--color-brand-subtle); color: var(--color-brand-text); }
|
|
108
109
|
|
|
109
110
|
/* Footer — user mini-card */
|
|
110
111
|
.sb-foot {
|
|
@@ -115,7 +116,7 @@
|
|
|
115
116
|
}
|
|
116
117
|
.sb-foot .avatar {
|
|
117
118
|
width: 26px; height: 26px; border-radius: var(--radius-pill);
|
|
118
|
-
background: var(--color-brand-
|
|
119
|
+
background: var(--color-brand-solid); color: var(--color-brand-on-solid);
|
|
119
120
|
font-size: 10px; font-weight: var(--w-bold);
|
|
120
121
|
display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0;
|
|
121
122
|
}
|
|
@@ -124,6 +125,18 @@
|
|
|
124
125
|
.sb-foot .meta .role { font-size: var(--fs-xxs); color: var(--color-foreground-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
125
126
|
.sb-foot .logout { color: var(--color-foreground-muted); cursor: pointer; flex-shrink: 0; display: inline-flex; }
|
|
126
127
|
.sb-foot .logout svg, .sb-foot .logout i { width: 14px; height: 14px; stroke-width: var(--icon-stroke); }
|
|
128
|
+
/* Card variant — enclosed footer that reads as a distinct card and stacks the
|
|
129
|
+
company under the name (mirrors the top-bar account control). Use .co for the
|
|
130
|
+
company line. Consumed via AppSidebar's `foot` slot: <div class="sb-foot sb-foot-card">. */
|
|
131
|
+
.sb-foot-card {
|
|
132
|
+
margin: var(--space-3);
|
|
133
|
+
padding: var(--space-3);
|
|
134
|
+
border: 1px solid var(--color-border-default);
|
|
135
|
+
border-radius: var(--shape-container);
|
|
136
|
+
background: var(--color-background-surface);
|
|
137
|
+
}
|
|
138
|
+
.sb-foot-card .meta { display: flex; flex-direction: column; line-height: 1.3; }
|
|
139
|
+
.sb-foot-card .meta .co { font-size: var(--fs-xxs); color: var(--color-foreground-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
127
140
|
|
|
128
141
|
/* ===== Collapsed (60px icon rail) ===== */
|
|
129
142
|
.sb.collapsed { width: 60px; }
|
|
@@ -169,7 +182,7 @@
|
|
|
169
182
|
.sb-children .sb-subitem:hover { background: var(--color-background-hover); color: var(--color-foreground-default); }
|
|
170
183
|
.sb-children .sb-subitem:hover::before { opacity: 1; background: var(--color-foreground-muted); }
|
|
171
184
|
.sb-children .sb-subitem.active { color: var(--color-foreground-brand); font-weight: var(--w-semibold); background: var(--color-background-selected); }
|
|
172
|
-
.sb-children .sb-subitem.active::before { background: var(--color-brand-
|
|
185
|
+
.sb-children .sb-subitem.active::before { background: var(--color-brand-solid); opacity: 1; }
|
|
173
186
|
.sb-children .sb-subitem .count, .sb-children .sb-subitem .sb-count {
|
|
174
187
|
margin-left: auto;
|
|
175
188
|
font-family: var(--font-mono); font-size: var(--fs-xxs);
|
|
@@ -18,7 +18,7 @@
|
|
|
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-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--color-foreground-muted); padding: 0 var(--space-2); margin-bottom: var(--space-2); }
|
|
21
|
+
.ss-section-label { font-size: var(--fs-xxs); font-weight: var(--w-semibold); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--color-foreground-muted); padding: 0 var(--space-2); margin-bottom: var(--space-2); }: 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); }
|
|
@@ -32,7 +32,7 @@
|
|
|
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-
|
|
35
|
+
.ss-list-item .icon-leading.brand { background: var(--color-brand-subtle-solid); color: var(--color-brand-text); }
|
|
36
36
|
.ss-list-item .text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
|
|
37
37
|
.ss-list-item .text .label { font-size: var(--fs-sm); font-weight: var(--w-semibold); 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; }
|
|
@@ -56,7 +56,7 @@
|
|
|
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
58
|
.ss-hint .body strong { color: var(--color-foreground-default); font-weight: var(--w-semibold); }
|
|
59
|
-
.ss-hint .body code { font-family: var(--font-mono); font-size: var(--fs-xs); color: var(--color-foreground-accent); background:
|
|
59
|
+
.ss-hint .body code { font-family: var(--font-mono); 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
60
|
|
|
61
61
|
/* ID type-picker buttons */
|
|
62
62
|
.ss-typebtns { display: flex; flex-direction: column; gap: var(--space-2); padding: 0 var(--space-2); }
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
.pill.solid.danger { background: var(--color-danger-500); color: var(--color-pure-white); border-color: transparent; }
|
|
132
132
|
.pill.solid.info { background: var(--color-info-500); color: var(--color-pure-white); border-color: transparent; }
|
|
133
133
|
.pill.solid.neutral { background: var(--color-neutral-700); color: var(--color-pure-white); border-color: transparent; }
|
|
134
|
-
.pill.solid.brand { background: var(--color-brand-
|
|
134
|
+
.pill.solid.brand { background: var(--color-brand-solid); color: var(--color-brand-on-solid); border-color: transparent; }
|
|
135
135
|
.pill.solid > .dot { background: currentColor; }
|
|
136
136
|
|
|
137
137
|
.pill.outline.success { background: transparent; color: var(--color-feedback-success-foreground); border-color: var(--color-success-500); }
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
.pill.outline.danger { background: transparent; color: var(--color-feedback-danger-foreground); border-color: var(--color-danger-500); }
|
|
140
140
|
.pill.outline.info { background: transparent; color: var(--color-feedback-info-foreground); border-color: var(--color-info-500); }
|
|
141
141
|
.pill.outline.neutral { background: transparent; color: var(--color-foreground-secondary); border-color: var(--color-border-strong); }
|
|
142
|
-
.pill.outline.brand { background: transparent; color: var(--color-foreground-accent); border-color: var(--color-brand-
|
|
142
|
+
.pill.outline.brand { background: transparent; color: var(--color-foreground-accent); border-color: var(--color-brand-solid); }
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
/* ----------------------------------------------------------------
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
.dt-wrap {
|
|
55
55
|
background: var(--color-background-surface);
|
|
56
56
|
border: 1px solid var(--color-border-default);
|
|
57
|
-
border-radius: var(--
|
|
57
|
+
border-radius: var(--shape-container);
|
|
58
58
|
overflow: hidden;
|
|
59
59
|
box-shadow: var(--shadow-xs);
|
|
60
60
|
}
|
|
@@ -138,8 +138,8 @@
|
|
|
138
138
|
.dt-pagination .page-btn:hover { background: var(--color-background-hover); color: var(--color-foreground-default); }
|
|
139
139
|
.dt-pagination .page-btn:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
140
140
|
.dt-pagination .page-btn.is-current {
|
|
141
|
-
background:
|
|
142
|
-
border-color: color-mix(in srgb, var(--color-
|
|
141
|
+
background: var(--color-accent-subtle);
|
|
142
|
+
border-color: color-mix(in srgb, var(--color-accent-solid) 36%, transparent);
|
|
143
143
|
color: var(--color-foreground-accent);
|
|
144
144
|
}
|
|
145
145
|
.dt-pagination .page-btn > i, .dt-pagination .page-btn > svg,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
-webkit-backdrop-filter: var(--glass-blur);
|
|
17
17
|
backdrop-filter: var(--glass-blur);
|
|
18
18
|
border: var(--glass-border);
|
|
19
|
-
border-radius: var(--
|
|
19
|
+
border-radius: var(--shape-container);
|
|
20
20
|
box-shadow: var(--shadow-glass), var(--shadow-lg);
|
|
21
21
|
font-family: var(--font-sans);
|
|
22
22
|
font-size: var(--fs-sm);
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
/* Avatar chip */
|
|
81
81
|
.tb-avatar {
|
|
82
82
|
width: 30px; height: 30px; border-radius: var(--radius-pill);
|
|
83
|
-
background: var(--color-brand-
|
|
83
|
+
background: var(--color-brand-solid); color: var(--color-brand-on-solid);
|
|
84
84
|
font-size: var(--fs-xs); font-weight: var(--w-bold);
|
|
85
85
|
display: inline-flex; align-items: center; justify-content: center;
|
|
86
86
|
flex-shrink: 0; margin-left: var(--space-1);
|
package/dist/css/tokens.css
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/* @attrus/cabiros — design tokens + type classes (concatenated).
|
|
2
2
|
Generated by scripts/build.mjs from src/tokens/ and src/typography/. */
|
|
3
3
|
|
|
4
|
-
/*
|
|
5
|
-
|
|
6
|
-
The primitive layer. Theme-agnostic. Referenced only by the
|
|
7
|
-
semantic layer (color-semantic.css) and effect layers — never
|
|
8
|
-
consumed directly by components.
|
|
9
|
-
============================================================ */
|
|
4
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
5
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
10
6
|
|
|
11
7
|
:root {
|
|
8
|
+
/* ============================================================
|
|
9
|
+
1. BASE PALETTE — raw color tokens
|
|
10
|
+
============================================================ */
|
|
11
|
+
|
|
12
12
|
/* --- Brand (from manual: Lato + 4 HEX stops) --- */
|
|
13
13
|
--brand-attrus-ink: #0F0F1A; /* almost-black, blue-tinted */
|
|
14
14
|
--brand-attrus-navy: #002142; /* deep navy */
|
|
@@ -143,15 +143,16 @@
|
|
|
143
143
|
--color-info-900: #072951;
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
/*
|
|
147
|
-
|
|
148
|
-
Reference the base palette (palette.css). This is the layer
|
|
149
|
-
components consume.
|
|
150
|
-
Roles: default | secondary | muted | accent | placeholder
|
|
151
|
-
Contexts: fg (text/icon), bg (surface), br (border)
|
|
152
|
-
============================================================ */
|
|
146
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
147
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
153
148
|
|
|
154
149
|
:root {
|
|
150
|
+
/* ============================================================
|
|
151
|
+
2. SEMANTIC TOKENS — reference the base palette
|
|
152
|
+
Roles: default | secondary | muted | accent | placeholder
|
|
153
|
+
Contexts: fg (text/icon), bg (surface), br (border)
|
|
154
|
+
============================================================ */
|
|
155
|
+
|
|
155
156
|
/* Default (light) theme — the 60% whites/light grays */
|
|
156
157
|
--color-background-canvas: var(--color-neutral-25); /* app background */
|
|
157
158
|
--color-background-surface: var(--color-neutral-0); /* card / container */
|
|
@@ -169,23 +170,27 @@
|
|
|
169
170
|
component fill, text and tint reads from these, so swapping them reskins the
|
|
170
171
|
whole catalog with no per-component edits. Primer/Spectrum-style aliasing.
|
|
171
172
|
|
|
172
|
-
|
|
173
|
+
Defaults below = today's Cabiros values (Royal solid, Sky accent), so these
|
|
174
|
+
are ADDITIVE — introducing them changes nothing until components migrate
|
|
175
|
+
(Phase 2). The two axes stay orthogonal:
|
|
173
176
|
• PRODUCT axis → matiz: this set + the brand/accent scales, logo, hero grad.
|
|
174
177
|
• THEME axis (light/dark) → surface ramp + tint intensity. NEVER matiz.
|
|
178
|
+
A product that needs a SURFACE token is not a sub-brand — it is a separate
|
|
179
|
+
system (see preview/theming.html for the full contract).
|
|
175
180
|
|
|
176
|
-
Brand = institutional / primary action. */
|
|
177
|
-
--color-brand-solid:
|
|
181
|
+
Brand = institutional / primary action (Royal). */
|
|
182
|
+
--color-brand-solid: var(--color-brand-primary-500); /* Enterprise primary — ATTRUS Navy #002142 (buttons, avatars, toggles, badges, hero) */
|
|
178
183
|
--color-brand-solid-hover: color-mix(in srgb, var(--color-pure-white) 12%, var(--color-brand-primary-500)); /* navy is near-ink → states LIGHTEN */
|
|
179
184
|
--color-brand-solid-active: color-mix(in srgb, var(--color-pure-white) 6%, var(--color-brand-primary-500));
|
|
180
|
-
--color-brand-text:
|
|
181
|
-
--color-brand-text-strong:
|
|
182
|
-
--color-brand-subtle:
|
|
185
|
+
--color-brand-text: var(--color-brand-primary-500); /* navy as text — 15:1 on white */
|
|
186
|
+
--color-brand-text-strong: var(--color-brand-primary-700); /* brand text pressed/emphasis */
|
|
187
|
+
--color-brand-subtle: color-mix(in srgb, var(--color-brand-primary-500) 12%, transparent); /* tints: brand chips, selected, tags */
|
|
183
188
|
--color-brand-subtle-solid: var(--color-brand-primary-50); /* opaque light brand tint: brand avatars, selected-row base */
|
|
184
|
-
--color-brand-border:
|
|
185
|
-
--color-brand-on-solid:
|
|
189
|
+
--color-brand-border: var(--color-brand-primary-200); /* light brand border: selected filter chips */
|
|
190
|
+
--color-brand-on-solid: var(--color-foreground-on-solid); /* text/icon on --color-brand-solid */
|
|
186
191
|
/* Accent = interactive / wayfinding (Sky). accent text = --color-foreground-accent. */
|
|
187
|
-
--color-accent-solid:
|
|
188
|
-
--color-accent-subtle:
|
|
192
|
+
--color-accent-solid: var(--color-brand-accent-500); /* tab/active indicator, focus ring */
|
|
193
|
+
--color-accent-subtle: color-mix(in srgb, var(--color-brand-accent-500) 14%, transparent); /* counts, pagination, accent chips */
|
|
189
194
|
|
|
190
195
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
191
196
|
INVERSE LAYER — contextual contrast surface, NOT dark theme
|
|
@@ -210,7 +215,7 @@
|
|
|
210
215
|
✗ Mixing inverse and surface tokens in the same component without intent
|
|
211
216
|
✗ Hard-coding #0B1230 / white instead of inverse tokens
|
|
212
217
|
───────────────────────────────────────────────────────────────────────── */
|
|
213
|
-
--color-background-inverse: color-mix(in srgb, var(--color-brand-solid) 16%, var(--color-ink-base)); /* product-tinted dark panel */
|
|
218
|
+
--color-background-inverse: color-mix(in srgb, var(--color-brand-solid) 16%, var(--color-ink-base)); /* product-tinted dark panel (Enterprise≈navy, Business≈blue) */
|
|
214
219
|
--color-background-inverse-surface: color-mix(in srgb, var(--color-brand-solid) 20%, var(--color-ink-raised));
|
|
215
220
|
--color-background-inverse-subtle: color-mix(in srgb, var(--color-brand-solid) 12%, var(--color-ink-deep));
|
|
216
221
|
--color-background-inverse-hover: var(--color-ink-hover);
|
|
@@ -300,63 +305,67 @@
|
|
|
300
305
|
--color-feedback-info-foreground-on-inverse-muted: color-mix(in srgb, var(--color-info-100) 70%, var(--color-foreground-inverse-muted));
|
|
301
306
|
}
|
|
302
307
|
|
|
303
|
-
/*
|
|
304
|
-
|
|
305
|
-
============================================================ */
|
|
308
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
309
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
306
310
|
|
|
307
|
-
/* Brand gradients — DERIVED from --color-brand-solid so they follow the
|
|
308
|
-
active product automatically (Enterprise Navy / Business Blue / …). The
|
|
309
|
-
var() resolves at use-site, so an element under [data-product] recomputes
|
|
310
|
-
these with that product's primary — no per-product override needed.
|
|
311
|
-
--grad-brand tips into the shared Sky accent. */
|
|
312
311
|
:root {
|
|
312
|
+
/* ============================================================
|
|
313
|
+
3. GRADIENTS — primary brand + layers
|
|
314
|
+
============================================================ */
|
|
315
|
+
/* Brand gradients — DERIVED from --color-brand-solid so they follow the
|
|
316
|
+
active product automatically (Enterprise Navy / Business Blue / …). The
|
|
317
|
+
var() resolves at use-site, so an element under [data-product] recomputes
|
|
318
|
+
these with that product's primary — no per-product override needed.
|
|
319
|
+
--grad-brand tips into the shared Sky accent. */
|
|
313
320
|
--grad-brand: linear-gradient(135deg,
|
|
314
321
|
color-mix(in srgb, var(--color-pure-black) 45%, var(--color-brand-solid)) 0%,
|
|
315
322
|
var(--color-brand-solid) 55%,
|
|
316
|
-
var(--color-accent-solid) 100%);
|
|
323
|
+
var(--color-accent-solid) 100%); /* @kind color */
|
|
317
324
|
--grad-brand-soft: linear-gradient(135deg,
|
|
318
325
|
var(--color-brand-solid) 0%,
|
|
319
|
-
color-mix(in srgb, var(--color-pure-black) 20%, var(--color-brand-solid)) 100%);
|
|
326
|
+
color-mix(in srgb, var(--color-pure-black) 20%, var(--color-brand-solid)) 100%); /* @kind color */
|
|
320
327
|
--grad-ink: linear-gradient(160deg,
|
|
321
328
|
color-mix(in srgb, var(--color-pure-black) 68%, var(--color-brand-solid)) 0%,
|
|
322
329
|
color-mix(in srgb, var(--color-pure-black) 45%, var(--color-brand-solid)) 55%,
|
|
323
|
-
color-mix(in srgb, var(--color-pure-black) 25%, var(--color-brand-solid)) 100%);
|
|
330
|
+
color-mix(in srgb, var(--color-pure-black) 25%, var(--color-brand-solid)) 100%); /* @kind color */
|
|
324
331
|
--grad-hero: linear-gradient(180deg,
|
|
325
332
|
color-mix(in srgb, var(--color-pure-black) 52%, var(--color-brand-solid)) 0%,
|
|
326
|
-
color-mix(in srgb, var(--color-pure-black) 18%, var(--color-brand-solid)) 100%);
|
|
333
|
+
color-mix(in srgb, var(--color-pure-black) 18%, var(--color-brand-solid)) 100%); /* @kind color */
|
|
327
334
|
--grad-sheen: linear-gradient(120deg,
|
|
328
335
|
color-mix(in srgb, var(--color-pure-white) 14%, transparent) 0%,
|
|
329
336
|
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 40%,
|
|
330
337
|
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 60%,
|
|
331
|
-
color-mix(in srgb, var(--color-pure-white) 8%, transparent) 100%);
|
|
338
|
+
color-mix(in srgb, var(--color-pure-white) 8%, transparent) 100%); /* @kind color */
|
|
332
339
|
--grad-surface-top: linear-gradient(180deg,
|
|
333
340
|
color-mix(in srgb, var(--color-pure-white) 65%, transparent) 0%,
|
|
334
|
-
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 100%);
|
|
341
|
+
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 100%); /* @kind color */
|
|
335
342
|
--grad-radial-glow: radial-gradient(1200px 500px at 20% -10%,
|
|
336
343
|
color-mix(in srgb, var(--color-accent-solid) 25%, transparent) 0%,
|
|
337
|
-
color-mix(in srgb, var(--color-accent-solid) 0%, transparent) 60%);
|
|
344
|
+
color-mix(in srgb, var(--color-accent-solid) 0%, transparent) 60%); /* @kind color */
|
|
338
345
|
--grad-data-pos: linear-gradient(180deg,
|
|
339
346
|
color-mix(in srgb, var(--color-success-500) 35%, transparent) 0%,
|
|
340
|
-
color-mix(in srgb, var(--color-success-500) 0%, transparent) 100%);
|
|
347
|
+
color-mix(in srgb, var(--color-success-500) 0%, transparent) 100%); /* @kind color */
|
|
341
348
|
--grad-data-neg: linear-gradient(180deg,
|
|
342
349
|
color-mix(in srgb, var(--color-danger-500) 35%, transparent) 0%,
|
|
343
|
-
color-mix(in srgb, var(--color-danger-500) 0%, transparent) 100%);
|
|
350
|
+
color-mix(in srgb, var(--color-danger-500) 0%, transparent) 100%); /* @kind color */
|
|
344
351
|
--grad-data-brand: linear-gradient(180deg,
|
|
345
352
|
color-mix(in srgb, var(--color-brand-accent-500) 30%, transparent) 0%,
|
|
346
|
-
color-mix(in srgb, var(--color-brand-accent-500) 0%, transparent) 100%);
|
|
353
|
+
color-mix(in srgb, var(--color-brand-accent-500) 0%, transparent) 100%); /* @kind color */
|
|
347
354
|
}
|
|
348
355
|
|
|
349
|
-
/*
|
|
350
|
-
|
|
351
|
-
Categorical = qualitative series (distinct, on-brand, cool).
|
|
352
|
-
Sequential = single-hue magnitude ramp (Sky).
|
|
353
|
-
Diverging = danger ← neutral → success (variance/heatmap).
|
|
354
|
-
Structure = grid / axis / track / reference (semantic → theme).
|
|
355
|
-
Categorical gets dark-theme overrides (lift the dark hues, in
|
|
356
|
-
theme-dark.css); ramps + structure follow semantic tokens.
|
|
357
|
-
============================================================ */
|
|
356
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
357
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
358
358
|
|
|
359
359
|
:root {
|
|
360
|
+
/* ============================================================
|
|
361
|
+
3b. DATA VISUALIZATION — chart palettes & structure
|
|
362
|
+
Categorical = qualitative series (distinct, on-brand, cool).
|
|
363
|
+
Sequential = single-hue magnitude ramp (Sky).
|
|
364
|
+
Diverging = danger ← neutral → success (variance/heatmap).
|
|
365
|
+
Structure = grid / axis / track / reference (semantic → theme).
|
|
366
|
+
Categorical gets dark-theme overrides (lift the dark hues);
|
|
367
|
+
ramps + structure follow semantic tokens automatically.
|
|
368
|
+
============================================================ */
|
|
360
369
|
/* Categorical — order chosen for max adjacent contrast */
|
|
361
370
|
--dataviz-cat-1: #003399; /* Royal — brand-anchored series 1 */
|
|
362
371
|
--dataviz-cat-2: #3399FF; /* Sky */
|
|
@@ -397,12 +406,14 @@
|
|
|
397
406
|
--dataviz-reference: var(--color-foreground-muted); /* dashed target/avg line */
|
|
398
407
|
}
|
|
399
408
|
|
|
400
|
-
/*
|
|
401
|
-
|
|
402
|
-
Use with backdrop-filter: blur().
|
|
403
|
-
============================================================ */
|
|
409
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
410
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
404
411
|
|
|
405
412
|
:root {
|
|
413
|
+
/* ============================================================
|
|
414
|
+
4. LIQUID GLASS — transparent / frosted layers
|
|
415
|
+
Use with backdrop-filter: blur().
|
|
416
|
+
============================================================ */
|
|
406
417
|
--glass-white: color-mix(in srgb, var(--color-pure-white) 58%, transparent);
|
|
407
418
|
--glass-white-hi: color-mix(in srgb, var(--color-pure-white) 78%, transparent);
|
|
408
419
|
--glass-white-lo: color-mix(in srgb, var(--color-pure-white) 38%, transparent);
|
|
@@ -410,19 +421,23 @@
|
|
|
410
421
|
--glass-ink: color-mix(in srgb, var(--color-background-inverse) 55%, transparent); /* dark navy */
|
|
411
422
|
--glass-ink-hi: color-mix(in srgb, var(--color-background-inverse) 78%, transparent);
|
|
412
423
|
--glass-ink-lo: color-mix(in srgb, var(--color-background-inverse) 35%, transparent);
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
--glass-
|
|
424
|
+
/* Theme-aware frosted chrome (drawer/modal header+footer): white glass in light,
|
|
425
|
+
ink glass in dark. Use this — NOT raw --glass-white — on themed chrome. */
|
|
426
|
+
--glass-chrome: var(--glass-white);
|
|
427
|
+
--glass-blur: saturate(140%) blur(18px); /* @kind other */
|
|
428
|
+
--glass-blur-sm: saturate(130%) blur(10px); /* @kind other */
|
|
429
|
+
--glass-blur-lg: saturate(160%) blur(28px); /* @kind other */
|
|
416
430
|
--glass-border: 1px solid color-mix(in srgb, var(--color-pure-white) 45%, transparent);
|
|
417
431
|
--glass-border-dark: 1px solid color-mix(in srgb, var(--color-pure-white) 10%, transparent);
|
|
418
432
|
}
|
|
419
433
|
|
|
420
|
-
/*
|
|
421
|
-
|
|
422
|
-
Mostly softly rounded; buttons fully rounded.
|
|
423
|
-
============================================================ */
|
|
434
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
435
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
424
436
|
|
|
425
437
|
:root {
|
|
438
|
+
/* ============================================================
|
|
439
|
+
5. RADII — mostly softly rounded; buttons fully rounded
|
|
440
|
+
============================================================ */
|
|
426
441
|
--radius-2xs: 2px; /* never-square minimum — tiny chips, ticks, dividers */
|
|
427
442
|
--radius-xs: 4px;
|
|
428
443
|
--radius-sm: 6px;
|
|
@@ -434,13 +449,27 @@
|
|
|
434
449
|
--radius-xl: 20px; /* hero / large panels */
|
|
435
450
|
--radius-2xl: 28px;
|
|
436
451
|
--radius-pill: 999px; /* BUTTONS — fully rounded */
|
|
452
|
+
|
|
453
|
+
/* ─────────────────────────────────────────────────────────────────────────
|
|
454
|
+
SHAPE — product axis (roundness of the product surface)
|
|
455
|
+
─────────────────────────────────────────────────────────────────────────
|
|
456
|
+
A product theme (`[data-product]`) may redefine these to read sharper or
|
|
457
|
+
softer — they PICK a step from the raw --radius-* scale (never a raw px),
|
|
458
|
+
so the scale stays the single source and the linter can enforce it.
|
|
459
|
+
Defaults below = today's values (value-preserving). Buttons stay pill by
|
|
460
|
+
deliberate brand stance (own token, not shape-themable here). */
|
|
461
|
+
--shape-control: var(--radius-sm); /* inputs, select, segmented, file trigger, number-input */
|
|
462
|
+
--shape-container: var(--radius-md); /* cards, stat tiles, table wrapper, toast, drawer-lead */
|
|
463
|
+
--shape-overlay: var(--radius-lg); /* modals, drawer panels, large surfaces */
|
|
437
464
|
}
|
|
438
465
|
|
|
439
|
-
/*
|
|
440
|
-
|
|
441
|
-
============================================================ */
|
|
466
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
467
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
442
468
|
|
|
443
469
|
:root {
|
|
470
|
+
/* ============================================================
|
|
471
|
+
6. SHADOWS — soft, blue-tinted, multi-layer
|
|
472
|
+
============================================================ */
|
|
444
473
|
--shadow-xs: 0 1px 2px color-mix(in srgb, var(--color-shadow-tint) 5%, transparent);
|
|
445
474
|
--shadow-sm: 0 1px 2px color-mix(in srgb, var(--color-shadow-tint) 6%, transparent),
|
|
446
475
|
0 2px 6px color-mix(in srgb, var(--color-shadow-tint) 4%, transparent);
|
|
@@ -484,12 +513,13 @@
|
|
|
484
513
|
0 10px 40px color-mix(in srgb, var(--color-pure-black) 35%, transparent);
|
|
485
514
|
}
|
|
486
515
|
|
|
487
|
-
/*
|
|
488
|
-
|
|
489
|
-
4px base; dense, data-heavy layouts.
|
|
490
|
-
============================================================ */
|
|
516
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
517
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
491
518
|
|
|
492
519
|
:root {
|
|
520
|
+
/* ============================================================
|
|
521
|
+
7. SPACING — 4px base; dense, data-heavy layouts
|
|
522
|
+
============================================================ */
|
|
493
523
|
--space-0: 0;
|
|
494
524
|
--space-1: 2px;
|
|
495
525
|
--space-2: 4px;
|
|
@@ -509,11 +539,13 @@
|
|
|
509
539
|
--space-16: 96px;
|
|
510
540
|
}
|
|
511
541
|
|
|
512
|
-
/*
|
|
513
|
-
|
|
514
|
-
============================================================ */
|
|
542
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
543
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
515
544
|
|
|
516
545
|
:root {
|
|
546
|
+
/* ============================================================
|
|
547
|
+
7b. ICONOGRAPHY — Lucide; sized to pair with type scale
|
|
548
|
+
============================================================ */
|
|
517
549
|
--icon-xs: 12px; /* helper text, micro caption (paired w/ 11–12px text) */
|
|
518
550
|
--icon-sm: 14px; /* input affix, dense inline (paired w/ 13px text) */
|
|
519
551
|
--icon-md: 16px; /* default — buttons, nav, body (paired w/ 14px text) */
|
|
@@ -521,54 +553,56 @@
|
|
|
521
553
|
--icon-xl: 24px; /* hero, empty states, splash (paired w/ 18+ text) */
|
|
522
554
|
|
|
523
555
|
/* Stroke widths — Lucide */
|
|
524
|
-
--icon-stroke: 1.75; /* default — slightly bolder than 1.5, calmer than 2 */
|
|
556
|
+
--icon-stroke: 1.75; /* @kind other */ /* default — slightly bolder than 1.5, calmer than 2 */
|
|
525
557
|
--icon-stroke-bold: 2; /* close buttons, X marks, indicators where weight matters */
|
|
526
558
|
--icon-stroke-thin: 1.5; /* decorative / large hero icons where 1.75 looks heavy */
|
|
527
559
|
}
|
|
528
560
|
|
|
529
|
-
/*
|
|
530
|
-
|
|
531
|
-
============================================================ */
|
|
561
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
562
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
532
563
|
|
|
533
564
|
:root {
|
|
565
|
+
/* ============================================================
|
|
566
|
+
7c. MOTION — durations + easings for transitions/animations
|
|
567
|
+
============================================================ */
|
|
534
568
|
/* Easing — single curve across the system; "out-expo-ish" for snappy UI */
|
|
535
|
-
--ease-standard: cubic-bezier(.2, .8, .2, 1);
|
|
536
|
-
--ease-emphasis: cubic-bezier(.2, .9, .15, 1); /* slightly more overshoot — for entries */
|
|
537
|
-
--ease-linear: linear; /* loading bars, scrubbers */
|
|
569
|
+
--ease-standard: cubic-bezier(.2, .8, .2, 1); /* @kind other */
|
|
570
|
+
--ease-emphasis: cubic-bezier(.2, .9, .15, 1); /* @kind other */ /* slightly more overshoot — for entries */
|
|
571
|
+
--ease-linear: linear; /* @kind other */ /* loading bars, scrubbers */
|
|
538
572
|
|
|
539
573
|
/* Durations — paired with --ease-standard unless noted */
|
|
540
|
-
--duration-instant: 80ms; /* micro feedback (tap echo) */
|
|
541
|
-
--duration-fast: 140ms; /* hover, focus, color shifts */
|
|
542
|
-
--duration-base: 200ms; /* default for most UI */
|
|
543
|
-
--duration-slow: 320ms; /* expansions, reveals */
|
|
544
|
-
--duration-slower: 480ms; /* page-level transitions */
|
|
545
|
-
--duration-deliberate: 640ms; /* overlays — modal/drawer entry */
|
|
574
|
+
--duration-instant: 80ms; /* @kind other */ /* micro feedback (tap echo) */
|
|
575
|
+
--duration-fast: 140ms; /* @kind other */ /* hover, focus, color shifts */
|
|
576
|
+
--duration-base: 200ms; /* @kind other */ /* default for most UI */
|
|
577
|
+
--duration-slow: 320ms; /* @kind other */ /* expansions, reveals */
|
|
578
|
+
--duration-slower: 480ms; /* @kind other */ /* page-level transitions */
|
|
579
|
+
--duration-deliberate: 640ms; /* @kind other */ /* overlays — modal/drawer entry */
|
|
546
580
|
|
|
547
581
|
/* Pre-composed transition shorthand (most common cases) */
|
|
548
|
-
--transition-fast: 140ms var(--ease-standard); /* default for buttons/inputs */
|
|
549
|
-
--transition-base: 200ms var(--ease-standard);
|
|
550
|
-
--transition-slow: 320ms var(--ease-standard);
|
|
582
|
+
--transition-fast: 140ms var(--ease-standard); /* @kind other */ /* default for buttons/inputs */
|
|
583
|
+
--transition-base: 200ms var(--ease-standard); /* @kind other */
|
|
584
|
+
--transition-slow: 320ms var(--ease-standard); /* @kind other */
|
|
551
585
|
}
|
|
552
586
|
|
|
553
|
-
/*
|
|
554
|
-
|
|
555
|
-
Font families, weights, type scale, line heights, letter spacing.
|
|
556
|
-
Ready-to-use type CLASSES live in ../typography/index.css.
|
|
557
|
-
============================================================ */
|
|
587
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
588
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
558
589
|
|
|
559
590
|
:root {
|
|
591
|
+
/* ============================================================
|
|
592
|
+
8. TYPOGRAPHY — Lato family per brand manual
|
|
593
|
+
============================================================ */
|
|
560
594
|
--font-sans: 'Lato', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
561
595
|
--font-mono: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
562
596
|
--font-display: 'Lato', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
563
597
|
|
|
564
598
|
/* Weights (per manual) */
|
|
565
|
-
--w-light: 300;
|
|
566
|
-
--w-regular: 400;
|
|
567
|
-
--w-medium: 500; /* Lato doesn't ship 500 natively; maps to 400 */
|
|
568
|
-
--w-semibold: 600;
|
|
569
|
-
--w-bold: 700;
|
|
570
|
-
--w-extrabold: 800;
|
|
571
|
-
--w-black: 900;
|
|
599
|
+
--w-light: 300; /* @kind font */
|
|
600
|
+
--w-regular: 400; /* @kind font */
|
|
601
|
+
--w-medium: 500; /* @kind font */ /* Lato doesn't ship 500 natively; maps to 400 */
|
|
602
|
+
--w-semibold: 600; /* @kind font */
|
|
603
|
+
--w-bold: 700; /* @kind font */
|
|
604
|
+
--w-extrabold: 800; /* @kind font */
|
|
605
|
+
--w-black: 900; /* @kind font */
|
|
572
606
|
|
|
573
607
|
/* Type scale (px) */
|
|
574
608
|
--fs-xxs: 10px;
|
|
@@ -587,31 +621,22 @@
|
|
|
587
621
|
--fs-8xl: 72px;
|
|
588
622
|
|
|
589
623
|
/* Line heights */
|
|
590
|
-
--lh-tight: 1.15;
|
|
591
|
-
--lh-snug: 1.3;
|
|
592
|
-
--lh-normal: 1.5;
|
|
593
|
-
--lh-relaxed: 1.65;
|
|
624
|
+
--lh-tight: 1.15; /* @kind font */
|
|
625
|
+
--lh-snug: 1.3; /* @kind font */
|
|
626
|
+
--lh-normal: 1.5; /* @kind font */
|
|
627
|
+
--lh-relaxed: 1.65; /* @kind font */
|
|
594
628
|
|
|
595
629
|
/* Letter spacing — per Lato manual rules */
|
|
596
|
-
--ls-display: -0.03em; /* 32–80px headlines */
|
|
597
|
-
--ls-tight: -0.01em; /* large numerics / stat values — between display and body */
|
|
598
|
-
--ls-title: -0.015em; /* 16–32px titles (manual says -5%, but -5% looks tight on screens; using -1.5%) */
|
|
599
|
-
--ls-body: 0em; /* <16px body */
|
|
600
|
-
--ls-label: 0.02em; /* small caps / labels */
|
|
601
|
-
--ls-caps: 0.08em;
|
|
630
|
+
--ls-display: -0.03em; /* @kind font */ /* 32–80px headlines */
|
|
631
|
+
--ls-tight: -0.01em; /* @kind font */ /* large numerics / stat values — between display and body */
|
|
632
|
+
--ls-title: -0.015em; /* @kind font */ /* 16–32px titles (manual says -5%, but -5% looks tight on screens; using -1.5%) */
|
|
633
|
+
--ls-body: 0em; /* @kind font */ /* <16px body */
|
|
634
|
+
--ls-label: 0.02em; /* @kind font */ /* small caps / labels */
|
|
635
|
+
--ls-caps: 0.08em; /* @kind font */
|
|
602
636
|
}
|
|
603
637
|
|
|
604
|
-
/*
|
|
605
|
-
|
|
606
|
-
[data-theme="dark"] remaps the AMBIENT semantic tokens to a dark
|
|
607
|
-
ink ramp. Components consume semantic tokens, so they flip
|
|
608
|
-
automatically — no per-component dark CSS needed.
|
|
609
|
-
Philosophy: the INVERSE layer stays a deliberate, brand-tinted
|
|
610
|
-
dark even here (see note in color-semantic.css), distinct from the
|
|
611
|
-
ambient surface. Raw palette + brand/accent scales are theme-agnostic.
|
|
612
|
-
Toggle via JS: set data-theme on <html>, persist to localStorage,
|
|
613
|
-
seed from prefers-color-scheme.
|
|
614
|
-
============================================================ */
|
|
638
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
639
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
615
640
|
|
|
616
641
|
[data-theme="dark"] {
|
|
617
642
|
color-scheme: dark;
|
|
@@ -670,7 +695,9 @@
|
|
|
670
695
|
--color-feedback-info-border: color-mix(in srgb, var(--color-info-500) 34%, transparent);
|
|
671
696
|
|
|
672
697
|
/* Surface-top sheen reads wrong on dark → neutralize */
|
|
673
|
-
--grad-surface-top: linear-gradient(180deg, color-mix(in srgb, var(--color-pure-white) 6%, transparent) 0%, transparent 100%);
|
|
698
|
+
--grad-surface-top: linear-gradient(180deg, color-mix(in srgb, var(--color-pure-white) 6%, transparent) 0%, transparent 100%); /* @kind color */
|
|
699
|
+
/* Frosted chrome flips to ink glass on dark (drawer/modal header+footer) */
|
|
700
|
+
--glass-chrome: var(--glass-ink);
|
|
674
701
|
|
|
675
702
|
/* Data-viz categorical — lift the dark hues so every series reads on dark ink.
|
|
676
703
|
Ramps (seq/div) + structure follow the semantic tokens already remapped above. */
|
|
@@ -684,10 +711,11 @@
|
|
|
684
711
|
--dataviz-cat-8: #A6B0C4; /* Slate, lightened */
|
|
685
712
|
}
|
|
686
713
|
|
|
714
|
+
/* AUTO-GENERATED by tools/sync-to-ds.cjs from Cabiros/colors_and_type.css.
|
|
715
|
+
Edit the source there, then re-run the sync — do not hand-edit this file. */
|
|
716
|
+
|
|
687
717
|
/* ============================================================
|
|
688
|
-
|
|
689
|
-
Base document styles + the display/heading/body/utility classes.
|
|
690
|
-
Consumes typography + color tokens (see ../tokens).
|
|
718
|
+
9. SEMANTIC TYPE CLASSES — ready-to-use
|
|
691
719
|
============================================================ */
|
|
692
720
|
|
|
693
721
|
html, body {
|
|
@@ -740,3 +768,34 @@ h6, .h6 { font-weight: var(--w-semibold); font-size: var(--fs-lg); line-height:
|
|
|
740
768
|
.inverse .color-foreground-muted { color: var(--color-foreground-inverse-muted); }
|
|
741
769
|
.inverse .fg-accent { color: var(--color-foreground-inverse-accent); }
|
|
742
770
|
|
|
771
|
+
|
|
772
|
+
/* ---- doc-back link (fixed top-left on every preview page) ---- */
|
|
773
|
+
.doc-back {
|
|
774
|
+
position: fixed;
|
|
775
|
+
top: var(--space-5);
|
|
776
|
+
left: var(--space-5);
|
|
777
|
+
z-index: 1000;
|
|
778
|
+
display: inline-flex;
|
|
779
|
+
align-items: center;
|
|
780
|
+
gap: var(--space-2);
|
|
781
|
+
font-family: var(--font-sans);
|
|
782
|
+
font-size: var(--fs-sm);
|
|
783
|
+
font-weight: var(--w-semibold);
|
|
784
|
+
letter-spacing: 0;
|
|
785
|
+
text-transform: none;
|
|
786
|
+
color: var(--color-foreground-default);
|
|
787
|
+
text-decoration: none;
|
|
788
|
+
padding: var(--space-3) var(--space-4);
|
|
789
|
+
border: 1px solid var(--color-border-default);
|
|
790
|
+
border-radius: var(--radius-pill);
|
|
791
|
+
background: var(--color-background-surface);
|
|
792
|
+
box-shadow: var(--shadow-sm);
|
|
793
|
+
transition: var(--transition-fast);
|
|
794
|
+
}
|
|
795
|
+
.doc-back:hover {
|
|
796
|
+
color: var(--color-foreground-default);
|
|
797
|
+
border-color: var(--color-border-strong);
|
|
798
|
+
box-shadow: var(--shadow-md);
|
|
799
|
+
}
|
|
800
|
+
.doc-back svg, .doc-back i { width: 18px; height: 18px; stroke-width: var(--icon-stroke); }
|
|
801
|
+
|
package/package.json
CHANGED