reend-components 0.4.0 → 1.1.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.
@@ -103,18 +103,22 @@
103
103
  /* ═══ SHADOWS ═══ */
104
104
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3);
105
105
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3);
106
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4);
106
+ --shadow-lg:
107
+ 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.4);
107
108
  --shadow-glow: 0 0 20px hsl(var(--primary) / 0.2);
108
109
 
109
110
  /* ═══ Z-INDEX ═══ */
111
+ --z-below: -1;
110
112
  --z-base: 0;
111
- --z-dropdown: 10;
112
- --z-sticky: 20;
113
- --z-overlay: 30;
114
- --z-modal: 40;
115
- --z-popover: 50;
116
- --z-toast: 60;
117
- --z-tooltip: 70;
113
+ --z-raised: 1;
114
+ --z-dropdown: 100;
115
+ --z-sticky: 200;
116
+ --z-header: 1000;
117
+ --z-overlay: 1500;
118
+ --z-modal: 2000;
119
+ --z-toast: 3000;
120
+ --z-tooltip: 4000;
121
+ --z-max: 9999;
118
122
 
119
123
  /* ═══ ANIMATION — EASING ═══ */
120
124
  --ease-default: cubic-bezier(0.25, 0.8, 0.25, 1);
@@ -125,9 +129,191 @@
125
129
  /* ═══ ANIMATION — DURATION ═══ */
126
130
  --duration-instant: 100ms;
127
131
  --duration-fast: 150ms;
