@averoui/tokens 1.0.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/src/theme.css ADDED
@@ -0,0 +1,277 @@
1
+ /*
2
+ * Avero theme tokens for Tailwind CSS v4.
3
+ *
4
+ * The default Tailwind palette, spacing, radius and type scale are kept unchanged, so every Tailwind
5
+ * class works as documented; this file only adds Avero's own design tokens on top of them.
6
+ */
7
+
8
+ @theme {
9
+ /* ---------------------------------------------------------------- Typography */
10
+ --font-sans:
11
+ Lahzeh, Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans",
12
+ Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
13
+ --font-code:
14
+ "Fira Code", "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
15
+
16
+ /* Micro sizes for dense UI such as badges, meta rows and legends. No line-height is defined, so
17
+ they inherit the surrounding line-height. */
18
+ --text-4xs: 0.5625rem; /* 9px */
19
+ --text-3xs: 0.625rem; /* 10px */
20
+ --text-2xs: 0.6875rem; /* 11px */
21
+ --text-sm-plus: 0.8125rem; /* 13px */
22
+ --text-md: 0.9375rem; /* 15px */
23
+ --text-xl-plus: 1.375rem; /* 22px */
24
+
25
+ --leading-prose: 1.8;
26
+ --leading-airy: 2.2;
27
+
28
+ /* ---------------------------------------------------------------- Brand and semantic colors */
29
+ --color-primary: #0a66c2;
30
+ --color-primary-hover: #004182;
31
+ --color-secondary: #f15928;
32
+
33
+ --color-background: #f4f4f4;
34
+ --color-foreground: #464646;
35
+
36
+ --color-surface: #ffffff;
37
+ --color-surface-glass: #ffffff6b;
38
+ --color-surface-muted: #f9fafc;
39
+ --color-surface-sunken: #e7e9ec;
40
+
41
+ --color-border-subtle: #d5d9df;
42
+
43
+ --color-text-strong: #242424;
44
+ --color-text-chrome: #8390a2;
45
+ --color-text-chrome-hover: #242424;
46
+ --color-text-subtle: #54595f;
47
+ /* Muted meta text. It is below AA for small text on white (see reports/contrast-report.md), so
48
+ themes that need strict contrast may darken it. */
49
+ --color-text-muted: var(--color-gray-400);
50
+
51
+ --color-accent-social: #ff9606;
52
+ /* Resting color of the footer social icons. */
53
+ --color-icon-muted: #c1c3c8;
54
+
55
+ /* Warning call-to-action colors. They are Tailwind v3's amber values, not v4's (v4 amber-500 is
56
+ #f99c00), so they need their own tokens. */
57
+ --color-warning: #f59e0b;
58
+ --color-warning-hover: #d97706;
59
+
60
+ --color-shadow-brand: #0a66c205;
61
+ --color-shadow-box: #0f172a14;
62
+
63
+ /* Chart palette. Recharts takes colours as props that become SVG attributes, so
64
+ `@averoui/charts` consumes these as token data rather than as utility classes. */
65
+ --color-chart-views: #6366f1;
66
+ --color-chart-likes: #f43f5e;
67
+ --color-chart-clicks: #8b5cf6;
68
+ --color-chart-comments: #10b981;
69
+
70
+ --color-chart-grid: #f1f5f9;
71
+ --color-chart-axis: #94a3b8;
72
+ --color-chart-cursor: #cbd5e1;
73
+
74
+ --color-chart-tooltip-surface: #1e293b;
75
+ --color-chart-tooltip-text: #f8fafc;
76
+ --color-chart-tooltip-label: #94a3b8;
77
+
78
+ /* ---------------------------------------------------------------- Radius */
79
+ --radius-huge: 1.75rem; /* 28px */
80
+ --radius-leaf: 2.5rem; /* 40px, asymmetric "leaf" corners */
81
+
82
+ /* ---------------------------------------------------------------- Elevation */
83
+ --shadow-brand-soft: 0 0 20px 0 var(--color-shadow-brand);
84
+ --shadow-brand-md: 0 0 35px 0 var(--color-shadow-brand);
85
+ --shadow-brand-lg: 0 0 40px 0 var(--color-shadow-brand);
86
+ --shadow-brand-hover: 0 2px 35px 0 var(--color-shadow-brand);
87
+ --shadow-brand-drop: 0 20px 0 0 var(--color-shadow-brand);
88
+ --shadow-box: 0 2px 4px var(--color-shadow-box);
89
+
90
+ --shadow-card-soft: 0 4px 25px rgba(0, 0, 0, 0.04);
91
+ --shadow-card-ambient: 0 0 25px 0 rgba(0, 0, 0, 0.05);
92
+ --shadow-card-faint: 0 4px 20px rgba(0, 0, 0, 0.02);
93
+ --shadow-card-subtle: 0 4px 20px rgba(0, 0, 0, 0.03);
94
+ --shadow-card-hairline: 0 2px 16px rgba(15, 23, 42, 0.06);
95
+ --shadow-card-raised: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
96
+
97
+ --shadow-elevated: 0 10px 40px rgba(15, 23, 42, 0.08);
98
+ --shadow-elevated-soft: 0 10px 40px rgba(15, 23, 42, 0.06);
99
+ --shadow-elevated-tight: 0 10px 35px rgba(15, 23, 42, 0.08);
100
+
101
+ --shadow-float: 0 20px 80px rgba(15, 23, 42, 0.08);
102
+ --shadow-float-hover: 0 20px 60px rgba(15, 23, 42, 0.12);
103
+ --shadow-float-wide: 0 8px 40px rgba(15, 23, 42, 0.12);
104
+ --shadow-float-strong: 0 16px 35px rgba(15, 23, 42, 0.22);
105
+
106
+ --shadow-pop: 0 4px 15px -3px rgba(0, 0, 0, 0.1);
107
+ --shadow-pop-wide: 0 8px 40px rgba(0, 0, 0, 0.08);
108
+
109
+ --shadow-modal: 0 25px 80px rgba(15, 23, 42, 0.2);
110
+ --shadow-lightbox: 0 25px 70px rgba(0, 0, 0, 0.35);
111
+
112
+ --drop-shadow-soft: 0 10px 30px rgba(0, 0, 0, 0.04);
113
+ --drop-shadow-amber-sm: 0 1px 4px rgba(251, 191, 36, 0.35);
114
+ --drop-shadow-amber-md: 0 2px 8px rgba(234, 179, 8, 0.45);
115
+
116
+ /* ---------------------------------------------------------------- Blur */
117
+ --blur-hair: 1px;
118
+ --blur-thin: 2px;
119
+ --blur-mist: 50px;
120
+ --blur-orb: 70px;
121
+ --blur-haze: 200px;
122
+
123
+ /* ---------------------------------------------------------------- Motion */
124
+ --animate-slide-up: slide-up 0.25s ease-out;
125
+ --animate-fade-in: fade-in 0.4s ease-out both;
126
+ --animate-fade: fade 0.5s;
127
+ --animate-blink: blink 1s step-end infinite;
128
+ --animate-blink-caret: blink-caret 0.75s step-end infinite;
129
+ --animate-sway: sway 3s ease-in-out forwards;
130
+ --animate-shimmer: shimmer 1.6s linear infinite;
131
+ --animate-spin-glow: spin-glow 1.5s cubic-bezier(0.5, 0, 0.5, 1) infinite;
132
+ /* Accordion open/close: height and opacity animate over 300ms ease-in-out. */
133
+ --animate-accordion-down: accordion-down 0.3s ease-in-out;
134
+ --animate-accordion-up: accordion-up 0.3s ease-in-out;
135
+
136
+ @keyframes accordion-down {
137
+ from {
138
+ height: 0;
139
+ opacity: 0;
140
+ }
141
+ to {
142
+ height: var(--radix-accordion-content-height);
143
+ opacity: 1;
144
+ }
145
+ }
146
+
147
+ @keyframes accordion-up {
148
+ from {
149
+ height: var(--radix-accordion-content-height);
150
+ opacity: 1;
151
+ }
152
+ to {
153
+ height: 0;
154
+ opacity: 0;
155
+ }
156
+ }
157
+
158
+ @keyframes slide-up {
159
+ 0% {
160
+ opacity: 0;
161
+ transform: translateY(100%);
162
+ }
163
+ to {
164
+ opacity: 1;
165
+ transform: translateY(0);
166
+ }
167
+ }
168
+
169
+ @keyframes fade-in {
170
+ 0% {
171
+ opacity: 0;
172
+ transform: translateY(12px);
173
+ }
174
+ to {
175
+ opacity: 1;
176
+ transform: translateY(0);
177
+ }
178
+ }
179
+
180
+ @keyframes fade {
181
+ 0% {
182
+ opacity: 0;
183
+ transform: translateY(-4px);
184
+ }
185
+ to {
186
+ opacity: 1;
187
+ transform: translateY(0);
188
+ }
189
+ }
190
+
191
+ @keyframes blink {
192
+ 0%,
193
+ to {
194
+ opacity: 1;
195
+ }
196
+ 50% {
197
+ opacity: 0;
198
+ }
199
+ }
200
+
201
+ @keyframes blink-caret {
202
+ 0%,
203
+ to {
204
+ border-color: transparent;
205
+ }
206
+ 50% {
207
+ border-color: var(--color-secondary);
208
+ }
209
+ }
210
+
211
+ @keyframes sway {
212
+ 0% {
213
+ opacity: 0;
214
+ transform: translateY(0) rotate(0);
215
+ }
216
+ 10% {
217
+ opacity: 1;
218
+ }
219
+ 50% {
220
+ transform: translateY(-6px) rotate(2deg);
221
+ }
222
+ 90% {
223
+ opacity: 1;
224
+ }
225
+ to {
226
+ opacity: 0;
227
+ transform: translateY(0) rotate(0);
228
+ }
229
+ }
230
+
231
+ @keyframes shimmer {
232
+ 0% {
233
+ background-position: -200% 0;
234
+ }
235
+ to {
236
+ background-position: 200% 0;
237
+ }
238
+ }
239
+
240
+ @keyframes spin-glow {
241
+ 0% {
242
+ transform: rotate(0);
243
+ box-shadow: 0 0 15px color-mix(in srgb, var(--color-indigo-500) 20%, transparent);
244
+ }
245
+ 50% {
246
+ box-shadow: 0 0 25px color-mix(in srgb, var(--color-indigo-500) 40%, transparent);
247
+ }
248
+ to {
249
+ transform: rotate(360deg);
250
+ box-shadow: 0 0 15px color-mix(in srgb, var(--color-indigo-500) 20%, transparent);
251
+ }
252
+ }
253
+ }
254
+
255
+ /*
256
+ * Layering. Tailwind v4 has no z-index theme namespace, so named layers are plain custom properties
257
+ * used as `z-(--z-modal)`. Gaps between the values leave room for new layers.
258
+ */
259
+ @layer theme {
260
+ :root,
261
+ :host {
262
+ --z-raised: 10;
263
+ --z-sticky: 50;
264
+ --z-drawer: 70;
265
+ --z-dropdown: 60;
266
+ --z-overlay: 100;
267
+ --z-overlay-content: 105;
268
+ --z-modal: 110;
269
+ --z-modal-content: 115;
270
+ --z-modal-nested: 120;
271
+ --z-popover: 999;
272
+ --z-top-layer: 2000;
273
+ --z-top-layer-content: 3000;
274
+ --z-toast: 9999;
275
+ --z-max: 10001;
276
+ }
277
+ }
@@ -0,0 +1,122 @@
1
+ /*
2
+ * Avero utilities: named utilities for scrollbars, loading effects and recurring gradients.
3
+ * Safe to import in any Tailwind v4 app; nothing here styles elements until a class is used.
4
+ *
5
+ * Gradients are defined with @apply of plain Tailwind classes, so they compile to the same CSS as
6
+ * the classes would inline (including Tailwind v4's oklab interpolation).
7
+ */
8
+
9
+ /* ---------------------------------------------------------------- Scrollbars */
10
+
11
+ @utility scrollbar-fancy {
12
+ scrollbar-width: thin;
13
+ scrollbar-color: color-mix(in srgb, var(--color-slate-900) 35%, transparent)
14
+ color-mix(in srgb, var(--color-slate-400) 12%, transparent);
15
+
16
+ &::-webkit-scrollbar {
17
+ width: 8px;
18
+ }
19
+
20
+ &::-webkit-scrollbar-track {
21
+ background: color-mix(in srgb, var(--color-slate-400) 6%, transparent);
22
+ border-radius: 999px;
23
+ }
24
+
25
+ &::-webkit-scrollbar-thumb {
26
+ background: color-mix(in srgb, var(--color-slate-900) 35%, transparent);
27
+ border: 2px solid color-mix(in srgb, var(--color-white) 75%, transparent);
28
+ border-radius: 999px;
29
+ }
30
+
31
+ &::-webkit-scrollbar-thumb:hover {
32
+ background: color-mix(in srgb, var(--color-slate-900) 50%, transparent);
33
+ }
34
+ }
35
+
36
+ @utility scrollbar-slim {
37
+ &::-webkit-scrollbar {
38
+ width: 4px;
39
+ }
40
+
41
+ &::-webkit-scrollbar-thumb {
42
+ background: var(--color-gray-300);
43
+ border-radius: 8px;
44
+ }
45
+ }
46
+
47
+ @utility scrollbar-hidden {
48
+ scrollbar-width: none;
49
+ -ms-overflow-style: none;
50
+
51
+ &::-webkit-scrollbar {
52
+ display: none;
53
+ }
54
+ }
55
+
56
+ /* ---------------------------------------------------------------- Loading and effects */
57
+
58
+ @utility skeleton-shimmer {
59
+ background: linear-gradient(
60
+ 90deg,
61
+ var(--color-slate-100) 25%,
62
+ var(--color-slate-200) 50%,
63
+ var(--color-slate-100) 75%
64
+ )
65
+ 0 0 / 200% 100%;
66
+ animation: var(--animate-shimmer);
67
+ }
68
+
69
+ @utility glow-ring {
70
+ animation: var(--animate-spin-glow);
71
+ }
72
+
73
+ @utility typing-caret {
74
+ animation: var(--animate-blink-caret);
75
+ }
76
+
77
+ /* ---------------------------------------------------------------- Gradients */
78
+
79
+ /* Profile cover. */
80
+ @utility gradient-cover {
81
+ @apply bg-gradient-to-r from-blue-600 via-indigo-600 to-purple-700;
82
+ }
83
+
84
+ /* Dark shade that sits on top of covers and media. */
85
+ @utility gradient-cover-shade {
86
+ @apply bg-gradient-to-t from-black/40 via-transparent to-transparent;
87
+ }
88
+
89
+ /* Hover overlay on showcase media. */
90
+ @utility gradient-media-shade {
91
+ @apply bg-gradient-to-t from-black/60 via-transparent to-transparent;
92
+ }
93
+
94
+ /* Dark call-to-action banner. */
95
+ @utility gradient-night {
96
+ @apply bg-gradient-to-r from-slate-900 via-indigo-950 to-slate-900;
97
+ }
98
+
99
+ /* Vertical accent bar beside page titles. */
100
+ @utility gradient-accent-bar {
101
+ @apply from-primary bg-gradient-to-b to-cyan-500;
102
+ }
103
+
104
+ /* Soft label pill. */
105
+ @utility gradient-label {
106
+ @apply from-primary/10 bg-gradient-to-r to-cyan-50;
107
+ }
108
+
109
+ /* Premium badge. */
110
+ @utility gradient-premium {
111
+ @apply bg-gradient-to-r from-amber-500/10 via-yellow-500/20 to-amber-500/10;
112
+ }
113
+
114
+ /* Illustration frame. */
115
+ @utility gradient-art-frame {
116
+ @apply bg-gradient-to-tr from-slate-50 to-indigo-50/50;
117
+ }
118
+
119
+ /* Brand fill. */
120
+ @utility gradient-brand {
121
+ @apply from-primary to-primary-hover bg-gradient-to-r;
122
+ }