@apliteni/apliteni-ui 0.7.2 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -20
- package/package.json +20 -11
- package/react/README.md +58 -0
- package/react/dist/index.css +76 -0
- package/react/dist/index.d.ts +58 -0
- package/react/dist/index.js +254 -0
- package/src/assets/icons.js +95 -72
- package/src/components/feedback.js +9 -7
- package/src/components/index.js +90 -15
- package/src/components/tabs.js +6 -2
- package/src/components/topbar.js +39 -5
- package/src/styles/badge.css +11 -13
- package/src/styles/callout.css +5 -5
- package/src/styles/card.css +1 -1
- package/src/styles/drawer.css +2 -4
- package/src/styles/dropdown.css +1 -1
- package/src/styles/empty.css +1 -1
- package/src/styles/feedback.css +12 -6
- package/src/styles/input.css +4 -1
- package/src/styles/layout.css +1 -1
- package/src/styles/motion.css +1 -1
- package/src/styles/nav.css +3 -1
- package/src/styles/segmented.css +3 -0
- package/src/styles/table.css +13 -0
- package/src/styles/tabs.css +3 -0
- package/src/styles/topbar.css +3 -3
- package/src/tokens/accents.css +6 -2
- package/src/tokens/brand.generated.css +1 -1
- package/src/tokens/tokens.css +54 -0
package/src/styles/badge.css
CHANGED
|
@@ -19,28 +19,26 @@
|
|
|
19
19
|
background: var(--surface-2);
|
|
20
20
|
white-space: nowrap;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
/* Status chips take the --chip-* pairs, so the light app's solid fills live in
|
|
23
|
+
tokens.css rather than in a theme override down here: on white the glow-tints
|
|
24
|
+
wash out and the ink has to deepen to clear AA, and that is a token decision. */
|
|
25
|
+
.ui-badge--live { color: var(--chip-success-ink); background: var(--chip-success-fill); }
|
|
23
26
|
.ui-badge--soon { color: var(--purple-mid); background: var(--glow-purple); }
|
|
24
27
|
.ui-badge--info { color: var(--cyan); background: var(--glow-cyan); }
|
|
25
|
-
.ui-badge--warn { color: var(--
|
|
26
|
-
.ui-badge--danger { color: var(--
|
|
28
|
+
.ui-badge--warn { color: var(--chip-warn-ink); background: var(--chip-warn-fill); }
|
|
29
|
+
.ui-badge--danger { color: var(--chip-danger-ink); background: var(--chip-danger-fill); }
|
|
27
30
|
.ui-badge--archive { color: var(--muted); background: var(--surface); }
|
|
28
31
|
|
|
29
32
|
/* Semantic status variants — for record/row status in data tables
|
|
30
33
|
(paid / verified / pending / failed …). Same chip, mapped to meaning. */
|
|
31
|
-
.ui-badge--success { color: var(--
|
|
32
|
-
.ui-badge--pending { color: var(--
|
|
34
|
+
.ui-badge--success { color: var(--chip-success-ink); background: var(--chip-success-fill); }
|
|
35
|
+
.ui-badge--pending { color: var(--chip-warn-ink); background: var(--chip-warn-fill); }
|
|
33
36
|
.ui-badge--neutral { color: var(--muted); background: var(--surface-2); }
|
|
34
37
|
|
|
35
|
-
/*
|
|
36
|
-
|
|
37
|
-
:root[data-theme="light"] .ui-badge--success,
|
|
38
|
-
:root[data-theme="light"] .ui-badge--live { color: #1f7a38; background: #dff3e4; }
|
|
39
|
-
:root[data-theme="light"] .ui-badge--pending,
|
|
40
|
-
:root[data-theme="light"] .ui-badge--warn { color: #8a5e00; background: #fbedd2; }
|
|
41
|
-
:root[data-theme="light"] .ui-badge--danger { color: #b7295f; background: #fbe0ea; }
|
|
38
|
+
/* The two neutral chips are the exception: their light fill is already in the
|
|
39
|
+
surface scale (--surface-3), and their ink is plain --muted. */
|
|
42
40
|
:root[data-theme="light"] .ui-badge--neutral,
|
|
43
|
-
:root[data-theme="light"] .ui-badge--archive { color:
|
|
41
|
+
:root[data-theme="light"] .ui-badge--archive { color: var(--muted); background: var(--surface-3); }
|
|
44
42
|
|
|
45
43
|
/* Pill: same shape, sentence case, a touch larger — a metadata chip */
|
|
46
44
|
.ui-pill {
|
package/src/styles/callout.css
CHANGED
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
|
|
50
50
|
/* status → the paint tokens every style below consumes (--toast-on = the ink
|
|
51
51
|
that reads on the accent when it becomes a fill) */
|
|
52
|
-
.ui-toast--success { --toast-accent: var(--green); --toast-glow: var(--glow-green); --toast-on:
|
|
53
|
-
.ui-toast--danger { --toast-accent: var(--pink); --toast-glow: var(--glow-pink); --toast-on:
|
|
54
|
-
.ui-toast--warn { --toast-accent: var(--amber); --toast-glow: color-mix(in srgb, var(--amber) 14%, transparent); --toast-on:
|
|
55
|
-
.ui-toast--info { --toast-accent: var(--cyan); --toast-glow: var(--glow-cyan); --toast-on:
|
|
52
|
+
.ui-toast--success { --toast-accent: var(--green); --toast-glow: var(--glow-green); --toast-on: var(--signal-contrast); }
|
|
53
|
+
.ui-toast--danger { --toast-accent: var(--pink); --toast-glow: var(--glow-pink); --toast-on: var(--danger-contrast); }
|
|
54
|
+
.ui-toast--warn { --toast-accent: var(--amber); --toast-glow: color-mix(in srgb, var(--amber) 14%, transparent); --toast-on: var(--signal-contrast); }
|
|
55
|
+
.ui-toast--info { --toast-accent: var(--cyan); --toast-glow: var(--glow-cyan); --toast-on: var(--signal-contrast); }
|
|
56
56
|
.ui-toast--neutral { --toast-accent: var(--muted); --toast-glow: var(--surface-2); --toast-on: var(--strong); }
|
|
57
57
|
|
|
58
58
|
/* left status marker (soft + outline; solid is already a full fill) */
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
width: 48px; height: 48px;
|
|
127
127
|
border-radius: 50%;
|
|
128
128
|
background: var(--green);
|
|
129
|
-
color:
|
|
129
|
+
color: var(--signal-contrast);
|
|
130
130
|
display: grid;
|
|
131
131
|
place-items: center;
|
|
132
132
|
margin: 0 auto 14px;
|
package/src/styles/card.css
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
soft shadow to read as a panel. Dark keeps the borderless deck look. */
|
|
17
17
|
:root[data-theme="light"] .ui-card {
|
|
18
18
|
border: 1px solid var(--border);
|
|
19
|
-
box-shadow:
|
|
19
|
+
box-shadow: var(--shadow-card);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
/* A table wider than its card scrolls INSIDE the card instead of bleeding past
|
package/src/styles/drawer.css
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Local tokens (surface/shadow/scrim) so the panel + scrim re-theme cleanly:
|
|
9
9
|
* --drawer-surface panel background --drawer-shadow panel elevation
|
|
10
|
-
* --drawer-scrim backdrop colour (
|
|
10
|
+
* --drawer-scrim backdrop colour (--scrim already re-themes per theme)
|
|
11
11
|
* ========================================================================== */
|
|
12
12
|
|
|
13
13
|
.ui-drawer {
|
|
14
14
|
--drawer-surface: var(--surface-2);
|
|
15
15
|
--drawer-shadow: var(--shadow-lg);
|
|
16
|
-
--drawer-scrim:
|
|
16
|
+
--drawer-scrim: var(--scrim);
|
|
17
17
|
--drawer-w: 420px; /* left|right panels: width */
|
|
18
18
|
--drawer-h: 45vh; /* top|bottom panels: height */
|
|
19
19
|
|
|
@@ -22,8 +22,6 @@
|
|
|
22
22
|
z-index: var(--z-overlay);
|
|
23
23
|
pointer-events: none; /* container never blocks; scrim/panel opt back in */
|
|
24
24
|
}
|
|
25
|
-
:root[data-theme="light"] .ui-drawer { --drawer-scrim: rgba(20, 22, 40, 0.38); }
|
|
26
|
-
|
|
27
25
|
/* Scrim — fades in; visibility trails the fade so the panel can animate out. */
|
|
28
26
|
.ui-drawer__scrim {
|
|
29
27
|
position: absolute;
|
package/src/styles/dropdown.css
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
/* Disabled + danger rows */
|
|
109
109
|
.ui-dropdown__item.is-disabled { opacity: 0.45; cursor: not-allowed; pointer-events: none; }
|
|
110
110
|
.ui-dropdown__item.is-danger .ui-dropdown__label { color: var(--muted); }
|
|
111
|
-
.ui-dropdown__item.is-danger:hover .ui-dropdown__label { color: var(--
|
|
111
|
+
.ui-dropdown__item.is-danger:hover .ui-dropdown__label { color: var(--pink); }
|
|
112
112
|
|
|
113
113
|
/* Grouped sections */
|
|
114
114
|
.ui-dropdown__section + .ui-dropdown__section { border-top: 1px solid var(--border); margin-top: 5px; padding-top: 5px; }
|
package/src/styles/empty.css
CHANGED
package/src/styles/feedback.css
CHANGED
|
@@ -24,17 +24,23 @@
|
|
|
24
24
|
background: var(--ui-fb-pill-grad); color: var(--accent-contrast);
|
|
25
25
|
font-family: var(--font-sans); font-size: 13px; font-weight: var(--weight-semibold); letter-spacing: .01em;
|
|
26
26
|
padding: 9px 17px 9px 15px; border-radius: 999px; cursor: pointer; white-space: nowrap; overflow: hidden;
|
|
27
|
-
box-shadow: 0 10px 26px var(--ui-fb-pill-glow),
|
|
27
|
+
box-shadow: 0 10px 26px var(--ui-fb-pill-glow),
|
|
28
|
+
0 2px 6px color-mix(in srgb, var(--shadow-ink) 28%, transparent),
|
|
29
|
+
inset 0 1px 0 color-mix(in srgb, var(--sheen) 28%, transparent);
|
|
28
30
|
transition: transform .2s var(--easing-spring, cubic-bezier(.34,1.56,.64,1)), opacity .16s ease, box-shadow .2s ease;
|
|
29
31
|
}
|
|
30
32
|
.ui-fbpill.show { opacity: 1; pointer-events: auto; transform: translate(-50%, -100%) translateY(-9px) scale(1); }
|
|
31
|
-
.ui-fbpill:hover {
|
|
33
|
+
.ui-fbpill:hover {
|
|
34
|
+
box-shadow: 0 14px 34px var(--ui-fb-pill-glow),
|
|
35
|
+
0 3px 9px color-mix(in srgb, var(--shadow-ink) 30%, transparent),
|
|
36
|
+
inset 0 1px 0 color-mix(in srgb, var(--sheen) 34%, transparent);
|
|
37
|
+
}
|
|
32
38
|
.ui-fbpill.show:hover { transform: translate(-50%, -100%) translateY(-12px) scale(1.04); }
|
|
33
39
|
.ui-fbpill:active { transform: translate(-50%, -100%) translateY(-8px) scale(.98); }
|
|
34
|
-
.ui-fbpill svg { width: 16px; height: 16px; color: currentColor; filter: drop-shadow(0 1px 1px
|
|
40
|
+
.ui-fbpill svg { width: 16px; height: 16px; color: currentColor; filter: drop-shadow(0 1px 1px color-mix(in srgb, var(--shadow-ink) 25%, transparent)); }
|
|
35
41
|
.ui-fbpill::before {
|
|
36
42
|
content: ""; position: absolute; top: 0; bottom: 0; left: -60%; width: 45%;
|
|
37
|
-
background: linear-gradient(100deg, transparent,
|
|
43
|
+
background: linear-gradient(100deg, transparent, color-mix(in srgb, var(--sheen) 55%, transparent), transparent); transform: skewX(-18deg);
|
|
38
44
|
}
|
|
39
45
|
.ui-fbpill.show::before { animation: uiFbSheen 1.15s ease .12s 1; }
|
|
40
46
|
.ui-fbpill:hover::before { animation: uiFbSheen .7s ease 1; }
|
|
@@ -42,7 +48,7 @@
|
|
|
42
48
|
|
|
43
49
|
/* Scrim behind the open composer */
|
|
44
50
|
.ui-fbscrim {
|
|
45
|
-
position: fixed; inset: 0; z-index: 70; background:
|
|
51
|
+
position: fixed; inset: 0; z-index: 70; background: var(--scrim);
|
|
46
52
|
opacity: 0; pointer-events: none; transition: opacity .2s ease;
|
|
47
53
|
}
|
|
48
54
|
.ui-fbscrim.show { opacity: 1; pointer-events: auto; }
|
|
@@ -90,7 +96,7 @@
|
|
|
90
96
|
.ui-fbck { width: 88px; height: 88px; overflow: visible; display: block; transform-origin: center; animation: uiFbCkSpring 1s cubic-bezier(.22,1,.3,1) both; }
|
|
91
97
|
.ui-fbck-t { fill: none; stroke: var(--surface-2); stroke-width: 9; stroke-linecap: round; stroke-linejoin: round; }
|
|
92
98
|
.ui-fbck-m { fill: none; stroke: var(--green); stroke-width: 9; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 118; stroke-dashoffset: 118; animation: uiFbCkDraw .6s cubic-bezier(.5,0,.3,1) .1s forwards; }
|
|
93
|
-
.ui-fbck-s { fill: none; stroke:
|
|
99
|
+
.ui-fbck-s { fill: none; stroke: var(--sheen); stroke-width: 9; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 15 400; stroke-dashoffset: 133; filter: drop-shadow(0 0 8px var(--green)) drop-shadow(0 0 15px var(--green)); opacity: 0; animation: uiFbCkComet .6s cubic-bezier(.5,0,.3,1) .1s forwards; }
|
|
94
100
|
.ui-fbc__done h4 { color: var(--strong); font-size: 19px; font-weight: var(--weight-semibold); letter-spacing: -.01em; margin-bottom: 7px; }
|
|
95
101
|
.ui-fbc__done p { color: var(--dim); font-size: 13.5px; line-height: 1.55; max-width: 38ch; margin: 0 auto; }
|
|
96
102
|
.ui-fbc__done p b { color: var(--text); font-weight: var(--weight-semibold); }
|
package/src/styles/input.css
CHANGED
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
font-weight: var(--weight-medium);
|
|
11
11
|
margin-bottom: 8px;
|
|
12
12
|
}
|
|
13
|
+
/* Required marker. Decoration only — the control carries `required`, which is
|
|
14
|
+
what assistive technology reads, so this asterisk is aria-hidden. */
|
|
15
|
+
.ui-field__req { color: var(--pink); margin-left: 4px; }
|
|
13
16
|
.ui-field__hint { color: var(--muted); font-size: var(--text-sm); margin-top: 7px; line-height: 1.5; }
|
|
14
17
|
.ui-field__error { color: var(--pink); font-size: var(--text-sm); margin-top: 7px; display: flex; align-items: center; gap: 6px; }
|
|
15
18
|
|
|
@@ -142,7 +145,7 @@
|
|
|
142
145
|
left: 3px;
|
|
143
146
|
width: calc(var(--sw-h) - 6px);
|
|
144
147
|
height: calc(var(--sw-h) - 6px);
|
|
145
|
-
background:
|
|
148
|
+
background: var(--control-knob);
|
|
146
149
|
border-radius: 50%;
|
|
147
150
|
box-shadow: var(--shadow-sm);
|
|
148
151
|
transition: transform var(--dur-med) var(--ease);
|
package/src/styles/layout.css
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
.ui-side a.on svg { opacity: 1; stroke: var(--accent); }
|
|
29
29
|
.ui-side .ssep { height: 1px; background: var(--border); margin: 8px 12px; }
|
|
30
30
|
.ui-side a.out { color: var(--muted); }
|
|
31
|
-
.ui-side a.out:hover { color: var(--
|
|
31
|
+
.ui-side a.out:hover { color: var(--pink); }
|
|
32
32
|
|
|
33
33
|
/* -- Account shell grid -------------------------------------------------- */
|
|
34
34
|
.ui-shell {
|
package/src/styles/motion.css
CHANGED
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
}
|
|
76
76
|
.m-lift:hover {
|
|
77
77
|
transform: translateY(-3px);
|
|
78
|
-
box-shadow: var(--shadow-md
|
|
78
|
+
box-shadow: var(--shadow-md);
|
|
79
79
|
}
|
|
80
80
|
.m-press {
|
|
81
81
|
transition: transform var(--duration-instant, 80ms) var(--easing-sharp, cubic-bezier(0.4, 0, 0.6, 1));
|
package/src/styles/nav.css
CHANGED
|
@@ -75,7 +75,9 @@
|
|
|
75
75
|
.ui-nav__item.is-current .ui-nav__ic svg { opacity: 1; stroke: var(--accent); }
|
|
76
76
|
.ui-nav__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
77
77
|
|
|
78
|
-
.
|
|
78
|
+
/* Destructive row (sign out, revoke). Quiet at rest, --pink once the pointer
|
|
79
|
+
reaches it — same two-step as .ui-btn--danger and .ui-dropdown__item.is-danger. */
|
|
80
|
+
.ui-nav__item.is-danger { color: var(--muted); }
|
|
79
81
|
.ui-nav__item.is-danger:hover { background: var(--glow-pink); color: var(--pink); }
|
|
80
82
|
.ui-nav__item.is-disabled { color: var(--muted); opacity: 0.55; cursor: default; pointer-events: none; }
|
|
81
83
|
|
package/src/styles/segmented.css
CHANGED
|
@@ -24,7 +24,10 @@
|
|
|
24
24
|
transition: color var(--dur-med) var(--ease), background var(--dur-med) var(--ease);
|
|
25
25
|
}
|
|
26
26
|
.ui-seg button:hover { color: var(--text); }
|
|
27
|
+
/* aria-pressed is what segmented() emits now; aria-selected is kept so markup
|
|
28
|
+
copied from an older release keeps painting its active pill. */
|
|
27
29
|
.ui-seg button.is-active,
|
|
30
|
+
.ui-seg button[aria-pressed="true"],
|
|
28
31
|
.ui-seg button[aria-selected="true"] {
|
|
29
32
|
color: var(--strong);
|
|
30
33
|
background: var(--seg-active-bg);
|
package/src/styles/table.css
CHANGED
|
@@ -68,6 +68,19 @@
|
|
|
68
68
|
.ui-table--zebra th { border-bottom-width: 2px; }
|
|
69
69
|
.ui-table--zebra td { border-bottom: 0; }
|
|
70
70
|
.ui-table--zebra tbody tr:nth-child(even) td { background: var(--surface-2); }
|
|
71
|
+
/* The stripe is full-bleed on purpose — the hover note above inset the hover fill for
|
|
72
|
+
* #71 and deliberately left the ledger stripe alone. But full-bleed only reads right if
|
|
73
|
+
* the end cells are inset from the tint's own edge, and the base rhythm does not inset
|
|
74
|
+
* them: `.ui-table td` sets `padding-left: 0`. Only `--dense` supplied the inset, so a
|
|
75
|
+
* `--zebra` table composed WITHOUT `--dense` put the first cell's content at exactly
|
|
76
|
+
* x=0 of the stripe. `DataTable` is that composition — it writes `ui-table
|
|
77
|
+
* ui-table--hover ui-table--zebra` and no `--dense` — so its select-all and per-row
|
|
78
|
+
* checkboxes sat flush against the tint with a measured 0px gap.
|
|
79
|
+
* Header and body are inset together, or the columns stop lining up. */
|
|
80
|
+
.ui-table--zebra th:first-child,
|
|
81
|
+
.ui-table--zebra td:first-child { padding-left: 12px; }
|
|
82
|
+
.ui-table--zebra th:last-child,
|
|
83
|
+
.ui-table--zebra td:last-child { padding-right: 12px; }
|
|
71
84
|
.ui-table--zebra.ui-table--hover tbody tr:hover td,
|
|
72
85
|
.ui-table--zebra tbody tr:hover td { background: color-mix(in srgb, var(--accent) 8%, transparent); }
|
|
73
86
|
|
package/src/styles/tabs.css
CHANGED
|
@@ -26,3 +26,6 @@
|
|
|
26
26
|
|
|
27
27
|
.ui-tabs__panels { padding-top: 20px; }
|
|
28
28
|
.ui-tabs__panel[hidden] { display: none; }
|
|
29
|
+
/* The panel is focusable (tabindex="0", see tabs.js) so a keyboard user can
|
|
30
|
+
reach text-only content. Show the ring when they land on it. */
|
|
31
|
+
.ui-tabs__panel:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; border-radius: 8px; }
|
package/src/styles/topbar.css
CHANGED
|
@@ -161,8 +161,8 @@
|
|
|
161
161
|
width: 32px; height: 32px;
|
|
162
162
|
border-radius: 50%;
|
|
163
163
|
border: 1px solid var(--border);
|
|
164
|
-
background: linear-gradient(145deg,
|
|
165
|
-
color:
|
|
164
|
+
background: linear-gradient(145deg, var(--accent-strong), var(--purple));
|
|
165
|
+
color: var(--accent-contrast);
|
|
166
166
|
font-weight: 600;
|
|
167
167
|
font-size: 12.5px;
|
|
168
168
|
display: grid;
|
|
@@ -199,4 +199,4 @@
|
|
|
199
199
|
.amenu a svg { width: 19px; height: 19px; flex: none; stroke: currentColor; fill: none; stroke-width: 1.8; opacity: 0.85; }
|
|
200
200
|
.amenu .asep { height: 1px; background: var(--border); margin: 5px 0; }
|
|
201
201
|
.amenu a.aout { color: var(--muted); }
|
|
202
|
-
.amenu a.aout:hover { color: var(--
|
|
202
|
+
.amenu a.aout:hover { color: var(--pink); }
|
package/src/tokens/accents.css
CHANGED
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
--purple: #c2400f;
|
|
31
31
|
--purple-light: #d64a12;
|
|
32
32
|
--purple-mid: #b8420f;
|
|
33
|
-
|
|
33
|
+
/* Deepened for WCAG AA on the light ground (#fff): #d64a12 was 4.33:1 as text
|
|
34
|
+
and as the ink-on-fill; #a8370c clears AA at 6.53:1. See issue #96. */
|
|
35
|
+
--accent: #a8370c;
|
|
34
36
|
--accent-strong: var(--accent);
|
|
35
37
|
--accent-contrast: #ffffff;
|
|
36
38
|
--glow-purple: rgba(214, 74, 18, 0.10);
|
|
@@ -82,7 +84,9 @@
|
|
|
82
84
|
--purple: #0a865a;
|
|
83
85
|
--purple-light: #0b9c68;
|
|
84
86
|
--purple-mid: #0a9060;
|
|
85
|
-
|
|
87
|
+
/* Deepened for WCAG AA on the light ground (#fff): #0b9c68 was 3.52:1 as text
|
|
88
|
+
and as the ink-on-fill; #087a52 clears AA at 5.36:1. See issue #96. */
|
|
89
|
+
--accent: #087a52;
|
|
86
90
|
--accent-strong: var(--accent);
|
|
87
91
|
--accent-contrast: #ffffff;
|
|
88
92
|
--glow-purple: rgba(11, 156, 104, 0.10);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* ============================================================================
|
|
2
2
|
* apliteni-ui — BRAND PRIMITIVES (generated, do not edit)
|
|
3
3
|
*
|
|
4
|
-
* Synced from apliteni/design-system@
|
|
4
|
+
* Synced from apliteni/design-system@523de68
|
|
5
5
|
* via: npm run tokens:sync
|
|
6
6
|
*
|
|
7
7
|
* The Apliteni umbrella-brand primitives: colour ramps + motion vocabulary
|
package/src/tokens/tokens.css
CHANGED
|
@@ -118,6 +118,10 @@
|
|
|
118
118
|
--surface-2: #1b1927;
|
|
119
119
|
--surface-3: #2a2739;
|
|
120
120
|
--seg-active-bg: #34314a; /* raised pill — clearly above the inset track in dark */
|
|
121
|
+
/* The raised handle on a control track (switch knob). Stays white in both
|
|
122
|
+
themes and under every accent: it has to read on the plain track AND on
|
|
123
|
+
the accent fill the track takes when the control is on. */
|
|
124
|
+
--control-knob: #ffffff;
|
|
121
125
|
--border: #332f45;
|
|
122
126
|
--border-strong: #453f5c;
|
|
123
127
|
|
|
@@ -131,18 +135,46 @@
|
|
|
131
135
|
--accent-contrast: #ffffff;
|
|
132
136
|
--ink: #e9e7f0;
|
|
133
137
|
|
|
138
|
+
/* Ink that reads on a SIGNAL colour once that colour becomes a fill — the
|
|
139
|
+
glyph in a success circle, the text in a solid toast. The signal hues sit
|
|
140
|
+
high enough in dark and mid-tone in light that near-black wins on all of
|
|
141
|
+
them; the pink danger fill deliberately takes light ink instead. */
|
|
142
|
+
--signal-contrast: #0c0c0c;
|
|
143
|
+
--danger-contrast: #ffffff;
|
|
144
|
+
|
|
134
145
|
--glow-green: rgba(152, 255, 143, 0.16);
|
|
135
146
|
--glow-purple: rgba(155, 93, 255, 0.18);
|
|
136
147
|
--glow-cyan: rgba(32, 220, 245, 0.14);
|
|
137
148
|
--glow-pink: rgba(227, 91, 143, 0.16);
|
|
138
149
|
|
|
150
|
+
/* Status-chip paint — the ink + fill of a badge / pill. Dark tints with the
|
|
151
|
+
signal's own glow; light needs a solid, deepened pair (the glows wash out
|
|
152
|
+
on white), which is why these are a token pair and not just --green etc. */
|
|
153
|
+
--chip-success-ink: var(--green);
|
|
154
|
+
--chip-success-fill: var(--glow-green);
|
|
155
|
+
--chip-warn-ink: var(--amber);
|
|
156
|
+
--chip-warn-fill: color-mix(in srgb, var(--amber) 15%, transparent);
|
|
157
|
+
--chip-danger-ink: var(--pink);
|
|
158
|
+
--chip-danger-fill: var(--glow-pink);
|
|
159
|
+
|
|
139
160
|
--shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.28);
|
|
140
161
|
--shadow-md: 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
141
162
|
--shadow-lg: 0 18px 50px rgba(0, 0, 0, 0.5);
|
|
142
163
|
/* Tight elevation for the active segmented pill — stays contained in its track. */
|
|
143
164
|
--shadow-seg: 0 1px 2px rgba(0, 0, 0, 0.45), 0 2px 4px rgba(0, 0, 0, 0.3);
|
|
165
|
+
/* Resting elevation for a card. Dark cards are borderless — the surface does
|
|
166
|
+
the grouping on its own — so they cast nothing. */
|
|
167
|
+
--shadow-card: none;
|
|
144
168
|
--ring: 0 0 0 3px rgba(155, 93, 255, 0.35);
|
|
145
169
|
|
|
170
|
+
/* The ink a cast shadow is made of, and the specular white that reads as
|
|
171
|
+
gloss on a raised surface. Effects mix these instead of writing rgba(). */
|
|
172
|
+
--shadow-ink: #000000;
|
|
173
|
+
--sheen: #ffffff;
|
|
174
|
+
|
|
175
|
+
/* Backdrop that dims the page behind an overlay (drawer, modal, composer). */
|
|
176
|
+
--scrim: rgba(0, 0, 0, 0.58);
|
|
177
|
+
|
|
146
178
|
/* Accent gradient stops (hero headline, marketing) — overridden per sub-theme. */
|
|
147
179
|
--grad-from: var(--purple-light);
|
|
148
180
|
--grad-to: var(--cyan);
|
|
@@ -170,6 +202,7 @@
|
|
|
170
202
|
--surface-2: #f5f6f9;
|
|
171
203
|
--surface-3: #eceef3;
|
|
172
204
|
--seg-active-bg: #ffffff; /* white pill raised above the grey track in light */
|
|
205
|
+
--control-knob: #ffffff;
|
|
173
206
|
--border: #e4e7ee;
|
|
174
207
|
--border-strong: #cdd2dc;
|
|
175
208
|
|
|
@@ -183,18 +216,39 @@
|
|
|
183
216
|
--accent-contrast: #ffffff;
|
|
184
217
|
--ink: #1e232b;
|
|
185
218
|
|
|
219
|
+
--signal-contrast: #0c0c0c;
|
|
220
|
+
--danger-contrast: #ffffff;
|
|
221
|
+
|
|
186
222
|
--glow-green: rgba(30, 150, 50, 0.1);
|
|
187
223
|
--glow-purple: rgba(106, 45, 204, 0.09);
|
|
188
224
|
--glow-cyan: rgba(12, 143, 168, 0.1);
|
|
189
225
|
--glow-pink: rgba(214, 60, 114, 0.1);
|
|
190
226
|
|
|
227
|
+
/* Solid chip pairs for the white app. Each ink is deepened past its signal
|
|
228
|
+
hue so 10px uppercase text clears WCAG AA on its own pale fill —
|
|
229
|
+
e.g. --pink (#d63c72) on #fbe0ea is 3.6:1, #b7295f is 4.9:1. */
|
|
230
|
+
--chip-success-ink: #1f7a38;
|
|
231
|
+
--chip-success-fill: #dff3e4;
|
|
232
|
+
--chip-warn-ink: #8a5e00;
|
|
233
|
+
--chip-warn-fill: #fbedd2;
|
|
234
|
+
--chip-danger-ink: #b7295f;
|
|
235
|
+
--chip-danger-fill: #fbe0ea;
|
|
236
|
+
|
|
191
237
|
--shadow-sm: 0 1px 3px rgba(30, 30, 50, 0.08);
|
|
192
238
|
--shadow-md: 0 8px 24px rgba(30, 30, 50, 0.1);
|
|
193
239
|
--shadow-lg: 0 18px 50px rgba(30, 30, 50, 0.16);
|
|
194
240
|
/* Tight elevation for the active segmented pill — stays contained in its track. */
|
|
195
241
|
--shadow-seg: 0 1px 2px rgba(30, 30, 50, 0.12), 0 2px 4px rgba(30, 30, 50, 0.1);
|
|
242
|
+
/* A white card on a white page needs its own, flatter-than-sm elevation:
|
|
243
|
+
a hairline contact shadow plus a wide soft one (see card.css). */
|
|
244
|
+
--shadow-card: 0 1px 2px rgba(20, 25, 45, 0.04), 0 4px 14px rgba(20, 25, 45, 0.05);
|
|
196
245
|
--ring: 0 0 0 3px rgba(106, 45, 204, 0.25);
|
|
197
246
|
|
|
247
|
+
--shadow-ink: #1e1e32;
|
|
248
|
+
--sheen: #ffffff;
|
|
249
|
+
|
|
250
|
+
--scrim: rgba(20, 22, 40, 0.38);
|
|
251
|
+
|
|
198
252
|
--grad-from: var(--purple-light);
|
|
199
253
|
--grad-to: var(--cyan);
|
|
200
254
|
}
|