Testudines commited on
Commit
ef3065a
·
verified ·
1 Parent(s): 06705e3

mach eine profisionelle webapp: Anforderungen: react, typescript, mariadb, sequelized unsere webapp ist eine smart inventory und sales managment website für kleine läden und unternehmen zur übersicht der bestellten waren, lieferungen, matierialien im lager usw. sales mit intelligten grafiken anzeigen lassen, basierend auf den waren und den lieferungen vorschläge zur nachbestellung und ersparnissen geben powered by AI. Layout: Hauptseite: Oben links Unser Logo SISM (Smart inventory & Sales inventory ausgeschrieben) in der selben Zeile rechts kommt der Profilbutton unter den beiden kommt die navbar die gut smart und responsible ist, mit den kategorien: Dashboard, Sales, Lieferungen, Empfehlungen von AI, Analysen mit der Zeit, Lieferungen usw.; Designe jede website auch passend responsible und profisionell. du kannst entscheiden wie alles ausschaut bei den sub websites, zb sales oder analyse. framer-motion

Browse files

react-spring
react-transition-group
gsap
react-scroll-motion
react-scroll-parallax mach es mit diesen librarys und NICHT MIT TAILWIND nur diese librarys. wir sind standardmäßig wenn wir uns einloggen beim dashboard und können mit der navbar zu den sub websiten hin kommen. der profilbutton ist ein profilbild das beim einloggen festgelegt wird. wenn man auf den profilbutton klickt kommt das: Profil anzeigen / bearbeiten

Name, E-Mail, evtl. Rolle (Admin, Mitarbeiter etc.).

Profilbild ändern.

Persönliche Daten editieren.

Einstellungen

Passwort ändern.

Sprache / Locale wählen.

Benachrichtigungseinstellungen (z. B. E-Mail, Push, In-App).

Darstellung (Theme hell/dunkel).

Firmen-/Team-Einstellungen (falls relevant)

Rollen & Rechte verwalten.

Mitarbeiter hinzufügen/entfernen.

Rechnungsadresse / Abrechnung (sofern dein System das bietet). mach auch eine login und auslog page, mach es smoothe animationen. Dashboard Startseite nach Login, Überblick & Entscheidungen erleichtern • KPI-Widgets: Lagerbestand gesamt, Artikel mit niedrigem Bestand, verzögerte Lieferungen, Umsätze (heute, Woche, Monat)
• Graphische Übersicht: Trends, Charts („Top Verkäufer“, Bestandsentwicklung)
• Alerts / Warnmeldungen: z. B. „Dieser Artikel droht ausverkauft zu sein“, „Lieferant XY verzögert“
• Schnellzugriffe / Shortcuts: z. B. „Bestellung aufgeben“, „Lieferung bestätigen“, „Inventur starten“
Sales Verkauf & Umsatz, Historie & Prognose • Übersicht vergangener Sales: Datum, Produkt, Menge, Umsatz
• Filter nach Zeitraum / Produktkategorien / Filialen
• Graphen: Umsatztrend, Durchschnittsverkauf pro Artikel, Top-Produkte
• Prognose: Welche Produkte werden voraussichtlich stark verkaufen
• Vergleichs-Views: Woche vs Woche, Monat vs Monat, Saisonvergleiche
Lieferungen (Deliveries) Verwaltung der Bestellungen & Lieferkette • Bestellungen, offene Lieferungen, gelieferte Warenstatus
• Lieferanteninformation: Lead Time, Zuverlässigkeit
• Ggf. Tracking von Lieferungen
• Erinnerungen bei Verspätungen
• Möglichkeit, Lieferungen zu bestätigen / zurückzusetzen / zu korrigieren
Empfehlungen von AI Intelligente Vorschläge zur Optimierung von Bestand & Kosten • Nachbestellungsvorschläge: welche Artikel bald ausgehen
• Einsparpotenziale erkennen (z. B. Mengenrabatte, bessere Lieferanten)
• Szenarien: „Wenn ich jetzt bestelle, vs später bestelle“
• Prognosemodell: Nachfrage, Saisonalität, Absatzgeschwindigkeit
Analysen über die Zeit (Analytics / Reports) Tiefere Einblicke & strategische Auswertung • Zeitreihenanalysen: Umsatz, Lagerbestände, Materialverbrauch über Wochen, Monate, Jahre
• Segmentierung: nach Artikelgruppen, Lieferanten, Filialen etc.
• Vergleichsanalysen: Saison, Vorjahre, Forecast vs Realität
• Berichte & Exportfunktionen (CSV, PDF)
• Visualizations: Heatmaps, Balken, Linien, evtl. interaktive Diagramme. Login / Logout Authentifizierung • Login‐Schirm: E-Mail / Nutzername + Passwort
• Anmeldung / Verifizieren
• Passwort vergessen / Wiederherstellen
• Logout
• ggf. Zwei-Faktor Authentifizierung
Sonstige Module (optional) Erweiterte Funktion / Support • Inventur / Zählung Modul
• Lieferantenmanagement
• Materialverwaltung (nicht nur fertige Waren)
• Barcode / QR Code Integration
• Support / Hilfe / FAQ
• Benachrichtigungen / Alerts Historie. kannst du uns bitte noch extrawagante schirft hinzufügen, sodass die Schrift auch gleich gut und snprechend iszt

