@attrus-ds/core 0.3.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -132,13 +132,13 @@
|
|
|
132
132
|
4. VARIANTS
|
|
133
133
|
---------------------------------------------------------------- */
|
|
134
134
|
|
|
135
|
-
/* PRIMARY — brand
|
|
135
|
+
/* PRIMARY — brand solid */
|
|
136
136
|
.btn-primary {
|
|
137
|
-
background: var(--color-brand-
|
|
138
|
-
color: var(--color-
|
|
137
|
+
background: var(--color-brand-solid);
|
|
138
|
+
color: var(--color-brand-on-solid);
|
|
139
139
|
}
|
|
140
|
-
.btn-primary:hover { background: var(--color-brand-
|
|
141
|
-
.btn-primary:active { background: var(--color-brand-
|
|
140
|
+
.btn-primary:hover { background: var(--color-brand-solid-hover); }
|
|
141
|
+
.btn-primary:active { background: var(--color-brand-solid-active); }
|
|
142
142
|
.btn-primary:focus-visible { box-shadow: var(--shadow-focus); }
|
|
143
143
|
|
|
144
144
|
|
|
@@ -184,8 +184,8 @@
|
|
|
184
184
|
border-radius: var(--radius-2xs);
|
|
185
185
|
text-decoration: none;
|
|
186
186
|
}
|
|
187
|
-
.btn-link:hover { color: var(--color-brand-
|
|
188
|
-
.btn-link:active { color: var(--color-brand-
|
|
187
|
+
.btn-link:hover { color: var(--color-brand-text); text-decoration: underline; text-underline-offset: 2px; }
|
|
188
|
+
.btn-link:active { color: var(--color-brand-text-strong); }
|
|
189
189
|
.btn-link:focus-visible { box-shadow: var(--shadow-focus); }
|
|
190
190
|
|
|
191
191
|
|
|
@@ -223,9 +223,9 @@
|
|
|
223
223
|
/* INVERSE — white pill on dark/brand surfaces */
|
|
224
224
|
.btn-inverse {
|
|
225
225
|
background: var(--color-pure-white);
|
|
226
|
-
color: var(--color-brand-
|
|
226
|
+
color: var(--color-brand-text);
|
|
227
227
|
}
|
|
228
|
-
.btn-inverse:hover { background: var(--color-neutral-100); color: var(--color-brand-
|
|
228
|
+
.btn-inverse:hover { background: var(--color-neutral-100); color: var(--color-brand-text-strong); }
|
|
229
229
|
.btn-inverse:active { background: var(--color-neutral-150); }
|
|
230
230
|
.btn-inverse:focus-visible { box-shadow: var(--shadow-focus-sky); }
|
|
231
231
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
display: block;
|
|
13
13
|
background: var(--color-background-surface);
|
|
14
14
|
border: 1px solid var(--color-border-default);
|
|
15
|
-
border-radius: var(--
|
|
15
|
+
border-radius: var(--shape-container);
|
|
16
16
|
box-shadow: var(--shadow-xs);
|
|
17
17
|
color: var(--color-foreground-default);
|
|
18
18
|
font-family: var(--font-sans);
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
height: 40px;
|
|
104
104
|
padding: 0 var(--space-4);
|
|
105
105
|
border: 1px solid var(--color-border-default);
|
|
106
|
-
border-radius: var(--
|
|
106
|
+
border-radius: var(--shape-control);
|
|
107
107
|
background: var(--color-background-surface);
|
|
108
108
|
color: var(--color-foreground-default);
|
|
109
109
|
|
|
@@ -241,7 +241,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
241
241
|
width: 100%;
|
|
242
242
|
height: 40px;
|
|
243
243
|
border: 1px solid var(--color-border-default);
|
|
244
|
-
border-radius: var(--
|
|
244
|
+
border-radius: var(--shape-control);
|
|
245
245
|
background: var(--color-background-surface);
|
|
246
246
|
overflow: hidden;
|
|
247
247
|
transition:
|
|
@@ -366,7 +366,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
366
366
|
min-height: 40px;
|
|
367
367
|
padding: 5px 8px;
|
|
368
368
|
border: 1px solid var(--color-border-default);
|
|
369
|
-
border-radius: var(--
|
|
369
|
+
border-radius: var(--shape-control);
|
|
370
370
|
background: var(--color-background-surface);
|
|
371
371
|
transition:
|
|
372
372
|
border-color var(--transition-fast),
|
|
@@ -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(--
|
|
472
|
+
border-radius: var(--shape-container);
|
|
473
473
|
outline: none;
|
|
474
474
|
background: var(--color-background-surface);
|
|
475
475
|
color: var(--color-foreground-default);
|
|
@@ -510,7 +510,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
510
510
|
transition: transform var(--transition-base);
|
|
511
511
|
}
|
|
512
512
|
.switch input { position: absolute; opacity: 0; pointer-events: none; }
|
|
513
|
-
.switch input:checked ~ .switch-track { background: var(--color-brand-
|
|
513
|
+
.switch input:checked ~ .switch-track { background: var(--color-brand-solid); }
|
|
514
514
|
.switch input:checked ~ .switch-track .switch-thumb { transform: translateX(16px); }
|
|
515
515
|
.switch input:focus-visible ~ .switch-track { box-shadow: var(--shadow-focus); }
|
|
516
516
|
.switch input:disabled ~ .switch-track { opacity: 0.5; cursor: not-allowed; }
|
|
@@ -553,13 +553,13 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
553
553
|
}
|
|
554
554
|
.check-box svg { width: 14px; height: 14px; stroke-width: 3; opacity: 0; transform: scale(0.8); transition: opacity var(--transition-fast), transform var(--transition-fast); }
|
|
555
555
|
.check input:checked ~ .check-box {
|
|
556
|
-
background: var(--color-brand-
|
|
557
|
-
border-color: var(--color-brand-
|
|
556
|
+
background: var(--color-brand-solid);
|
|
557
|
+
border-color: var(--color-brand-solid);
|
|
558
558
|
}
|
|
559
559
|
.check input:checked ~ .check-box svg { opacity: 1; transform: scale(1); }
|
|
560
560
|
.check input:indeterminate ~ .check-box {
|
|
561
|
-
background: var(--color-brand-
|
|
562
|
-
border-color: var(--color-brand-
|
|
561
|
+
background: var(--color-brand-solid);
|
|
562
|
+
border-color: var(--color-brand-solid);
|
|
563
563
|
}
|
|
564
564
|
.check input:indeterminate ~ .check-box::after {
|
|
565
565
|
content: '';
|
|
@@ -607,11 +607,11 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
607
607
|
width: 8px;
|
|
608
608
|
height: 8px;
|
|
609
609
|
border-radius: var(--radius-pill);
|
|
610
|
-
background: var(--color-brand-
|
|
610
|
+
background: var(--color-brand-solid);
|
|
611
611
|
transform: scale(0);
|
|
612
612
|
transition: transform var(--transition-fast);
|
|
613
613
|
}
|
|
614
|
-
.radio input:checked ~ .radio-dot { border-color: var(--color-brand-
|
|
614
|
+
.radio input:checked ~ .radio-dot { border-color: var(--color-brand-solid); }
|
|
615
615
|
.radio input:checked ~ .radio-dot::after { transform: scale(1); }
|
|
616
616
|
.radio input:focus-visible ~ .radio-dot { box-shadow: var(--shadow-focus); }
|
|
617
617
|
.radio input:disabled ~ .radio-dot { opacity: 0.5; cursor: not-allowed; }
|
|
@@ -629,7 +629,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
629
629
|
height: 40px;
|
|
630
630
|
padding: 0 var(--space-4);
|
|
631
631
|
border: 1px solid var(--color-border-default);
|
|
632
|
-
border-radius: var(--
|
|
632
|
+
border-radius: var(--shape-control);
|
|
633
633
|
background: var(--color-background-surface);
|
|
634
634
|
color: var(--color-foreground-default);
|
|
635
635
|
font-family: var(--font-sans);
|
|
@@ -739,7 +739,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
739
739
|
cursor: pointer;
|
|
740
740
|
transition: color var(--transition-fast);
|
|
741
741
|
}
|
|
742
|
-
.file-list-action:hover { color: var(--color-brand-
|
|
742
|
+
.file-list-action:hover { color: var(--color-brand-text); }
|
|
743
743
|
|
|
744
744
|
.file-rows {
|
|
745
745
|
list-style: none;
|
|
@@ -771,9 +771,9 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
771
771
|
color: var(--color-foreground-muted);
|
|
772
772
|
}
|
|
773
773
|
.file-icon[data-kind="pdf"] { background: color-mix(in srgb, var(--color-danger-500) 8%, var(--color-background-surface)); color: var(--color-feedback-danger-foreground); }
|
|
774
|
-
.file-icon[data-kind="img"] { background: color-mix(in srgb, var(--color-brand-
|
|
774
|
+
.file-icon[data-kind="img"] { background: color-mix(in srgb, var(--color-brand-solid) 8%, var(--color-background-surface)); color: var(--color-brand-text); }
|
|
775
775
|
.file-icon[data-kind="csv"] { background: color-mix(in srgb, var(--color-success-500) 8%, var(--color-background-surface)); color: var(--color-feedback-success-foreground); }
|
|
776
|
-
.file-icon[data-kind="doc"] { background: color-mix(in srgb, var(--color-brand-
|
|
776
|
+
.file-icon[data-kind="doc"] { background: color-mix(in srgb, var(--color-brand-solid) 10%, var(--color-background-surface)); color: var(--color-brand-text); }
|
|
777
777
|
|
|
778
778
|
.file-icon-tag {
|
|
779
779
|
position: absolute;
|
|
@@ -823,7 +823,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
823
823
|
.file-progress > span {
|
|
824
824
|
display: block;
|
|
825
825
|
height: 100%;
|
|
826
|
-
background: var(--color-brand-
|
|
826
|
+
background: var(--color-brand-solid);
|
|
827
827
|
border-radius: inherit;
|
|
828
828
|
transition: width var(--transition-fast);
|
|
829
829
|
}
|
|
@@ -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-
|
|
845
|
+
.file-status.pending { color: var(--color-brand-text); background: var(--color-brand-subtle); }
|
|
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 {
|
|
@@ -889,7 +889,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
889
889
|
width: 18px;
|
|
890
890
|
height: 18px;
|
|
891
891
|
border-radius: var(--radius-pill);
|
|
892
|
-
background: var(--color-brand-
|
|
892
|
+
background: var(--color-brand-solid);
|
|
893
893
|
border: 2px solid var(--color-pure-white);
|
|
894
894
|
box-shadow: 0 1px 4px color-mix(in srgb, var(--color-shadow-tint) 22%, transparent);
|
|
895
895
|
margin-top: -7px;
|
|
@@ -899,7 +899,7 @@ textarea.input.input-lg { height: auto; min-height: 120px; padding: var(--space-
|
|
|
899
899
|
width: 18px;
|
|
900
900
|
height: 18px;
|
|
901
901
|
border-radius: var(--radius-pill);
|
|
902
|
-
background: var(--color-brand-
|
|
902
|
+
background: var(--color-brand-solid);
|
|
903
903
|
border: 2px solid var(--color-pure-white);
|
|
904
904
|
box-shadow: 0 1px 4px color-mix(in srgb, var(--color-shadow-tint) 22%, transparent);
|
|
905
905
|
}
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
right: var(--space-3);
|
|
58
58
|
bottom: 0;
|
|
59
59
|
height: 2px;
|
|
60
|
-
background: var(--color-
|
|
60
|
+
background: var(--color-accent-solid);
|
|
61
61
|
border-radius: var(--radius-xs) var(--radius-xs) 0 0;
|
|
62
62
|
}
|
|
63
63
|
.tab:focus-visible {
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
}
|
|
84
84
|
.tab[aria-selected="true"] .tab-count,
|
|
85
85
|
.tab.is-active .tab-count {
|
|
86
|
-
background:
|
|
86
|
+
background: var(--color-accent-subtle);
|
|
87
87
|
color: var(--color-foreground-accent);
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
height: 2px;
|
|
235
235
|
width: var(--ind-w, 0);
|
|
236
236
|
transform: translateX(var(--ind-x, 0));
|
|
237
|
-
background: var(--color-
|
|
237
|
+
background: var(--color-accent-solid);
|
|
238
238
|
border-radius: var(--radius-xs) var(--radius-xs) 0 0;
|
|
239
239
|
pointer-events: none;
|
|
240
240
|
transition: transform var(--duration-base) var(--ease-emphasis),
|
package/dist/css/tokens.css
CHANGED
|
@@ -160,7 +160,32 @@
|
|
|
160
160
|
--color-background-sunken: var(--color-neutral-100); /* inputs, wells */
|
|
161
161
|
--color-background-hover: var(--color-neutral-100);
|
|
162
162
|
--color-background-press: var(--color-neutral-150);
|
|
163
|
-
--color-background-selected: var(--color-brand-
|
|
163
|
+
--color-background-selected: var(--color-brand-subtle-solid); /* product-aware via brand-subtle-solid (dark theme overrides below) */
|
|
164
|
+
|
|
165
|
+
/* ─────────────────────────────────────────────────────────────────────────
|
|
166
|
+
THEMING SURFACE — product axis (semantic brand/accent tokens)
|
|
167
|
+
─────────────────────────────────────────────────────────────────────────
|
|
168
|
+
A product theme (`[data-product="…"]`) redefines ONLY this short set; every
|
|
169
|
+
component fill, text and tint reads from these, so swapping them reskins the
|
|
170
|
+
whole catalog with no per-component edits. Primer/Spectrum-style aliasing.
|
|
171
|
+
|
|
172
|
+
The two axes stay orthogonal:
|
|
173
|
+
• PRODUCT axis → matiz: this set + the brand/accent scales, logo, hero grad.
|
|
174
|
+
• THEME axis (light/dark) → surface ramp + tint intensity. NEVER matiz.
|
|
175
|
+
|
|
176
|
+
Brand = institutional / primary action. */
|
|
177
|
+
--color-brand-solid: var(--color-brand-primary-500); /* Enterprise primary — ATTRUS Navy #002142 (buttons, avatars, toggles, badges, hero) */
|
|
178
|
+
--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
|
+
--color-brand-solid-active: color-mix(in srgb, var(--color-pure-white) 6%, var(--color-brand-primary-500));
|
|
180
|
+
--color-brand-text: var(--color-brand-primary-500); /* navy as text — 15:1 on white */
|
|
181
|
+
--color-brand-text-strong: var(--color-brand-primary-700); /* brand text pressed/emphasis */
|
|
182
|
+
--color-brand-subtle: color-mix(in srgb, var(--color-brand-primary-500) 12%, transparent); /* tints: brand chips, selected, tags */
|
|
183
|
+
--color-brand-subtle-solid: var(--color-brand-primary-50); /* opaque light brand tint: brand avatars, selected-row base */
|
|
184
|
+
--color-brand-border: var(--color-brand-primary-200); /* light brand border: selected filter chips */
|
|
185
|
+
--color-brand-on-solid: var(--color-foreground-on-solid); /* text/icon on --color-brand-solid */
|
|
186
|
+
/* Accent = interactive / wayfinding (Sky). accent text = --color-foreground-accent. */
|
|
187
|
+
--color-accent-solid: var(--color-brand-accent-500); /* tab/active indicator, focus ring */
|
|
188
|
+
--color-accent-subtle: color-mix(in srgb, var(--color-brand-accent-500) 14%, transparent); /* counts, pagination, accent chips */
|
|
164
189
|
|
|
165
190
|
/* ─────────────────────────────────────────────────────────────────────────
|
|
166
191
|
INVERSE LAYER — contextual contrast surface, NOT dark theme
|
|
@@ -185,9 +210,9 @@
|
|
|
185
210
|
✗ Mixing inverse and surface tokens in the same component without intent
|
|
186
211
|
✗ Hard-coding #0B1230 / white instead of inverse tokens
|
|
187
212
|
───────────────────────────────────────────────────────────────────────── */
|
|
188
|
-
--color-background-inverse: var(--color-ink-base);
|
|
189
|
-
--color-background-inverse-surface: var(--color-ink-raised);
|
|
190
|
-
--color-background-inverse-subtle: var(--color-ink-deep);
|
|
213
|
+
--color-background-inverse: color-mix(in srgb, var(--color-brand-solid) 16%, var(--color-ink-base)); /* product-tinted dark panel */
|
|
214
|
+
--color-background-inverse-surface: color-mix(in srgb, var(--color-brand-solid) 20%, var(--color-ink-raised));
|
|
215
|
+
--color-background-inverse-subtle: color-mix(in srgb, var(--color-brand-solid) 12%, var(--color-ink-deep));
|
|
191
216
|
--color-background-inverse-hover: var(--color-ink-hover);
|
|
192
217
|
|
|
193
218
|
/* Scrim — modal/drawer/sheet backdrop. Same in light and dark themes.
|
|
@@ -197,8 +222,8 @@
|
|
|
197
222
|
--color-scrim: rgba(10, 15, 31, 0.32);
|
|
198
223
|
--scrim-blur: 6px;
|
|
199
224
|
--color-background-inverse-press: color-mix(in srgb, var(--color-ink-hover) 70%, var(--color-pure-white));
|
|
200
|
-
--color-background-inverse-selected: color-mix(in srgb, var(--color-brand-
|
|
201
|
-
--color-background-inverse-brand: var(--color-brand-
|
|
225
|
+
--color-background-inverse-selected: color-mix(in srgb, var(--color-brand-solid) 22%, var(--color-ink-base));
|
|
226
|
+
--color-background-inverse-brand: var(--color-brand-solid); /* CTA / hero with brand weight — follows product */
|
|
202
227
|
|
|
203
228
|
/* Foreground (text + icons) on LIGHT surfaces */
|
|
204
229
|
--color-foreground-default: var(--color-neutral-800); /* primary copy / headings */
|
|
@@ -224,8 +249,8 @@
|
|
|
224
249
|
--color-border-subtle: var(--color-neutral-100);
|
|
225
250
|
--color-border-default: var(--color-neutral-150);
|
|
226
251
|
--color-border-strong: var(--color-neutral-200);
|
|
227
|
-
--color-border-focus: var(--color-
|
|
228
|
-
--color-border-accent: var(--color-
|
|
252
|
+
--color-border-focus: var(--color-accent-solid); /* per-theme accent (Sky default) — follows the product's accent */
|
|
253
|
+
--color-border-accent: var(--color-accent-solid);
|
|
229
254
|
--color-border-success: var(--color-success-500);
|
|
230
255
|
--color-border-warning: var(--color-warning-500);
|
|
231
256
|
--color-border-danger: var(--color-danger-500);
|
|
@@ -279,11 +304,26 @@
|
|
|
279
304
|
ATTRUS / Cabiros — GRADIENTS (primary brand + layers)
|
|
280
305
|
============================================================ */
|
|
281
306
|
|
|
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. */
|
|
282
312
|
:root {
|
|
283
|
-
--grad-brand: linear-gradient(135deg,
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
313
|
+
--grad-brand: linear-gradient(135deg,
|
|
314
|
+
color-mix(in srgb, var(--color-pure-black) 45%, var(--color-brand-solid)) 0%,
|
|
315
|
+
var(--color-brand-solid) 55%,
|
|
316
|
+
var(--color-accent-solid) 100%);
|
|
317
|
+
--grad-brand-soft: linear-gradient(135deg,
|
|
318
|
+
var(--color-brand-solid) 0%,
|
|
319
|
+
color-mix(in srgb, var(--color-pure-black) 20%, var(--color-brand-solid)) 100%);
|
|
320
|
+
--grad-ink: linear-gradient(160deg,
|
|
321
|
+
color-mix(in srgb, var(--color-pure-black) 68%, var(--color-brand-solid)) 0%,
|
|
322
|
+
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%);
|
|
324
|
+
--grad-hero: linear-gradient(180deg,
|
|
325
|
+
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%);
|
|
287
327
|
--grad-sheen: linear-gradient(120deg,
|
|
288
328
|
color-mix(in srgb, var(--color-pure-white) 14%, transparent) 0%,
|
|
289
329
|
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 40%,
|
|
@@ -293,8 +333,8 @@
|
|
|
293
333
|
color-mix(in srgb, var(--color-pure-white) 65%, transparent) 0%,
|
|
294
334
|
color-mix(in srgb, var(--color-pure-white) 0%, transparent) 100%);
|
|
295
335
|
--grad-radial-glow: radial-gradient(1200px 500px at 20% -10%,
|
|
296
|
-
color-mix(in srgb, var(--color-
|
|
297
|
-
color-mix(in srgb, var(--color-
|
|
336
|
+
color-mix(in srgb, var(--color-accent-solid) 25%, transparent) 0%,
|
|
337
|
+
color-mix(in srgb, var(--color-accent-solid) 0%, transparent) 60%);
|
|
298
338
|
--grad-data-pos: linear-gradient(180deg,
|
|
299
339
|
color-mix(in srgb, var(--color-success-500) 35%, transparent) 0%,
|
|
300
340
|
color-mix(in srgb, var(--color-success-500) 0%, transparent) 100%);
|
|
@@ -412,7 +452,7 @@
|
|
|
412
452
|
0 32px 80px color-mix(in srgb, var(--color-shadow-tint) 18%, transparent);
|
|
413
453
|
--shadow-2xl: 0 24px 48px color-mix(in srgb, var(--color-shadow-tint) 14%, transparent),
|
|
414
454
|
0 48px 120px color-mix(in srgb, var(--color-shadow-tint) 24%, transparent); /* deepest — modals, drawers, floating overlays above scrim */
|
|
415
|
-
--shadow-focus: 0 0 0 4px color-mix(in srgb, var(--color-
|
|
455
|
+
--shadow-focus: 0 0 0 4px color-mix(in srgb, var(--color-accent-solid) 22%, transparent); /* per-theme accent */
|
|
416
456
|
--shadow-focus-sky: 0 0 0 4px color-mix(in srgb, var(--color-brand-accent-500) 25%, transparent);
|
|
417
457
|
--shadow-focus-success: 0 0 0 4px color-mix(in srgb, var(--color-success-500) 22%, transparent);
|
|
418
458
|
--shadow-focus-warning: 0 0 0 4px color-mix(in srgb, var(--color-warning-500) 22%, transparent);
|
|
@@ -586,10 +626,17 @@
|
|
|
586
626
|
--color-background-press: color-mix(in srgb, var(--color-pure-white) 10%, var(--color-ink-raised));
|
|
587
627
|
--color-background-selected: var(--color-background-inverse-selected);
|
|
588
628
|
|
|
629
|
+
/* Enterprise primary is Navy (#002142) — near-ink, so it vanishes as a solid
|
|
630
|
+
fill on the dark canvas. Lift it to a visible deep-blue in dark (Business,
|
|
631
|
+
via [data-product=business], re-asserts its own #1F6FD6 and wins by order). */
|
|
632
|
+
--color-brand-solid: var(--color-brand-primary-400); /* #2F4F75 — reads on ink */
|
|
633
|
+
--color-brand-solid-hover: var(--color-brand-primary-300); /* #5F7596 */
|
|
634
|
+
--color-brand-solid-active: var(--color-brand-primary-500); /* settles to navy */
|
|
635
|
+
|
|
589
636
|
/* Inverse layer — stays distinct: a brand-tinted dark, lifted off the ambient ink */
|
|
590
|
-
--color-background-inverse: color-mix(in srgb, var(--color-brand-
|
|
591
|
-
--color-background-inverse-surface: color-mix(in srgb, var(--color-brand-
|
|
592
|
-
--color-background-inverse-subtle: color-mix(in srgb, var(--color-brand-
|
|
637
|
+
--color-background-inverse: color-mix(in srgb, var(--color-brand-solid) 24%, var(--color-ink-base));
|
|
638
|
+
--color-background-inverse-surface: color-mix(in srgb, var(--color-brand-solid) 30%, var(--color-ink-raised));
|
|
639
|
+
--color-background-inverse-subtle: color-mix(in srgb, var(--color-brand-solid) 18%, var(--color-ink-deep));
|
|
593
640
|
|
|
594
641
|
/* Foreground — light on dark */
|
|
595
642
|
--color-foreground-default: var(--color-neutral-50);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@attrus-ds/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "ATTRUS / Cabiros design system — design tokens, component styles, brand assets, fonts and an optional typed React component layer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design-system",
|
|
@@ -38,6 +38,8 @@
|
|
|
38
38
|
"./fonts.css": "./dist/css/fonts.css",
|
|
39
39
|
"./tokens.json": "./dist/tokens/attrus-tokens.json",
|
|
40
40
|
"./tokens.flat.json": "./dist/tokens/attrus-tokens.flat.json",
|
|
41
|
+
"./themes": "./dist/css/themes/index.css",
|
|
42
|
+
"./themes/*": "./dist/css/themes/*",
|
|
41
43
|
"./components/*": "./dist/css/components/*",
|
|
42
44
|
"./react": "./dist/react/index.ts",
|
|
43
45
|
"./react/*": "./dist/react/*",
|