128
- --duration-normal: 250ms;
129
- --duration-slow: 400ms;
130
- --duration-slower: 700ms;
132
+ --duration-normal: 300ms;
133
+ --duration-slow: 500ms;
134
+ --duration-slower: 800ms;
135
+
136
+ /* ═══ GLOW ═══ */
137
+ --ef-yellow-glow: rgba(255, 212, 41, 0.15);
138
+
139
+ /* ═══ SEMANTIC TEXT TOKENS ═══ */
140
+ --text-primary: hsl(0 0% 94.1%);
141
+ --text-secondary: hsl(0 0% 87.8%);
142
+ --text-tertiary: hsl(0 0% 80%);
143
+ --text-muted: hsl(0 0% 60%);
144
+ --text-placeholder: hsl(0 0% 40%);
145
+ --text-disabled: hsl(0 0% 26.7%);
146
+ --text-link: hsl(201 66% 58%);
147
+ --text-accent: hsl(48 100% 58%);
148
+ --text-error: hsl(355 100% 64%);
149
+ --text-success: hsl(145 67% 51%);
150
+
151
+ /* ═══ BORDER ALIASES (spec-named) ═══ */
152
+ --border-subtle: 0 0% 100% / 0.06;
153
+ --border-default: 0 0% 100% / 0.1;
154
+
155
+ /* ═══ FONT VARS ═══ */
156
+ --font-display: 'Bender', 'Orbitron', sans-serif;
157
+ --font-ui: 'Orbitron', monospace;
158
+ --font-mono: 'JetBrains Mono', 'Courier New', monospace;
159
+ --font-body: 'Source Han Sans', 'Noto Sans SC', 'Inter', sans-serif;
160
+ --font-decorative: 'Morro', 'Bender', sans-serif;
161
+
162
+ /* ═══ SOFT COLORS ═══ */
163
+ --ef-red-soft: rgba(255, 71, 87, 0.1);
164
+ --ef-green-soft: rgba(46, 213, 115, 0.1);
165
+ --ef-orange-soft: rgba(255, 165, 2, 0.1);
166
+
167
+ /* ═══ OPACITY SCALE ═══ */
168
+ --opacity-overlay: 0.85;
169
+ --opacity-hover: 0.08;
170
+ --opacity-disabled: 0.38;
171
+ --opacity-border: 0.12;
172
+ --opacity-focus: 0.24;
173
+ --opacity-muted: 0.5;
174
+
175
+ /* ═══ GRADIENT TOKENS ═══ */
176
+ --ef-gradient-primary: linear-gradient(135deg, #ffd429 0%, #ffa502 100%);
177
+ --ef-gradient-overlay: linear-gradient(
178
+ 180deg,
179
+ rgba(10, 10, 10, 0.9) 0%,
180
+ rgba(10, 10, 10, 0.4) 50%,
181
+ rgba(10, 10, 10, 0.95) 100%
182
+ );
183
+ --ef-gradient-line: linear-gradient(
184
+ 90deg,
185
+ transparent 0%,
186
+ #ffd429 50%,
187
+ transparent 100%
188
+ );
189
+ --ef-gradient-card-hover: linear-gradient(
190
+ 145deg,
191
+ rgba(255, 212, 41, 0.05) 0%,
192
+ transparent 60%
193
+ );
194
+ --ef-gradient-scanline: repeating-linear-gradient(
195
+ 0deg,
196
+ transparent,
197
+ transparent 2px,
198
+ rgba(255, 255, 255, 0.015) 2px,
199
+ rgba(255, 255, 255, 0.015) 4px
200
+ );
201
+
202
+ /* ═══ CHART COLORS ═══ */
203
+ --chart-1: #ffd429;
204
+ --chart-2: #00e5ff;
205
+ --chart-3: #a55eea;
206
+ --chart-4: #2ed573;
207
+ --chart-5: #ffa502;
208
+ --chart-6: #4da8da;
209
+ --chart-7: #ff4757;
210
+ --chart-8: #7ec8e3;
211
+
212
+ /* ═══ BREAKPOINTS (reference only) ═══ */
213
+ --bp-mobile: 480px;
214
+ --bp-tablet: 768px;
215
+ --bp-laptop: 1024px;
216
+ --bp-desktop: 1280px;
217
+ --bp-wide: 1536px;
218
+
219
+ /* ═══ SAFE AREA INSETS (mobile notch / Dynamic Island) ═══ */
220
+ --safe-top: env(safe-area-inset-top, 0px);
221
+ --safe-right: env(safe-area-inset-right, 0px);
222
+ --safe-bottom: env(safe-area-inset-bottom, 0px);
223
+ --safe-left: env(safe-area-inset-left, 0px);
224
+
225
+ /* ═══ DUAL ACCENT — v3.0 ═══ */
226
+ --ef-lime: 84 100% 63%; /* #CBFF40 */
227
+ --ef-lime-dark: 84 80% 42%; /* #72C41A */
228
+ --ef-lime-glow: rgba(203, 255, 64, 0.25);
229
+ --accent-active: 84 100% 63%;
230
+
231
+ /* ═══ GLOW SHADOWS (no Y-offset — website resmi style) ═══ */
232
+ --shadow-glow-sm: 0 0 6px rgba(0, 0, 0, 0.25);
233
+ --shadow-glow-md: 0 0 12px rgba(0, 0, 0, 0.35);
234
+ --shadow-glow-lg: 0 0 24px rgba(0, 0, 0, 0.5);
235
+ --shadow-accent: 0 0 16px hsl(var(--primary) / 0.35);
236
+
237
+ /* ═══ SPACING SCALE ═══ */
238
+ --space-1: 4px;
239
+ --space-2: 8px;
240
+ --space-3: 12px;
241
+ --space-4: 16px;
242
+ --space-5: 20px;
243
+ --space-6: 24px;
244
+ --space-8: 32px;
245
+ --space-10: 40px;
246
+ --space-12: 48px;
247
+ --space-16: 64px;
248
+ --space-20: 80px;
249
+ --space-24: 96px;
250
+ --space-32: 128px;
251
+
252
+ /* ═══ GRID / LAYOUT ═══ */
253
+ --container-max: 1280px;
254
+ --container-padding: 24px;
255
+ --grid-columns: 12;
256
+ --grid-gutter: 24px;
257
+ --content-narrow: 680px;
258
+ --content-default: 960px;
259
+ --content-wide: 1200px;
260
+
261
+ /* ═══ TYPE SCALE ═══ */
262
+ --type-display-xl-size: 72px;
263
+ --type-display-lg-size: 56px;
264
+ --type-h1-size: 48px;
265
+ --type-h2-size: 36px;
266
+ --type-h3-size: 28px;
267
+ --type-h4-size: 22px;
268
+ --type-body-lg-size: 18px;
269
+ --type-body-size: 16px;
270
+ --type-body-sm-size: 14px;
271
+ --type-caption-size: 12px;
272
+ --type-overline-size: 11px;
273
+ --lh-heading: 1;
274
+ --lh-display: 0.95;
275
+ --lh-body: 1.6;
276
+ --lh-caption: 1.4;
277
+
278
+ /* ═══ ICON SIZES ═══ */
279
+ --icon-xs: 16px;
280
+ --icon-sm: 20px;
281
+ --icon-md: 24px;
282
+ --icon-lg: 32px;
283
+ --icon-xl: 48px;
284
+ --icon-2xl: 64px;
285
+
286
+ /* ═══ ASPECT RATIOS ═══ */
287
+ --ratio-banner: 21 / 9;
288
+ --ratio-feature: 16 / 9;
289
+ --ratio-portrait: 3 / 4;
290
+ --ratio-cinematic: 21 / 9;
291
+
292
+ /* ═══ BACKGROUND DECORATIONS ═══ */
293
+ --bg-grid-size: 60px;
294
+ --bg-grid-color: rgba(255, 255, 255, 0.03);
295
+ --bg-glow-primary: radial-gradient(
296
+ ellipse 80% 50% at 50% 0%,
297
+ hsl(var(--primary) / 0.12) 0%,
298
+ transparent 70%
299
+ );
300
+ --bg-glow-lime: radial-gradient(
301
+ ellipse 80% 50% at 50% 0%,
302
+ hsl(var(--ef-lime) / 0.1) 0%,
303
+ transparent 70%
304
+ );
305
+ --bg-diagonal: repeating-linear-gradient(
306
+ -45deg,
307
+ transparent,
308
+ transparent 4px,
309
+ rgba(255, 255, 255, 0.02) 4px,
310
+ rgba(255, 255, 255, 0.02) 8px
311
+ );
312
+
313
+ /* ═══ CORNER BRACKET ═══ */
314
+ --bracket-size: 24px;
315
+ --bracket-width: 2px;
316
+ --bracket-color: hsl(var(--primary) / 0.4);
131
317
  }