Files changed (2) hide show
  1. README.md +8 -5
  2. index.html +326 -18
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Stocksync Pro
3
- emoji: 🏢
4
- colorFrom: gray
5
- colorTo: yellow
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: StockSync Pro 🚀
3
+ colorFrom: purple
4
+ colorTo: pink
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://deepsite.hf.co).
index.html CHANGED
@@ -1,19 +1,327 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>StockSync Pro | Smart Inventory Dashboard</title>
7
+ <link rel="icon" type="image/x-icon" href="https://static.photos/technology/200x200/42">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://unpkg.com/feather-icons"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.globe.min.js"></script>
11
+ <style>
12
+ @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
13
+ :root {
14
+ --primary: #6366f1;
15
+ --secondary: #10b981;
16
+ }
17
+ body {
18
+ font-family: 'Space Grotesk', sans-serif;
19
+ overflow-x: hidden;
20
+ }
21
+ .gradient-text {
22
+ background: linear-gradient(90deg, var(--primary), var(--secondary));
23
+ -webkit-background-clip: text;
24
+ background-clip: text;
25
+ color: transparent;
26
+ }
27
+ .card-hover:hover {
28
+ transform: translateY(-5px);
29
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
30
+ }
31
+ </style>
32
+ </head>
33
+ <body class="bg-gray-50" id="vanta-bg">
34
+ <!-- Navigation -->
35
+ <nav class="fixed w-full bg-white bg-opacity-90 backdrop-blur-md z-50 shadow-sm">
36
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
37
+ <div class="flex justify-between h-16 items-center">
38
+ <div class="flex items-center">
39
+ <div class="flex-shrink-0 flex items-center">
40
+ <span class="text-2xl font-bold gradient-text">SISM</span>
41
+ </div>
42
+ <div class="hidden sm:ml-6 sm:flex sm:space-x-8">
43
+ <a href="#" class="border-indigo-500 text-gray-900 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium">Dashboard</a>
44
+ <a href="#" class="border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium">Sales</a>
45
+ <a href="#" class="border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium">Deliveries</a>
46
+ <a href="#" class="border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium">AI Recs</a>
47
+ <a href="#" class="border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium">Analytics</a>
48
+ </div>
49
+ </div>
50
+ <div class="hidden sm:ml-6 sm:flex sm:items-center">
51
+ <button class="bg-white p-1 rounded-full text-gray-400 hover:text-gray-500 focus:outline-none">
52
+ <i data-feather="bell"></i>
53
+ </button>
54
+ <div class="ml-3 relative">
55
+ <div>
56
+ <button type="button" class="flex text-sm rounded-full focus:outline-none" id="user-menu-button">
57
+ <img class="h-8 w-8 rounded-full" src="https://static.photos/people/200x200/23" alt="">
58
+ </button>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </nav>
65
+
66
+ <!-- Main Content -->
67
+ <div class="pt-16 pb-12">
68
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
69
+ <!-- Header -->
70
+ <div class="mt-8">
71
+ <div class="flex justify-between items-center">
72
+ <h1 class="text-3xl font-bold text-gray-900">Dashboard Overview</h1>
73
+ <div class="flex space-x-4">
74
+ <button class="px-4 py-2 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 transition duration-300 flex items-center">
75
+ <i data-feather="plus" class="mr-2"></i> New Order
76
+ </button>
77
+ <button class="px-4 py-2 bg-emerald-600 text-white rounded-lg hover:bg-emerald-700 transition duration-300 flex items-center">
78
+ <i data-feather="refresh-cw" class="mr-2"></i> Refresh
79
+ </button>
80
+ </div>
81
+ </div>
82
+ <p class="mt-2 text-gray-600">Last updated: <span class="font-medium">Just now</span></p>
83
+ </div>
84
+
85
+ <!-- KPI Cards -->
86
+ <div class="mt-8 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-4">
87
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm card-hover transition duration-300">
88
+ <div class="flex items-center">
89
+ <div class="p-3 rounded-lg bg-indigo-50">
90
+ <i data-feather="box" class="text-indigo-600"></i>
91
+ </div>
92
+ <div class="ml-4">
93
+ <h3 class="text-lg font-medium text-gray-500">Total Stock</h3>
94
+ <p class="text-2xl font-bold mt-1">1,842 <span class="text-sm text-green-500 ml-1">(+2.3%)</span></p>
95
+ </div>
96
+ </div>
97
+ </div>
98
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm card-hover transition duration-300">
99
+ <div class="flex items-center">
100
+ <div class="p-3 rounded-lg bg-red-50">
101
+ <i data-feather="alert-triangle" class="text-red-600"></i>
102
+ </div>
103
+ <div class="ml-4">
104
+ <h3 class="text-lg font-medium text-gray-500">Low Stock</h3>
105
+ <p class="text-2xl font-bold mt-1">37 <span class="text-sm text-red-500 ml-1">(+5.7%)</span></p>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm card-hover transition duration-300">
110
+ <div class="flex items-center">
111
+ <div class="p-3 rounded-lg bg-yellow-50">
112
+ <i data-feather="truck" class="text-yellow-600"></i>
113
+ </div>
114
+ <div class="ml-4">
115
+ <h3 class="text-lg font-medium text-gray-500">Delayed</h3>
116
+ <p class="text-2xl font-bold mt-1">12 <span class="text-sm text-yellow-500 ml-1">(-1.2%)</span></p>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm card-hover transition duration-300">
121
+ <div class="flex items-center">
122
+ <div class="p-3 rounded-lg bg-green-50">
123
+ <i data-feather="dollar-sign" class="text-green-600"></i>
124
+ </div>
125
+ <div class="ml-4">
126
+ <h3 class="text-lg font-medium text-gray-500">Today's Sales</h3>
127
+ <p class="text-2xl font-bold mt-1">$24,892 <span class="text-sm text-green-500 ml-1">(+8.1%)</span></p>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+ <!-- Charts Section -->
134
+ <div class="mt-8 grid grid-cols-1 lg:grid-cols-2 gap-6">
135
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
136
+ <div class="flex justify-between items-center">
137
+ <h2 class="text-xl font-bold text-gray-900">Sales Trend (Last 7 Days)</h2>
138
+ <select class="text-sm border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500">
139
+ <option>This Week</option>
140
+ <option>Last Week</option>
141
+ <option>This Month</option>
142
+ </select>
143
+ </div>
144
+ <div class="mt-6 h-64 bg-gray-50 rounded-lg flex items-center justify-center">
145
+ <p class="text-gray-500">Interactive chart will appear here</p>
146
+ </div>
147
+ </div>
148
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
149
+ <div class="flex justify-between items-center">
150
+ <h2 class="text-xl font-bold text-gray-900">Top Products</h2>
151
+ <select class="text-sm border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500">
152
+ <option>By Revenue</option>
153
+ <option>By Units Sold</option>
154
+ <option>By Profit</option>
155
+ </select>
156
+ </div>
157
+ <div class="mt-6 space-y-4">
158
+ <div class="flex items-center">
159
+ <div class="w-8 h-8 bg-indigo-100 rounded-full flex items-center justify-center">
160
+ <span class="text-xs font-bold text-indigo-800">1</span>
161
+ </div>
162
+ <div class="ml-4 flex-1">
163
+ <div class="flex justify-between">
164
+ <span class="text-sm font-medium text-gray-900">Wireless Earbuds Pro</span>
165
+ <span class="text-sm font-medium text-gray-900">$12,482</span>
166
+ </div>
167
+ <div class="mt-1 w-full bg-gray-200 rounded-full h-1.5">
168
+ <div class="bg-indigo-600 h-1.5 rounded-full" style="width: 72%"></div>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ <div class="flex items-center">
173
+ <div class="w-8 h-8 bg-emerald-100 rounded-full flex items-center justify-center">
174
+ <span class="text-xs font-bold text-emerald-800">2</span>
175
+ </div>
176
+ <div class="ml-4 flex-1">
177
+ <div class="flex justify-between">
178
+ <span class="text-sm font-medium text-gray-900">Smart Watch X9</span>
179
+ <span class="text-sm font-medium text-gray-900">$9,845</span>
180
+ </div>
181
+ <div class="mt-1 w-full bg-gray-200 rounded-full h-1.5">
182
+ <div class="bg-emerald-600 h-1.5 rounded-full" style="width: 58%"></div>
183
+ </div>
184
+ </div>
185
+ </div>
186
+ <div class="flex items-center">
187
+ <div class="w-8 h-8 bg-purple-100 rounded-full flex items-center justify-center">
188
+ <span class="text-xs font-bold text-purple-800">3</span>
189
+ </div>
190
+ <div class="ml-4 flex-1">
191
+ <div class="flex justify-between">
192
+ <span class="text-sm font-medium text-gray-900">Bluetooth Speaker</span>
193
+ <span class="text-sm font-medium text-gray-900">$5,673</span>
194
+ </div>
195
+ <div class="mt-1 w-full bg-gray-200 rounded-full h-1.5">
196
+ <div class="bg-purple-600 h-1.5 rounded-full" style="width: 42%"></div>
197
+ </div>
198
+ </div>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ <!-- Recent Activity & Alerts -->
205
+ <div class="mt-8 grid grid-cols-1 lg:grid-cols-3 gap-6">
206
+ <div class="lg:col-span-2 bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
207
+ <h2 class="text-xl font-bold text-gray-900">Recent Activity</h2>
208
+ <div class="mt-6 space-y-6">
209
+ <div class="flex">
210
+ <div class="flex-shrink-0">
211
+ <img class="h-10 w-10 rounded-full" src="https://static.photos/people/200x200/45" alt="">
212
+ </div>
213
+ <div class="ml-4">
214
+ <p class="text-sm font-medium text-gray-900">Alex Johnson <span class="text-gray-500">placed order #1892</span></p>
215
+ <p class="text-sm text-gray-500">2 Smart Watches, 1 Wireless Earbuds</p>
216
+ <p class="text-xs text-gray-400 mt-1">15 minutes ago</p>
217
+ </div>
218
+ </div>
219
+ <div class="flex">
220
+ <div class="flex-shrink-0">
221
+ <img class="h-10 w-10 rounded-full" src="https://static.photos/people/200x200/28" alt="">
222
+ </div>
223
+ <div class="ml-4">
224
+ <p class="text-sm font-medium text-gray-900">Sarah Miller <span class="text-gray-500">updated inventory</span></p>
225
+ <p class="text-sm text-gray-500">Added 50 units of Bluetooth Speakers</p>
226
+ <p class="text-xs text-gray-400 mt-1">1 hour ago</p>
227
+ </div>
228
+ </div>
229
+ </div>
230
+ </div>
231
+ <div class="bg-white border border-gray-200 rounded-xl p-6 shadow-sm">
232
+ <h2 class="text-xl font-bold text-gray-900">Critical Alerts</h2>
233
+ <div class="mt-6 space-y-4">
234
+ <div class="flex items-start">
235
+ <div class="flex-shrink-0">
236
+ <div class="p-1 rounded-full bg-red-100">
237
+ <i data-feather="alert-circle" class="text-red-600"></i>
238
+ </div>
239
+ </div>
240
+ <div class="ml-3">
241
+ <p class="text-sm font-medium text-gray-900">Low stock alert!</p>
242
+ <p class="text-sm text-gray-500">Wireless Earbuds Pro (only 3 left)</p>
243
+ </div>
244
+ </div>
245
+ <div class="flex items-start">
246
+ <div class="flex-shrink-0">
247
+ <div class="p-1 rounded-full bg-yellow-100">
248
+ <i data-feather="clock" class="text-yellow-600"></i>
249
+ </div>
250
+ </div>
251
+ <div class="ml-3">
252
+ <p class="text-sm font-medium text-gray-900">Delayed delivery</p>
253
+ <p class="text-sm text-gray-500">Order #1872 from TechSuppliers Inc.</p>
254
+ </div>
255
+ </div>
256
+ <div class="flex items-start">
257
+ <div class="flex-shrink-0">
258
+ <div class="p-1 rounded-full bg-blue-100">
259
+ <i data-feather="zap" class="text-blue-600"></i>
260
+ </div>
261
+ </div>
262
+ <div class="ml-3">
263
+ <p class="text-sm font-medium text-gray-900">AI Recommendation</p>
264
+ <p class="text-sm text-gray-500">Restock Smart Watch X9 (high demand)</p>
265
+ </div>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ </div>
272
+
273
+ <!-- Footer -->
274
+ <footer class="bg-white border-t border-gray-200 mt-12 py-6">
275
+ <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
276
+ <div class="flex flex-col md:flex-row justify-between items-center">
277
+ <p class="text-sm text-gray-500">© 2023 StockSync Pro. All rights reserved.</p>
278
+ <div class="mt-4 md:mt-0 flex space-x-6">
279
+ <a href="#" class="text-gray-400 hover:text-gray-500">
280
+ <i data-feather="github"></i>
281
+ </a>
282
+ <a href="#" class="text-gray-400 hover:text-gray-500">
283
+ <i data-feather="twitter"></i>
284
+ </a>
285
+ <a href="#" class="text-gray-400 hover:text-gray-500">
286
+ <i data-feather="linkedin"></i>
287
+ </a>
288
+ </div>
289
+ </div>
290
+ </div>
291
+ </footer>
292
+
293
+ <script>
294
+ // Initialize Vanta.js background
295
+ VANTA.GLOBE({
296
+ el: "#vanta-bg",
297
+ mouseControls: true,
298
+ touchControls: true,
299
+ gyroControls: false,
300
+ minHeight: 200.00,
301
+ minWidth: 200.00,
302
+ scale: 1.00,
303
+ scaleMobile: 1.00,
304
+ color: 0x6366f1,
305
+ backgroundColor: 0xf8fafc,
306
+ size: 0.8
307
+ });
308
+
309
+ // Feather icons
310
+ feather.replace();
311
+
312
+ // Simple animation for cards on load
313
+ document.addEventListener('DOMContentLoaded', () => {
314
+ const cards = document.querySelectorAll('.card-hover');
315
+ cards.forEach((card, index) => {
316
+ card.style.opacity = '0';
317
+ card.style.transform = 'translateY(20px)';
318
+ card.style.transition = 'all 0.4s ease-out';
319
+ setTimeout(() => {
320
+ card.style.opacity = '1';
321
+ card.style.transform = 'translateY(0)';
322
+ }, 100 * index);
323
+ });
324
+ });
325
+ </script>
326
+ </body>
327
  </html>