@apliteni/apliteni-ui 0.3.0 → 0.5.0
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/package.json +10 -3
- package/src/assets/brand.generated/apliteni-logo-dark.svg +27 -0
- package/src/assets/brand.generated/apliteni-logo.svg +27 -0
- package/src/assets/brand.generated/apliteni-mark.svg +19 -0
- package/src/assets/brand.generated/index.js +5 -0
- package/src/assets/icons.js +106 -24
- package/src/assets/illustrations.js +68 -0
- package/src/components/drawer.js +200 -0
- package/src/components/dropdown.js +229 -0
- package/src/components/feedback.js +6 -0
- package/src/components/footer.js +95 -0
- package/src/components/index.js +115 -10
- package/src/components/nav.js +190 -0
- package/src/components/success.js +126 -0
- package/src/components/toasts.js +94 -0
- package/src/components/topbar.js +17 -15
- package/src/index.css +9 -0
- package/src/index.js +5 -0
- package/src/inline.js +21 -3
- package/src/motion.js +68 -0
- package/src/styles/aurora.css +93 -0
- package/src/styles/button.css +40 -11
- package/src/styles/callout.css +79 -12
- package/src/styles/drawer.css +166 -0
- package/src/styles/dropdown.css +133 -0
- package/src/styles/empty.css +84 -0
- package/src/styles/feedback.css +1 -1
- package/src/styles/footer.css +123 -0
- package/src/styles/motion.css +166 -0
- package/src/styles/nav.css +218 -0
- package/src/styles/success.css +189 -0
- package/src/styles/table.css +2 -15
- package/src/styles/topbar.css +9 -3
- package/src/tokens/brand.generated.css +121 -0
- package/src/tokens/tokens.css +18 -5
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* Success / confirmation surface — .ui-sx*
|
|
3
|
+
* The emotional high point of a flow, with craft: a self-drawing SVG check
|
|
4
|
+
* (ring burst + spring), an aurora / glow backdrop, follow-up actions, an
|
|
5
|
+
* optional confetti field and an optional auto-redirect countdown. Three
|
|
6
|
+
* layouts (hero / split / compact) and three backdrops (aurora / glow / flat).
|
|
7
|
+
*
|
|
8
|
+
* Accent-aware via the kit tokens; the success mark stays on the --green
|
|
9
|
+
* family (green = success), the surrounds follow --accent so it re-themes with
|
|
10
|
+
* the sub-theme. Every motion path is reduced-motion safe — see the block at
|
|
11
|
+
* the foot. Markup comes from success() in components/index (re-exported).
|
|
12
|
+
* ========================================================================== */
|
|
13
|
+
|
|
14
|
+
.ui-sx {
|
|
15
|
+
--sx-green: var(--green);
|
|
16
|
+
--sx-tint: color-mix(in srgb, var(--green) 18%, transparent);
|
|
17
|
+
--sx-track: color-mix(in srgb, var(--green) 32%, transparent);
|
|
18
|
+
|
|
19
|
+
position: relative;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
border-radius: 20px;
|
|
22
|
+
background: var(--bg-elevated);
|
|
23
|
+
box-shadow: var(--shadow-md);
|
|
24
|
+
isolation: isolate;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* ---- Backdrops ----------------------------------------------------------- */
|
|
28
|
+
/* Aurora: two soft blurred blobs — a green wash under the check + an accent
|
|
29
|
+
blob for identity — so the success matches the rest of the kit's warmth. */
|
|
30
|
+
.ui-sx__aurora { position: absolute; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
|
|
31
|
+
.ui-sx__glow {
|
|
32
|
+
position: absolute; border-radius: 50%; filter: blur(70px); opacity: 0.9;
|
|
33
|
+
aspect-ratio: 1; will-change: transform;
|
|
34
|
+
}
|
|
35
|
+
.ui-sx__glow--a {
|
|
36
|
+
width: 58%; top: -14%; left: 50%; translate: -50% 0;
|
|
37
|
+
background: radial-gradient(circle at center, var(--sx-tint), transparent 68%);
|
|
38
|
+
animation: ui-sx-float 14s ease-in-out infinite alternate;
|
|
39
|
+
}
|
|
40
|
+
.ui-sx__glow--b {
|
|
41
|
+
width: 52%; bottom: -20%; left: 12%;
|
|
42
|
+
background: radial-gradient(circle at center,
|
|
43
|
+
color-mix(in srgb, var(--accent) 30%, transparent), transparent 68%);
|
|
44
|
+
animation: ui-sx-float 18s ease-in-out -6s infinite alternate;
|
|
45
|
+
}
|
|
46
|
+
:root[data-theme="light"] .ui-sx__glow { opacity: 0.7; }
|
|
47
|
+
@keyframes ui-sx-float {
|
|
48
|
+
from { transform: translate(-2%, -2%) scale(1); }
|
|
49
|
+
to { transform: translate(3%, 3%) scale(1.14); }
|
|
50
|
+
}
|
|
51
|
+
/* Glow backdrop: reuse the shared .ui-glow--green, parked behind the check. */
|
|
52
|
+
.ui-sx__bg-glow { top: -40%; left: 50%; translate: -50% 0; width: 360px; height: 360px; }
|
|
53
|
+
|
|
54
|
+
/* ---- Layout shell -------------------------------------------------------- */
|
|
55
|
+
.ui-sx__inner { position: relative; z-index: 1; }
|
|
56
|
+
.ui-sx__content { min-width: 0; }
|
|
57
|
+
.ui-sx__eyebrow {
|
|
58
|
+
color: var(--green); font-size: 12px; font-weight: var(--weight-semibold);
|
|
59
|
+
letter-spacing: .08em; text-transform: uppercase; margin-bottom: 10px;
|
|
60
|
+
}
|
|
61
|
+
.ui-sx__title {
|
|
62
|
+
color: var(--strong); font-size: 22px; font-weight: var(--weight-semibold);
|
|
63
|
+
letter-spacing: -.02em; line-height: 1.2; margin: 0;
|
|
64
|
+
}
|
|
65
|
+
.ui-sx__body {
|
|
66
|
+
color: var(--dim); font-size: 14.5px; line-height: 1.6; margin: 9px 0 0; max-width: 44ch;
|
|
67
|
+
}
|
|
68
|
+
.ui-sx__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 20px; }
|
|
69
|
+
|
|
70
|
+
/* hero — centred column, the upgraded default */
|
|
71
|
+
.ui-sx--hero { padding: 44px 32px 40px; text-align: center; }
|
|
72
|
+
.ui-sx--hero .ui-sx__inner { display: flex; flex-direction: column; align-items: center; }
|
|
73
|
+
.ui-sx--hero .ui-sx__visual { margin-bottom: 22px; }
|
|
74
|
+
.ui-sx--hero .ui-sx__body { margin-left: auto; margin-right: auto; }
|
|
75
|
+
.ui-sx--hero .ui-sx__actions { justify-content: center; }
|
|
76
|
+
.ui-sx--hero .ui-sx__check { width: 96px; height: 96px; }
|
|
77
|
+
|
|
78
|
+
/* split — visual panel beside the copy */
|
|
79
|
+
.ui-sx--split .ui-sx__inner {
|
|
80
|
+
display: grid; grid-template-columns: minmax(200px, 300px) 1fr; align-items: stretch;
|
|
81
|
+
}
|
|
82
|
+
.ui-sx--split .ui-sx__visual {
|
|
83
|
+
display: grid; place-items: center; padding: 40px 24px;
|
|
84
|
+
background: color-mix(in srgb, var(--green) 8%, transparent);
|
|
85
|
+
border-right: 1px solid var(--border);
|
|
86
|
+
}
|
|
87
|
+
.ui-sx--split .ui-sx__check { width: 120px; height: 120px; }
|
|
88
|
+
.ui-sx--split .ui-sx__content { padding: 40px 36px; align-self: center; }
|
|
89
|
+
|
|
90
|
+
/* compact — inline, panel/toast-adjacent */
|
|
91
|
+
.ui-sx--compact { padding: 18px 20px; }
|
|
92
|
+
.ui-sx--compact .ui-sx__inner { display: flex; align-items: center; gap: 16px; }
|
|
93
|
+
.ui-sx--compact .ui-sx__visual { flex: none; }
|
|
94
|
+
.ui-sx--compact .ui-sx__check { width: 44px; height: 44px; }
|
|
95
|
+
.ui-sx--compact .ui-sx__title { font-size: 16px; }
|
|
96
|
+
.ui-sx--compact .ui-sx__body { font-size: 13px; margin-top: 3px; }
|
|
97
|
+
.ui-sx--compact .ui-sx__actions { margin-top: 0; margin-left: auto; flex: none; }
|
|
98
|
+
.ui-sx--compact .ui-sx__content { flex: 1; display: flex; align-items: center; gap: 16px; }
|
|
99
|
+
.ui-sx--compact .ui-sx__content > div:first-child,
|
|
100
|
+
.ui-sx--compact .ui-sx__title { min-width: 0; }
|
|
101
|
+
|
|
102
|
+
/* ---- The self-drawing check --------------------------------------------- */
|
|
103
|
+
.ui-sx__check { display: block; overflow: visible; }
|
|
104
|
+
/* Soft tinted disc that springs in behind the tick. */
|
|
105
|
+
.ui-sx__disc {
|
|
106
|
+
fill: var(--sx-tint); stroke: var(--sx-track); stroke-width: 1.5;
|
|
107
|
+
transform-origin: center; animation: ui-sx-pop .5s cubic-bezier(.22,1,.3,1) both;
|
|
108
|
+
}
|
|
109
|
+
/* The tick, stroked on via dash-offset (path length ~34). */
|
|
110
|
+
.ui-sx__tick {
|
|
111
|
+
fill: none; stroke: var(--sx-green); stroke-width: 5;
|
|
112
|
+
stroke-linecap: round; stroke-linejoin: round;
|
|
113
|
+
stroke-dasharray: 34; stroke-dashoffset: 34;
|
|
114
|
+
animation: ui-sx-draw .5s cubic-bezier(.6,0,.35,1) .28s forwards;
|
|
115
|
+
filter: drop-shadow(0 0 5px color-mix(in srgb, var(--green) 55%, transparent));
|
|
116
|
+
}
|
|
117
|
+
/* Burst ring that expands and fades once, framing the moment. */
|
|
118
|
+
.ui-sx__ring {
|
|
119
|
+
fill: none; stroke: var(--sx-green); stroke-width: 2;
|
|
120
|
+
transform-origin: center; opacity: 0;
|
|
121
|
+
animation: ui-sx-burst .7s cubic-bezier(.3,.7,.4,1) .2s forwards;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@keyframes ui-sx-pop {
|
|
125
|
+
0% { transform: scale(.4); opacity: 0; }
|
|
126
|
+
60% { transform: scale(1.06); opacity: 1; }
|
|
127
|
+
100% { transform: scale(1); }
|
|
128
|
+
}
|
|
129
|
+
@keyframes ui-sx-draw { to { stroke-dashoffset: 0; } }
|
|
130
|
+
@keyframes ui-sx-burst {
|
|
131
|
+
0% { transform: scale(.55); opacity: .7; }
|
|
132
|
+
100% { transform: scale(1.7); opacity: 0; }
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* ---- Confetti (opt-in) --------------------------------------------------- */
|
|
136
|
+
.ui-sx__confetti { position: absolute; inset: 0; z-index: 2; pointer-events: none; overflow: hidden; }
|
|
137
|
+
.ui-sx__piece {
|
|
138
|
+
position: absolute; top: -8%; width: 8px; height: 8px; border-radius: 2px;
|
|
139
|
+
opacity: 0; transform-origin: center;
|
|
140
|
+
animation: ui-sx-fall 2.4s cubic-bezier(.2,.6,.35,1) var(--sx-d, 0s) forwards;
|
|
141
|
+
scale: var(--sx-s, 1);
|
|
142
|
+
}
|
|
143
|
+
.ui-sx__piece--a { background: var(--accent); }
|
|
144
|
+
.ui-sx__piece--g { background: var(--green); }
|
|
145
|
+
.ui-sx__piece--c { background: var(--cyan); }
|
|
146
|
+
.ui-sx__piece--p { background: var(--purple-light); }
|
|
147
|
+
.ui-sx__piece--k { background: var(--pink); border-radius: 50%; }
|
|
148
|
+
@keyframes ui-sx-fall {
|
|
149
|
+
0% { opacity: 0; transform: translateY(-10px) rotate(0deg); }
|
|
150
|
+
12% { opacity: 1; }
|
|
151
|
+
100% { opacity: 0; transform: translateY(340px) rotate(var(--sx-r, 40deg)); }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* ---- Countdown ----------------------------------------------------------- */
|
|
155
|
+
/* Registered angle so the conic sweep can actually interpolate (a plain
|
|
156
|
+
conic-gradient background is not animatable). */
|
|
157
|
+
@property --sx-a { syntax: "<angle>"; inherits: false; initial-value: 360deg; }
|
|
158
|
+
.ui-sx__count { display: inline-flex; align-items: center; gap: 9px; margin-top: 18px; }
|
|
159
|
+
.ui-sx--hero .ui-sx__count { justify-content: center; }
|
|
160
|
+
.ui-sx__count-ring {
|
|
161
|
+
flex: none; width: 16px; height: 16px; border-radius: 50%;
|
|
162
|
+
background: conic-gradient(var(--green) var(--sx-a, 360deg), var(--surface-2) 0);
|
|
163
|
+
mask: radial-gradient(circle, transparent 5px, #000 6px);
|
|
164
|
+
-webkit-mask: radial-gradient(circle, transparent 5px, #000 6px);
|
|
165
|
+
animation: ui-sx-sweep var(--sx-secs, 5s) linear forwards;
|
|
166
|
+
}
|
|
167
|
+
@keyframes ui-sx-sweep { from { --sx-a: 360deg; } to { --sx-a: 0deg; } }
|
|
168
|
+
.ui-sx__count-text { color: var(--muted); font-size: 13px; }
|
|
169
|
+
.ui-sx__count-text b { color: var(--dim); font-weight: var(--weight-semibold); font-variant-numeric: tabular-nums; }
|
|
170
|
+
|
|
171
|
+
/* ---- Reduced motion — static check, no burst / confetti / sweep ---------- */
|
|
172
|
+
@media (prefers-reduced-motion: reduce) {
|
|
173
|
+
.ui-sx__glow--a, .ui-sx__glow--b { animation: none; }
|
|
174
|
+
.ui-sx__disc { animation: none; }
|
|
175
|
+
.ui-sx__tick { animation: none; stroke-dashoffset: 0; }
|
|
176
|
+
.ui-sx__ring { display: none; }
|
|
177
|
+
.ui-sx__confetti { display: none; }
|
|
178
|
+
.ui-sx__count-ring { animation: none; background: var(--surface-2); }
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* ---- Narrow — split stacks -------------------------------------------- */
|
|
182
|
+
@media (max-width: 560px) {
|
|
183
|
+
.ui-sx--split .ui-sx__inner { grid-template-columns: 1fr; }
|
|
184
|
+
.ui-sx--split .ui-sx__visual { border-right: 0; border-bottom: 1px solid var(--border); padding: 32px 24px; }
|
|
185
|
+
.ui-sx--split .ui-sx__content { padding: 28px 26px; text-align: center; }
|
|
186
|
+
.ui-sx--split .ui-sx__actions { justify-content: center; }
|
|
187
|
+
.ui-sx--compact .ui-sx__content { flex-direction: column; align-items: flex-start; gap: 10px; }
|
|
188
|
+
.ui-sx--compact .ui-sx__actions { margin-left: 0; }
|
|
189
|
+
}
|
package/src/styles/table.css
CHANGED
|
@@ -59,18 +59,5 @@
|
|
|
59
59
|
.ui-table__num--strong { color: var(--strong); font-weight: var(--weight-semibold); }
|
|
60
60
|
.ui-table__code { font-family: var(--font-mono); font-size: var(--text-sm); color: var(--muted); }
|
|
61
61
|
|
|
62
|
-
/*
|
|
63
|
-
.
|
|
64
|
-
text-align: center;
|
|
65
|
-
padding: 48px 24px;
|
|
66
|
-
color: var(--muted);
|
|
67
|
-
}
|
|
68
|
-
.ui-empty__icon {
|
|
69
|
-
width: 44px; height: 44px;
|
|
70
|
-
margin: 0 auto 14px;
|
|
71
|
-
color: var(--muted);
|
|
72
|
-
opacity: 0.6;
|
|
73
|
-
}
|
|
74
|
-
.ui-empty__icon svg { width: 100%; height: 100%; stroke: currentColor; fill: none; stroke-width: 1.5; }
|
|
75
|
-
.ui-empty__title { color: var(--text); font-size: var(--text-md); font-weight: var(--weight-medium); margin-bottom: 5px; }
|
|
76
|
-
.ui-empty__sub { font-size: var(--text-sm); max-width: 320px; margin: 0 auto; line-height: 1.55; }
|
|
62
|
+
/* The empty state (.ui-empty) — shown when a table/list has no rows — now
|
|
63
|
+
lives in styles/empty.css as a standalone component (illustration support). */
|
package/src/styles/topbar.css
CHANGED
|
@@ -21,16 +21,22 @@
|
|
|
21
21
|
align-items: center;
|
|
22
22
|
gap: 14px;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
/* Brand lockup (mark + wordmark) — self-contained so the mark stays optically
|
|
25
|
+
centered with the word, with an even gap, in ANY context (topbar, auth cards,
|
|
26
|
+
consent). These rules used to be scoped to `.topbar`, so a lockup dropped into
|
|
27
|
+
the consent/auth card fell back to inline layout: the mark rode the text
|
|
28
|
+
baseline with no gap between it and the word. */
|
|
29
|
+
.brand {
|
|
25
30
|
display: inline-flex;
|
|
26
31
|
align-items: center;
|
|
27
32
|
gap: 9px;
|
|
28
|
-
font-size: 13px;
|
|
29
33
|
font-weight: 600;
|
|
30
34
|
color: var(--strong);
|
|
31
35
|
text-decoration: none;
|
|
32
36
|
}
|
|
33
|
-
.
|
|
37
|
+
.brand svg { display: block; flex: none; }
|
|
38
|
+
/* Topbar wordmark runs a touch smaller than the auth-card lockup. */
|
|
39
|
+
.topbar .brand { font-size: 13px; }
|
|
34
40
|
.topbar .spacer { flex: 1; }
|
|
35
41
|
|
|
36
42
|
/* Deck / Text (segmented, pill) */
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
* apliteni-ui — BRAND PRIMITIVES (generated, do not edit)
|
|
3
|
+
*
|
|
4
|
+
* Synced from apliteni/design-system@954109e
|
|
5
|
+
* via: npm run tokens:sync
|
|
6
|
+
*
|
|
7
|
+
* The Apliteni umbrella-brand primitives: colour ramps + motion vocabulary
|
|
8
|
+
* (--duration-*, --easing-*). The upstream owns them; edit them there, not here.
|
|
9
|
+
* Our semantic tokens (--bg, --surface, --accent, ...) live in tokens.css and may
|
|
10
|
+
* reference these over time. Run `npm run tokens:drift` to see where they diverge.
|
|
11
|
+
* ========================================================================== */
|
|
12
|
+
:root {
|
|
13
|
+
--duration-instant: 80ms; /** Micro-interactions: checkbox tick, ripple. */
|
|
14
|
+
--duration-fast: 150ms; /** Hover states, button feedback. */
|
|
15
|
+
--duration-normal: 250ms; /** Panel open, dropdown, tooltip. */
|
|
16
|
+
--duration-slow: 400ms; /** Modal enter, page transition. */
|
|
17
|
+
--duration-slower: 600ms; /** Complex layout shifts, onboarding. */
|
|
18
|
+
--duration-crawl: 1000ms; /** Skeleton loaders, ambient loops. */
|
|
19
|
+
--easing-linear: linear; /** Progress bars, continuous animations. */
|
|
20
|
+
--easing-ease-in: cubic-bezier(0.4, 0, 1, 1); /** Elements leaving the screen. */
|
|
21
|
+
--easing-ease-out: cubic-bezier(0, 0, 0.2, 1); /** Elements entering the screen. */
|
|
22
|
+
--easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); /** Symmetrical transitions (e.g. toggle). */
|
|
23
|
+
--easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /** Playful overshoot — modals, cards. */
|
|
24
|
+
--easing-sharp: cubic-bezier(0.4, 0, 0.6, 1); /** Snappy dismiss, collapse. */
|
|
25
|
+
--color-apliteni-primary-black: #121212; /** Primary black. */
|
|
26
|
+
--color-apliteni-primary-violet: #914dff; /** Primary violet. */
|
|
27
|
+
--color-apliteni-primary-white: #ffffff; /** Primary white. */
|
|
28
|
+
--color-apliteni-supporting-red: #ff453a;
|
|
29
|
+
--color-apliteni-supporting-yellow: #ffd12f;
|
|
30
|
+
--color-apliteni-supporting-orange: #f79027;
|
|
31
|
+
--color-apliteni-supporting-green: #62c862;
|
|
32
|
+
--color-apliteni-supporting-blue: #3a86ff;
|
|
33
|
+
--color-apliteni-supporting-pink: #fa6c8f;
|
|
34
|
+
--color-apliteni-neutral-1: #121212;
|
|
35
|
+
--color-apliteni-neutral-2: #191919;
|
|
36
|
+
--color-apliteni-neutral-3: #434240;
|
|
37
|
+
--color-apliteni-neutral-4: #6a6866;
|
|
38
|
+
--color-apliteni-neutral-5: #928f8b;
|
|
39
|
+
--color-apliteni-neutral-6: #b9b5b1;
|
|
40
|
+
--color-apliteni-neutral-7: #e0dcd7;
|
|
41
|
+
--color-apliteni-neutral-8: #f1efed;
|
|
42
|
+
--color-apliteni-neutral-9: #ffffff;
|
|
43
|
+
--color-apliteni-red-1: #f33126;
|
|
44
|
+
--color-apliteni-red-2: #f93b30;
|
|
45
|
+
--color-apliteni-red-3: #ff453a;
|
|
46
|
+
--color-apliteni-red-4: #ff6754;
|
|
47
|
+
--color-apliteni-red-5: #ff836f;
|
|
48
|
+
--color-apliteni-red-6: #ff9d8a;
|
|
49
|
+
--color-apliteni-red-7: #ffb6a6;
|
|
50
|
+
--color-apliteni-red-8: #ffcfc3;
|
|
51
|
+
--color-apliteni-yellow-1: #f6c700;
|
|
52
|
+
--color-apliteni-yellow-2: #ffcf01;
|
|
53
|
+
--color-apliteni-yellow-3: #ffd12f;
|
|
54
|
+
--color-apliteni-yellow-4: #ffdb47;
|
|
55
|
+
--color-apliteni-yellow-5: #ffe16a;
|
|
56
|
+
--color-apliteni-yellow-6: #ffe789;
|
|
57
|
+
--color-apliteni-yellow-7: #ffeda7;
|
|
58
|
+
--color-apliteni-yellow-8: #fff3c5;
|
|
59
|
+
--color-apliteni-orange-1: #ff7700;
|
|
60
|
+
--color-apliteni-orange-2: #ff8100;
|
|
61
|
+
--color-apliteni-orange-3: #ff8f18;
|
|
62
|
+
--color-apliteni-orange-4: #ffa43a;
|
|
63
|
+
--color-apliteni-orange-5: #ffaa52;
|
|
64
|
+
--color-apliteni-orange-6: #fab671;
|
|
65
|
+
--color-apliteni-orange-7: #fbcb9a;
|
|
66
|
+
--color-apliteni-orange-8: #fddcbb;
|
|
67
|
+
--color-apliteni-green-1: #48a848;
|
|
68
|
+
--color-apliteni-green-2: #4faf4f;
|
|
69
|
+
--color-apliteni-green-3: #62c862;
|
|
70
|
+
--color-apliteni-green-4: #6be56b;
|
|
71
|
+
--color-apliteni-green-5: #76f076;
|
|
72
|
+
--color-apliteni-green-6: #8ef78e;
|
|
73
|
+
--color-apliteni-green-7: #a9ffa9;
|
|
74
|
+
--color-apliteni-green-8: #cbffcb;
|
|
75
|
+
--color-apliteni-blue-1: #3572d4;
|
|
76
|
+
--color-apliteni-blue-2: #3577df;
|
|
77
|
+
--color-apliteni-blue-3: #3a86ff;
|
|
78
|
+
--color-apliteni-blue-4: #5696ff;
|
|
79
|
+
--color-apliteni-blue-5: #6fa6ff;
|
|
80
|
+
--color-apliteni-blue-6: #87b6ff;
|
|
81
|
+
--color-apliteni-blue-7: #9fc5ff;
|
|
82
|
+
--color-apliteni-blue-8: #b7d4ff;
|
|
83
|
+
--color-apliteni-pink-1: #fc547e;
|
|
84
|
+
--color-apliteni-pink-2: #fb6288;
|
|
85
|
+
--color-apliteni-pink-3: #fa6c8f;
|
|
86
|
+
--color-apliteni-pink-4: #fa7b9b;
|
|
87
|
+
--color-apliteni-pink-5: #fb8da8;
|
|
88
|
+
--color-apliteni-pink-6: #fb9fb6;
|
|
89
|
+
--color-apliteni-pink-7: #fbb2c5;
|
|
90
|
+
--color-apliteni-pink-8: #fbc6d5;
|
|
91
|
+
--color-apliteni-violet-1: #914dff;
|
|
92
|
+
--color-apliteni-violet-2: #9b5dff;
|
|
93
|
+
--color-apliteni-violet-3: #a771ff;
|
|
94
|
+
--color-apliteni-violet-4: #b586fe;
|
|
95
|
+
--color-apliteni-violet-5: #c39bfc;
|
|
96
|
+
--color-apliteni-violet-6: #cfaffa;
|
|
97
|
+
--color-apliteni-violet-7: #dac3f8;
|
|
98
|
+
--color-apliteni-violet-8: #e5d8f5;
|
|
99
|
+
--color-apliteni-theme-dark-border: #333130; /** Default border. */
|
|
100
|
+
--color-apliteni-theme-dark-border-subtle: #2a2826; /** Subtle dividers. */
|
|
101
|
+
--color-apliteni-theme-light-accent-subtle: #efe1ff; /** Accent tint, badges. */
|
|
102
|
+
--color-apliteni-theme-dark-background: var(--color-apliteni-neutral-1); /** Page/app background. */
|
|
103
|
+
--color-apliteni-theme-dark-surface: var(--color-apliteni-neutral-2); /** Cards, panels. */
|
|
104
|
+
--color-apliteni-theme-dark-surface-raised: var(--color-apliteni-neutral-3); /** Elevated surfaces, tooltips. */
|
|
105
|
+
--color-apliteni-theme-dark-text-primary: var(--color-apliteni-primary-white); /** Headings, body. */
|
|
106
|
+
--color-apliteni-theme-dark-text-muted: var(--color-apliteni-neutral-5); /** Secondary text, labels. */
|
|
107
|
+
--color-apliteni-theme-dark-text-disabled: var(--color-apliteni-neutral-4); /** Disabled state. */
|
|
108
|
+
--color-apliteni-theme-dark-accent: var(--color-apliteni-primary-violet); /** Primary action, links. */
|
|
109
|
+
--color-apliteni-theme-dark-accent-hover: var(--color-apliteni-violet-2); /** Accent on hover. */
|
|
110
|
+
--color-apliteni-theme-dark-accent-subtle: var(--color-apliteni-violet-8); /** Accent tint, badges. */
|
|
111
|
+
--color-apliteni-theme-light-background: var(--color-apliteni-neutral-8); /** Page/app background. */
|
|
112
|
+
--color-apliteni-theme-light-surface: var(--color-apliteni-primary-white); /** Cards, panels. */
|
|
113
|
+
--color-apliteni-theme-light-surface-raised: var(--color-apliteni-neutral-9); /** Elevated surfaces, tooltips. */
|
|
114
|
+
--color-apliteni-theme-light-border: var(--color-apliteni-neutral-7); /** Default border. */
|
|
115
|
+
--color-apliteni-theme-light-border-subtle: var(--color-apliteni-neutral-8); /** Subtle dividers. */
|
|
116
|
+
--color-apliteni-theme-light-text-primary: var(--color-apliteni-primary-black); /** Headings, body. */
|
|
117
|
+
--color-apliteni-theme-light-text-muted: var(--color-apliteni-neutral-5); /** Secondary text, labels. */
|
|
118
|
+
--color-apliteni-theme-light-text-disabled: var(--color-apliteni-neutral-6); /** Disabled state. */
|
|
119
|
+
--color-apliteni-theme-light-accent: var(--color-apliteni-primary-violet); /** Primary action, links. */
|
|
120
|
+
--color-apliteni-theme-light-accent-hover: var(--color-apliteni-violet-1); /** Accent on hover. */
|
|
121
|
+
}
|
package/src/tokens/tokens.css
CHANGED
|
@@ -70,11 +70,24 @@
|
|
|
70
70
|
--tracking-wide: 0.04em;
|
|
71
71
|
--tracking-caps: 0.14em;
|
|
72
72
|
|
|
73
|
-
/* -- Motion -------------------------------------------------------------
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
/* -- Motion -------------------------------------------------------------
|
|
74
|
+
* Durations + easings are the Apliteni brand's motion vocabulary, synced
|
|
75
|
+
* from design-system into brand.generated.css (--duration-*, --easing-*).
|
|
76
|
+
* The kit's legacy --dur-* and --ease names alias onto them, so every existing
|
|
77
|
+
* component transitively consumes the brand primitives — one vocabulary,
|
|
78
|
+
* zero drift. Fallbacks keep tokens.css self-sufficient when imported
|
|
79
|
+
* without brand.generated.css. Delays are the kit's own (not a brand
|
|
80
|
+
* concern). The reusable effect layer lives in styles/motion.css. */
|
|
81
|
+
--ease: var(--easing-ease-in-out, cubic-bezier(0.4, 0, 0.2, 1));
|
|
82
|
+
--dur-fast: var(--duration-fast, 0.15s); /* 150ms — hover, press */
|
|
83
|
+
--dur-med: var(--duration-normal, 0.25s); /* 250ms — panels, dropdowns */
|
|
84
|
+
--dur-slow: var(--duration-slow, 0.4s); /* 400ms — enters, reveals */
|
|
85
|
+
|
|
86
|
+
--delay-1: 60ms;
|
|
87
|
+
--delay-2: 120ms;
|
|
88
|
+
--delay-3: 180ms;
|
|
89
|
+
--delay-4: 240ms;
|
|
90
|
+
--delay-5: 300ms;
|
|
78
91
|
|
|
79
92
|
/* -- Elevation (z) ------------------------------------------------------ */
|
|
80
93
|
--z-base: 1;
|