132
318
 
133
319
  /* ═══ LIGHT MODE ═══ */
@@ -147,7 +333,6 @@
147
333
  --ef-yellow: 42 90% 42%;
148
334
  --ef-yellow-dark: 42 85% 30%;
149
335
 
150
- /* Accent colors adjusted for light mode readability */
151
336
  --ef-blue-light: 196 50% 55%;
152
337
  --ef-blue-dark: 202 56% 30%;
153
338
  --ef-cyan: 186 80% 35%;
@@ -196,9 +381,60 @@
196
381
 
197
382
  /* Shadow adjustments for light mode */
198
383
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.08);
199
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.08);
200
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.12), 0 4px 6px -4px rgb(0 0 0 / 0.08);
384
+ --shadow-md:
385
+ 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.08);
386
+ --shadow-lg:
387
+ 0 10px 15px -3px rgb(0 0 0 / 0.12), 0 4px 6px -4px rgb(0 0 0 / 0.08);
201
388
  --shadow-glow: 0 0 20px hsl(var(--primary) / 0.25);
389
+ --shadow-glow-sm: 0 0 6px rgba(0, 0, 0, 0.1);
390
+ --shadow-glow-md: 0 0 12px rgba(0, 0, 0, 0.15);
391
+ --shadow-glow-lg: 0 0 24px rgba(0, 0, 0, 0.2);
392
+ --shadow-accent: 0 0 16px hsl(var(--primary) / 0.25);
393
+
394
+ --ef-lime: 84 90% 38%;
395
+ --ef-lime-dark: 84 80% 28%;
396
+ --ef-lime-glow: rgba(100, 160, 0, 0.2);
397
+ --accent-active: 84 90% 38%;
398
+ --bg-grid-color: rgba(0, 0, 0, 0.04);
399
+ --bg-glow-primary: radial-gradient(
400
+ ellipse 80% 50% at 50% 0%,
401
+ hsl(var(--primary) / 0.1) 0%,
402
+ transparent 70%
403
+ );
404
+ --bg-glow-lime: radial-gradient(
405
+ ellipse 80% 50% at 50% 0%,
406
+ hsl(var(--ef-lime) / 0.08) 0%,
407
+ transparent 70%
408
+ );
409
+ --bg-diagonal: repeating-linear-gradient(
410
+ -45deg,
411
+ transparent,
412
+ transparent 4px,
413
+ rgba(0, 0, 0, 0.015) 4px,
414
+ rgba(0, 0, 0, 0.015) 8px
415
+ );
416
+ --bracket-color: hsl(var(--primary) / 0.35);
417
+
418
+ /* Semantic text tokens — light mode */
419
+ --text-primary: hsl(0 0% 8%);
420
+ --text-secondary: hsl(0 0% 20%);
421
+ --text-tertiary: hsl(0 0% 35%);
422
+ --text-muted: hsl(0 0% 45%);
423
+ --text-placeholder: hsl(0 0% 55%);
424
+ --text-disabled: hsl(0 0% 65%);
425
+ --text-link: hsl(202 56% 35%);
426
+ --text-accent: hsl(42 90% 42%);
427
+ --text-error: hsl(355 85% 48%);
428
+ --text-success: hsl(145 60% 38%);
429
+
430
+ /* ef-gradient-scanline — dark lines on light surfaces */
431
+ --ef-gradient-scanline: repeating-linear-gradient(
432
+ 0deg,
433
+ transparent,
434
+ transparent 2px,
435
+ rgba(0, 0, 0, 0.04) 2px,
436
+ rgba(0, 0, 0, 0.04) 4px
437
+ );
202
438
  }
203
439
 
204
440
  /* ═══ BASE STYLES ═══ */
@@ -27,7 +27,10 @@ const reendPreset: Partial<Config> = {
27
27
  body: ["Source Han Sans", "Noto Sans SC", "Inter", "sans-serif"],
28
28
  },
29
29
  colors: {
30
- border: "hsl(var(--border))",
30
+ border: {
31
+ DEFAULT: "hsl(var(--border))",
32
+ strong: "hsl(var(--border-strong))",
33
+ },
31
34
  input: "hsl(var(--input))",
32
35
  ring: "hsl(var(--ring))",
33
36
  background: "hsl(var(--background))",
@@ -74,6 +77,8 @@ const reendPreset: Partial<Config> = {
74
77
  "pure-white": "hsl(var(--ef-pure-white))",
75
78
  yellow: "hsl(var(--ef-yellow))",
76
79
  "yellow-dark": "hsl(var(--ef-yellow-dark))",
80
+ lime: "hsl(var(--ef-lime))",
81
+ "lime-dark": "hsl(var(--ef-lime-dark))",
77
82
  blue: "hsl(var(--ef-blue))",
78
83
  "blue-light": "hsl(var(--ef-blue-light))",
79
84
  "blue-dark": "hsl(var(--ef-blue-dark))",
@@ -92,6 +97,25 @@ const reendPreset: Partial<Config> = {
92
97
  hover: "hsl(var(--surface-hover))",
93
98
  active: "hsl(var(--surface-active))",
94
99
  },
100
+ chart: {
101
+ 1: "var(--chart-1)",
102
+ 2: "var(--chart-2)",
103
+ 3: "var(--chart-3)",
104
+ 4: "var(--chart-4)",
105
+ 5: "var(--chart-5)",
106
+ 6: "var(--chart-6)",
107
+ 7: "var(--chart-7)",
108
+ 8: "var(--chart-8)",
109
+ },
110
+ },
111
+ // ─── Opacity scale ────────────────────────────────────────────────────
112
+ opacity: {
113
+ overlay: "var(--opacity-overlay)",
114
+ hover: "var(--opacity-hover)",
115
+ disabled: "var(--opacity-disabled)",
116
+ border: "var(--opacity-border)",
117
+ focus: "var(--opacity-focus)",
118
+ muted: "var(--opacity-muted)",
95
119
  },
96
120
  borderRadius: {
97
121
  lg: "var(--radius)",
@@ -104,25 +128,32 @@ const reendPreset: Partial<Config> = {
104
128
  md: "var(--shadow-md)",
105
129
  lg: "var(--shadow-lg)",
106
130
  glow: "var(--shadow-glow)",
131
+ "glow-sm": "var(--shadow-glow-sm)",
132
+ "glow-md": "var(--shadow-glow-md)",
133
+ "glow-lg": "var(--shadow-glow-lg)",
134
+ accent: "var(--shadow-accent)",
107
135
  },
108
136
  // ─── Z-Index scale matching CSS vars ────────────────────────────────
109
137
  zIndex: {
138
+ below: "-1",
110
139
  base: "0",
111
- dropdown: "10",
112
- sticky: "20",
113
- overlay: "30",
114
- modal: "40",
115
- popover: "50",
116
- toast: "60",
117
- tooltip: "70",
140
+ raised: "1",
141
+ dropdown: "100",
142
+ sticky: "200",
143
+ header: "1000",
144
+ overlay: "1500",
145
+ modal: "2000",
146
+ toast: "3000",
147
+ tooltip: "4000",
148
+ max: "9999",
118
149
  },
119
150
  // ─── Transition durations matching CSS vars ──────────────────────────
120
151
  transitionDuration: {
121
152
  instant: "100ms",
122
153
  fast: "150ms",
123
- normal: "250ms",
124
- slow: "400ms",
125
- slower: "700ms",
154
+ normal: "300ms",
155
+ slow: "500ms",
156
+ slower: "800ms",
126
157
  },
127
158
  // ─── Transition easing matching CSS vars ─────────────────────────────
128
159
  transitionTimingFunction: {
@@ -131,6 +162,83 @@ const reendPreset: Partial<Config> = {
131
162
  sharp: "cubic-bezier(0.4, 0, 0.2, 1)",
132
163
  smooth: "cubic-bezier(0.45, 0, 0.55, 1)",
133
164
  },
165
+ // ─── Type scale (v3.0) ───────────────────────────────────────────────
166
+ fontSize: {
167
+ "display-xl": [
168
+ "var(--type-display-xl-size,72px)",
169
+ { lineHeight: "var(--lh-display,0.95)" },
170
+ ],
171
+ "display-lg": [
172
+ "var(--type-display-lg-size,56px)",
173
+ { lineHeight: "var(--lh-display,0.95)" },
174
+ ],
175
+ h1: [
176
+ "var(--type-h1-size,48px)",
177
+ { lineHeight: "var(--lh-heading,1.0)" },
178
+ ],
179
+ h2: [
180
+ "var(--type-h2-size,36px)",
181
+ { lineHeight: "var(--lh-heading,1.0)" },
182
+ ],
183
+ h3: [
184
+ "var(--type-h3-size,28px)",
185
+ { lineHeight: "var(--lh-heading,1.0)" },
186
+ ],
187
+ h4: [
188
+ "var(--type-h4-size,22px)",
189
+ { lineHeight: "var(--lh-heading,1.0)" },
190
+ ],
191
+ "body-lg": [
192
+ "var(--type-body-lg-size,18px)",
193
+ { lineHeight: "var(--lh-body,1.6)" },
194
+ ],
195
+ body: [
196
+ "var(--type-body-size,16px)",
197
+ { lineHeight: "var(--lh-body,1.6)" },
198
+ ],
199
+ "body-sm": [
200
+ "var(--type-body-sm-size,14px)",
201
+ { lineHeight: "var(--lh-body,1.6)" },
202
+ ],
203
+ caption: [
204
+ "var(--type-caption-size,12px)",
205
+ { lineHeight: "var(--lh-caption,1.4)" },
206
+ ],
207
+ overline: [
208
+ "var(--type-overline-size,11px)",
209
+ { lineHeight: "1.2", letterSpacing: "0.12em" },
210
+ ],
211
+ },
212
+ // ─── Line heights (v3.0) ─────────────────────────────────────────────
213
+ lineHeight: {
214
+ heading: "var(--lh-heading, 1.0)",
215
+ display: "var(--lh-display, 0.95)",
216
+ body: "var(--lh-body, 1.6)",
217
+ caption: "var(--lh-caption, 1.4)",
218
+ },
219
+ // ─── Aspect ratios (v3.0) ────────────────────────────────────────────
220
+ aspectRatio: {
221
+ banner: "21 / 9",
222
+ feature: "16 / 9",
223
+ portrait: "3 / 4",
224
+ cinematic: "21 / 9",
225
+ },
226
+ // ─── Spacing tokens (v3.0 reference) ────────────────────────────────
227
+ spacing: {
228
+ "space-1": "var(--space-1, 4px)",
229
+ "space-2": "var(--space-2, 8px)",
230
+ "space-3": "var(--space-3, 12px)",
231
+ "space-4": "var(--space-4, 16px)",
232
+ "space-5": "var(--space-5, 20px)",
233
+ "space-6": "var(--space-6, 24px)",
234
+ "space-8": "var(--space-8, 32px)",
235
+ "space-10": "var(--space-10, 40px)",
236
+ "space-12": "var(--space-12, 48px)",
237
+ "space-16": "var(--space-16, 64px)",
238
+ "space-20": "var(--space-20, 80px)",
239
+ "space-24": "var(--space-24, 96px)",
240
+ "space-32": "var(--space-32, 128px)",
241
+ },
134
242
  // ─── Keyframes ───────────────────────────────────────────────────────
135
243
  keyframes: {
136
244
  "accordion-down": {
@@ -149,10 +257,26 @@ const reendPreset: Partial<Config> = {
149
257
  from: { opacity: "0", transform: "translateY(16px)" },
150
258
  to: { opacity: "1", transform: "translateY(0)" },
151
259
  },
260
+ fadeInDown: {
261
+ from: { opacity: "0", transform: "translateY(-16px)" },
262
+ to: { opacity: "1", transform: "translateY(0)" },
263
+ },
152
264
  slideInRight: {
153
- from: { opacity: "0", transform: "translateX(-10px)" },
265
+ from: { opacity: "0", transform: "translateX(-24px)" },
154
266
  to: { opacity: "1", transform: "translateX(0)" },
155
267
  },
268
+ scaleIn: {
269
+ from: { opacity: "0", transform: "scale(0.92)" },
270
+ to: { opacity: "1", transform: "scale(1)" },
271
+ },
272
+ rotate: {
273
+ from: { transform: "rotate(0deg)" },
274
+ to: { transform: "rotate(360deg)" },
275
+ },
276
+ loadingDot: {
277
+ "0%, 80%, 100%": { opacity: "0.2", transform: "scale(0.8)" },
278
+ "40%": { opacity: "1", transform: "scale(1)" },
279
+ },
156
280
  slideDown: {
157
281
  from: { transform: "scaleY(0)", opacity: "0" },
158
282
  to: { transform: "scaleY(1)", opacity: "1" },
@@ -193,13 +317,32 @@ const reendPreset: Partial<Config> = {
193
317
  to: { opacity: "1", transform: "translateY(0)" },
194
318
  },
195
319
  "dialog-in": {
196
- from: { opacity: "0", scale: "0.96" },
197
- to: { opacity: "1", scale: "1" },
320
+ from: { opacity: "0", transform: "translate(-50%, -48%) scale(0.96)" },
321
+ to: { opacity: "1", transform: "translate(-50%, -50%) scale(1)" },
322
+ },
323
+ "switch-thumb-spin": {
324
+ from: { transform: "rotate(0deg)" },
325
+ to: { transform: "rotate(360deg)" },
198
326
  },
199
327
  "frequency-bar": {
200
328
  "0%": { transform: "scaleY(0.15)" },
201
329
  "100%": { transform: "scaleY(1)" },
202
330
  },
331
+ slideUp: {
332
+ from: { transform: "translateY(100%)", opacity: "0" },
333
+ to: { transform: "translateY(0)", opacity: "1" },
334
+ },
335
+ shake: {
336
+ "0%, 100%": { transform: "translateX(0)" },
337
+ "20%, 60%": { transform: "translateX(-4px)" },
338
+ "40%, 80%": { transform: "translateX(4px)" },
339
+ },
340
+ particleDrift: {
341
+ "0%": { transform: "translate(0, 0)" },
342
+ "33%": { transform: "translate(2px, -3px)" },
343
+ "66%": { transform: "translate(-2px, 2px)" },
344
+ "100%": { transform: "translate(0, 0)" },
345
+ },
203
346
  },
204
347
  // ─── Animation utilities ─────────────────────────────────────────────
205
348
  animation: {
@@ -207,18 +350,27 @@ const reendPreset: Partial<Config> = {
207
350
  "accordion-up": "accordion-up 0.2s ease-out",
208
351
  "fade-in": "fadeIn 0.3s ease forwards",
209
352
  "fade-in-up": "fadeInUp 0.4s var(--ease-default, ease) forwards",
210
- "slide-in-right": "slideInRight 0.3s var(--ease-smooth, ease) forwards",
353
+ "fade-in-down": "fadeInDown 0.4s var(--ease-default, ease) forwards",
354
+ "slide-in-right": "slideInRight 0.4s var(--ease-default, ease) forwards",
355
+ "scale-in": "scaleIn 0.3s var(--ease-default, ease) forwards",
356
+ rotate: "rotate 1s linear infinite",
357
+ "loading-dot": "loadingDot 1.4s ease-in-out infinite both",
211
358
  "slide-down": "slideDown 0.3s ease forwards",
212
359
  glitch: "glitch 3s infinite",
213
360
  "cursor-blink": "cursorBlink 1s step-end infinite",
214
361
  "diamond-spin": "diamondSpin 0.8s linear infinite",
362
+ "switch-spin": "switch-thumb-spin 0.35s cubic-bezier(0.34, 1.56, 0.64, 1) both",
215
363
  "pulse-glow": "pulseGlow 2s ease-in-out infinite",
216
364
  "scan-line": "scanLine 2s linear infinite",
217
365
  skeleton: "skeletonShimmer 1.5s infinite",
218
366
  shrink: "shrink 5s linear forwards",
219
367
  "count-up": "countUp 0.4s var(--ease-default, ease) forwards",
220
- "dialog-in": "dialog-in 0.2s var(--ease-default, ease) forwards",
368
+ "dialog-in": "dialog-in 0.3s var(--ease-default, ease) forwards",
221
369
  "frequency-bar": "frequency-bar 0.8s ease-in-out infinite alternate",
370
+ "slide-up": "slideUp 0.3s var(--ease-sharp, ease) forwards",
371
+ shake: "shake 0.4s var(--ease-sharp, ease)",
372
+ "slide-up": "slideUp 0.3s var(--ease-sharp, ease) forwards",
373
+ "particle-drift": "particleDrift 3s ease-in-out infinite",
222
374
  },
223
375
  },
224
376
  },
@@ -294,6 +446,36 @@ const reendPreset: Partial<Config> = {
294
446
  ".text-glow-yellow": {
295
447
  "text-shadow": "0 0 20px hsl(var(--primary) / 0.3)",
296
448
  },
449
+ ".glow-lime": {
450
+ "box-shadow": "0 0 20px hsl(var(--ef-lime) / 0.2)",
451
+ },
452
+ ".text-glow-lime": {
453
+ "text-shadow": "0 0 16px hsl(var(--ef-lime) / 0.4)",
454
+ },
455
+ });
456
+
457
+ addUtilities({
458
+ ".bg-grid-pattern": {
459
+ "background-image":
460
+ "linear-gradient(var(--bg-grid-color,rgba(255,255,255,0.03)) 1px, transparent 1px), linear-gradient(90deg, var(--bg-grid-color,rgba(255,255,255,0.03)) 1px, transparent 1px)",
461
+ "background-size":
462
+ "var(--bg-grid-size,60px) var(--bg-grid-size,60px)",
463
+ },
464
+ ".bg-radial-glow": {
465
+ "background-image": "var(--bg-glow-primary)",
466
+ "background-repeat": "no-repeat",
467
+ "background-position": "center top",
468
+ "background-size": "100% 600px",
469
+ },
470
+ ".bg-radial-glow-lime": {
471
+ "background-image": "var(--bg-glow-lime)",
472
+ "background-repeat": "no-repeat",
473
+ "background-position": "center top",
474
+ "background-size": "100% 600px",
475
+ },
476
+ ".bg-diagonal-lines": {
477
+ "background-image": "var(--bg-diagonal)",
478
+ },
297
479
  });
298
480
 
299
481
  addUtilities({