Sumitkumar098 commited on
Commit
f709c7d
·
verified ·
1 Parent(s): 26b1c02

Add 2 files

Browse files
Files changed (2) hide show
  1. README.md +7 -5
  2. index.html +2220 -18
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Portfolio Webiste
3
- emoji: 🏃
4
- colorFrom: pink
5
- colorTo: red
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: portfolio-webiste
3
+ emoji: 🐳
4
+ colorFrom: green
5
+ colorTo: gray
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,2221 @@
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>Sumit Kumar - AI & ML Engineer</title>
7
+ <link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
8
+ <link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.0.0/css/all.min.css" rel="stylesheet">
9
+ <link href="https://cdn.jsdelivr.net/npm/boxicons@2.1.4/css/boxicons.min.css" rel="stylesheet">
10
+ <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Space+Mono&display=swap" rel="stylesheet">
11
+ <style>
12
+ :root {
13
+ --primary: #0a192f;
14
+ --secondary: #112240;
15
+ --highlight: #64ffda;
16
+ --accent-1: #5e38f7;
17
+ --accent-2: #0ea5e9;
18
+ --text-primary: #e6f1ff;
19
+ --text-secondary: #8892b0;
20
+ }
21
+
22
+ * {
23
+ margin: 0;
24
+ padding: 0;
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ body {
29
+ font-family: 'Poppins', sans-serif;
30
+ background-color: var(--primary);
31
+ color: var(--text-primary);
32
+ overflow-x: hidden;
33
+ }
34
+
35
+ .mono {
36
+ font-family: 'Space Mono', monospace;
37
+ }
38
+
39
+ .gradient-text {
40
+ background: linear-gradient(90deg, var(--highlight), var(--accent-2));
41
+ -webkit-background-clip: text;
42
+ background-clip: text;
43
+ color: transparent;
44
+ }
45
+
46
+ .section {
47
+ padding: 80px 0;
48
+ position: relative;
49
+ overflow: hidden;
50
+ }
51
+
52
+ .container {
53
+ max-width: 1200px;
54
+ margin: 0 auto;
55
+ padding: 0 2rem;
56
+ position: relative;
57
+ z-index: 2;
58
+ }
59
+
60
+ .section-title {
61
+ font-size: 2rem;
62
+ font-weight: 600;
63
+ margin-bottom: 2rem;
64
+ position: relative;
65
+ display: inline-block;
66
+ }
67
+
68
+ .section-title::after {
69
+ content: '';
70
+ position: absolute;
71
+ bottom: -8px;
72
+ left: 0;
73
+ width: 40%;
74
+ height: 4px;
75
+ background: linear-gradient(90deg, var(--highlight), transparent);
76
+ }
77
+
78
+ .glowing-btn {
79
+ position: relative;
80
+ color: var(--highlight);
81
+ padding: 0.75rem 1.5rem;
82
+ background: transparent;
83
+ border: 1px solid var(--highlight);
84
+ border-radius: 4px;
85
+ cursor: pointer;
86
+ overflow: hidden;
87
+ transition: all 0.3s ease;
88
+ z-index: 1;
89
+ text-decoration: none;
90
+ display: inline-block;
91
+ }
92
+
93
+ .glowing-btn::before {
94
+ content: '';
95
+ position: absolute;
96
+ top: 0;
97
+ left: 0;
98
+ width: 0%;
99
+ height: 100%;
100
+ background: rgba(100, 255, 218, 0.1);
101
+ transition: all 0.3s ease;
102
+ z-index: -1;
103
+ }
104
+
105
+ .glowing-btn:hover::before {
106
+ width: 100%;
107
+ }
108
+
109
+ .glowing-btn:hover {
110
+ box-shadow: 0 0 10px rgba(100, 255, 218, 0.5);
111
+ transform: translateY(-2px);
112
+ }
113
+
114
+ .card {
115
+ background-color: var(--secondary);
116
+ border-radius: 8px;
117
+ padding: 1.5rem;
118
+ transition: all 0.3s ease;
119
+ height: 100%;
120
+ overflow: hidden;
121
+ position: relative;
122
+ }
123
+
124
+ .card::before {
125
+ content: '';
126
+ position: absolute;
127
+ top: 0;
128
+ left: 0;
129
+ width: 3px;
130
+ height: 0;
131
+ background: var(--highlight);
132
+ transition: height 0.3s ease;
133
+ }
134
+
135
+ .card:hover::before {
136
+ height: 100%;
137
+ }
138
+
139
+ .card:hover {
140
+ transform: translateY(-5px);
141
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
142
+ }
143
+
144
+ .progress-bar {
145
+ height: 6px;
146
+ background: rgba(255, 255, 255, 0.1);
147
+ border-radius: 3px;
148
+ overflow: hidden;
149
+ margin: 8px 0;
150
+ }
151
+
152
+ .progress {
153
+ height: 100%;
154
+ border-radius: 3px;
155
+ background: linear-gradient(90deg, var(--highlight), var(--accent-2));
156
+ width: 0;
157
+ transition: width 1.5s ease-in-out;
158
+ }
159
+
160
+ .timeline {
161
+ position: relative;
162
+ max-width: 1200px;
163
+ margin: 0 auto;
164
+ }
165
+
166
+ .timeline::after {
167
+ content: '';
168
+ position: absolute;
169
+ width: 2px;
170
+ background: var(--highlight);
171
+ top: 0;
172
+ bottom: 0;
173
+ left: 50%;
174
+ margin-left: -1px;
175
+ }
176
+
177
+ .timeline-item {
178
+ padding: 10px 40px;
179
+ position: relative;
180
+ width: 50%;
181
+ box-sizing: border-box;
182
+ }
183
+
184
+ .timeline-item:nth-child(odd) {
185
+ left: 0;
186
+ }
187
+
188
+ .timeline-item:nth-child(even) {
189
+ left: 50%;
190
+ }
191
+
192
+ .timeline-content {
193
+ padding: 20px;
194
+ background: var(--secondary);
195
+ border-radius: 8px;
196
+ position: relative;
197
+ }
198
+
199
+ .timeline-content::after {
200
+ content: '';
201
+ position: absolute;
202
+ width: 20px;
203
+ height: 20px;
204
+ right: -20px;
205
+ background: var(--secondary);
206
+ top: 20px;
207
+ transform: rotate(45deg);
208
+ }
209
+
210
+ .timeline-item:nth-child(even) .timeline-content::after {
211
+ left: -10px;
212
+ }
213
+
214
+ .timeline-date {
215
+ color: var(--highlight);
216
+ font-weight: 600;
217
+ }
218
+
219
+ .timeline-dot {
220
+ width: 20px;
221
+ height: 20px;
222
+ background: var(--highlight);
223
+ border-radius: 50%;
224
+ position: absolute;
225
+ top: 25px;
226
+ z-index: 10;
227
+ }
228
+
229
+ .timeline-item:nth-child(odd) .timeline-dot {
230
+ right: -10px;
231
+ }
232
+
233
+ .timeline-item:nth-child(even) .timeline-dot {
234
+ left: -10px;
235
+ }
236
+
237
+ .skill-item {
238
+ padding: 1rem;
239
+ background: var(--secondary);
240
+ border-radius: 8px;
241
+ transition: all 0.3s ease;
242
+ position: relative;
243
+ overflow: hidden;
244
+ }
245
+
246
+ .skill-item:hover {
247
+ transform: translateY(-5px);
248
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
249
+ }
250
+
251
+ .skill-item::before {
252
+ content: '';
253
+ position: absolute;
254
+ top: 0;
255
+ left: 0;
256
+ width: 3px;
257
+ height: 0;
258
+ background: var(--highlight);
259
+ transition: height 0.3s ease;
260
+ }
261
+
262
+ .skill-item:hover::before {
263
+ height: 100%;
264
+ }
265
+
266
+ .project-card {
267
+ background: var(--secondary);
268
+ border-radius: 8px;
269
+ overflow: hidden;
270
+ height: 100%;
271
+ transition: all 0.3s ease;
272
+ display: flex;
273
+ flex-direction: column;
274
+ }
275
+
276
+ .project-card:hover {
277
+ transform: translateY(-10px);
278
+ box-shadow: 0 15px 30px rgba(0, 0, 0, 0.3);
279
+ }
280
+
281
+ .project-image {
282
+ height: 200px;
283
+ position: relative;
284
+ overflow: hidden;
285
+ }
286
+
287
+ .project-content {
288
+ padding: 1.5rem;
289
+ flex-grow: 1;
290
+ display: flex;
291
+ flex-direction: column;
292
+ }
293
+
294
+ .project-title {
295
+ font-size: 1.25rem;
296
+ font-weight: 600;
297
+ margin-bottom: 0.75rem;
298
+ }
299
+
300
+ .project-description {
301
+ color: var(--text-secondary);
302
+ margin-bottom: 1.5rem;
303
+ flex-grow: 1;
304
+ }
305
+
306
+ .project-tags {
307
+ display: flex;
308
+ flex-wrap: wrap;
309
+ margin-bottom: 1rem;
310
+ }
311
+
312
+ .project-tag {
313
+ background: rgba(100, 255, 218, 0.1);
314
+ color: var(--highlight);
315
+ padding: 0.25rem 0.75rem;
316
+ border-radius: 50px;
317
+ font-size: 0.75rem;
318
+ margin-right: 0.5rem;
319
+ margin-bottom: 0.5rem;
320
+ }
321
+
322
+ .project-links {
323
+ display: flex;
324
+ justify-content: flex-end;
325
+ }
326
+
327
+ .project-link {
328
+ color: var(--text-primary);
329
+ margin-left: 1rem;
330
+ font-size: 1.25rem;
331
+ transition: color 0.3s ease;
332
+ }
333
+
334
+ .project-link:hover {
335
+ color: var(--highlight);
336
+ }
337
+
338
+ .form-control {
339
+ width: 100%;
340
+ padding: 0.75rem 1rem;
341
+ background: rgba(255, 255, 255, 0.05);
342
+ border: 1px solid rgba(255, 255, 255, 0.1);
343
+ border-radius: 4px;
344
+ color: var(--text-primary);
345
+ margin-bottom: 1.5rem;
346
+ transition: all 0.3s ease;
347
+ }
348
+
349
+ .form-control:focus {
350
+ outline: none;
351
+ border-color: var(--highlight);
352
+ box-shadow: 0 0 0 3px rgba(100, 255, 218, 0.1);
353
+ }
354
+
355
+ .social-link {
356
+ display: inline-flex;
357
+ align-items: center;
358
+ justify-content: center;
359
+ width: 40px;
360
+ height: 40px;
361
+ border-radius: 50%;
362
+ background: var(--secondary);
363
+ color: var(--text-primary);
364
+ margin-right: 1rem;
365
+ transition: all 0.3s ease;
366
+ }
367
+
368
+ .social-link:hover {
369
+ background: var(--highlight);
370
+ color: var(--primary);
371
+ transform: translateY(-5px);
372
+ }
373
+
374
+ .nav-menu {
375
+ position: fixed;
376
+ top: 30px;
377
+ right: 30px;
378
+ display: flex;
379
+ z-index: 1000;
380
+ }
381
+
382
+ .nav-item {
383
+ margin-left: 2rem;
384
+ position: relative;
385
+ }
386
+
387
+ .nav-link {
388
+ color: var(--text-primary);
389
+ text-decoration: none;
390
+ font-weight: 500;
391
+ position: relative;
392
+ transition: color 0.3s ease;
393
+ }
394
+
395
+ .nav-link::after {
396
+ content: '';
397
+ position: absolute;
398
+ width: 0;
399
+ height: 2px;
400
+ bottom: -5px;
401
+ left: 0;
402
+ background: var(--highlight);
403
+ transition: width 0.3s ease;
404
+ }
405
+
406
+ .nav-link:hover {
407
+ color: var(--highlight);
408
+ }
409
+
410
+ .nav-link:hover::after {
411
+ width: 100%;
412
+ }
413
+
414
+ .mobile-menu-toggle {
415
+ display: none;
416
+ background: transparent;
417
+ border: none;
418
+ color: var(--text-primary);
419
+ font-size: 1.5rem;
420
+ cursor: pointer;
421
+ z-index: 1001;
422
+ position: fixed;
423
+ top: 20px;
424
+ right: 20px;
425
+ }
426
+
427
+ .cursor-follower {
428
+ position: fixed;
429
+ width: 40px;
430
+ height: 40px;
431
+ border: 2px solid var(--highlight);
432
+ border-radius: 50%;
433
+ pointer-events: none;
434
+ transform: translate(-50%, -50%);
435
+ transition: transform 0.15s ease, width 0.3s ease, height 0.3s ease;
436
+ z-index: 9999;
437
+ mix-blend-mode: difference;
438
+ }
439
+
440
+ .canvas-container {
441
+ position: absolute;
442
+ top: 0;
443
+ left: 0;
444
+ width: 100%;
445
+ height: 100%;
446
+ z-index: 1;
447
+ }
448
+
449
+ #hero {
450
+ min-height: 100vh;
451
+ display: flex;
452
+ align-items: center;
453
+ }
454
+
455
+ .certificate-item {
456
+ background: var(--secondary);
457
+ border-radius: 8px;
458
+ padding: 1.5rem;
459
+ margin-bottom: 1.5rem;
460
+ position: relative;
461
+ transition: all 0.3s ease;
462
+ }
463
+
464
+ .certificate-item:hover {
465
+ transform: translateY(-5px);
466
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
467
+ }
468
+
469
+ .certificate-item::before {
470
+ content: '';
471
+ position: absolute;
472
+ top: 0;
473
+ left: 0;
474
+ width: 3px;
475
+ height: 0;
476
+ background: var(--highlight);
477
+ transition: height 0.3s ease;
478
+ }
479
+
480
+ .certificate-item:hover::before {
481
+ height: 100%;
482
+ }
483
+
484
+ .education-card {
485
+ background: var(--secondary);
486
+ border-radius: 8px;
487
+ padding: 2rem;
488
+ position: relative;
489
+ overflow: hidden;
490
+ transition: all 0.3s ease;
491
+ }
492
+
493
+ .education-card:hover {
494
+ transform: translateY(-5px);
495
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
496
+ }
497
+
498
+ .education-card::before {
499
+ content: '';
500
+ position: absolute;
501
+ top: 0;
502
+ left: 0;
503
+ width: 3px;
504
+ height: 0;
505
+ background: var(--highlight);
506
+ transition: height 0.3s ease;
507
+ }
508
+
509
+ .education-card:hover::before {
510
+ height: 100%;
511
+ }
512
+
513
+ .radar-container {
514
+ position: relative;
515
+ width: 200px;
516
+ height: 200px;
517
+ }
518
+
519
+ .radar-circle {
520
+ position: absolute;
521
+ border-radius: 50%;
522
+ border: 1px solid var(--highlight);
523
+ }
524
+
525
+ .radar-spinner {
526
+ position: absolute;
527
+ top: 0;
528
+ left: 50%;
529
+ width: 50%;
530
+ height: 1px;
531
+ background: linear-gradient(90deg, transparent, var(--highlight));
532
+ transform-origin: left center;
533
+ animation: spin 4s linear infinite;
534
+ }
535
+
536
+ @keyframes spin {
537
+ 0% {
538
+ transform: rotate(0deg);
539
+ }
540
+ 100% {
541
+ transform: rotate(360deg);
542
+ }
543
+ }
544
+
545
+ .glow-on-hover {
546
+ transition: all 0.3s ease;
547
+ }
548
+
549
+ .glow-on-hover:hover {
550
+ box-shadow: 0 0 20px rgba(100, 255, 218, 0.5);
551
+ }
552
+
553
+ .highlight-text {
554
+ color: var(--highlight);
555
+ }
556
+
557
+ @media (max-width: 768px) {
558
+ .timeline::after {
559
+ left: 40px;
560
+ }
561
+
562
+ .timeline-item {
563
+ width: 100%;
564
+ padding-left: 70px;
565
+ padding-right: 20px;
566
+ }
567
+
568
+ .timeline-item:nth-child(even) {
569
+ left: 0;
570
+ }
571
+
572
+ .timeline-item:nth-child(odd) .timeline-content::after,
573
+ .timeline-item:nth-child(even) .timeline-content::after {
574
+ left: -10px;
575
+ }
576
+
577
+ .timeline-item:nth-child(odd) .timeline-dot,
578
+ .timeline-item:nth-child(even) .timeline-dot {
579
+ left: 30px;
580
+ }
581
+
582
+ .mobile-menu-toggle {
583
+ display: block;
584
+ }
585
+
586
+ .nav-menu {
587
+ position: fixed;
588
+ top: 0;
589
+ right: -100%;
590
+ width: 70%;
591
+ height: 100vh;
592
+ background: var(--secondary);
593
+ flex-direction: column;
594
+ justify-content: center;
595
+ align-items: center;
596
+ transition: right 0.3s ease;
597
+ }
598
+
599
+ .nav-menu.active {
600
+ right: 0;
601
+ }
602
+
603
+ .nav-item {
604
+ margin: 1.5rem 0;
605
+ }
606
+ }
607
+
608
+ @media print {
609
+ .section {
610
+ page-break-inside: avoid;
611
+ }
612
+ }
613
+ </style>
614
+ </head>
615
+ <body>
616
+ <div class="cursor-follower" id="cursor-follower"></div>
617
+
618
+ <button class="mobile-menu-toggle" id="mobile-menu-toggle">
619
+ <i class="fas fa-bars"></i>
620
+ </button>
621
+
622
+ <nav class="nav-menu" id="nav-menu">
623
+ <div class="nav-item">
624
+ <a href="#hero" class="nav-link">Home</a>
625
+ </div>
626
+ <div class="nav-item">
627
+ <a href="#about" class="nav-link">About</a>
628
+ </div>
629
+ <div class="nav-item">
630
+ <a href="#skills" class="nav-link">Skills</a>
631
+ </div>
632
+ <div class="nav-item">
633
+ <a href="#experience" class="nav-link">Experience</a>
634
+ </div>
635
+ <div class="nav-item">
636
+ <a href="#projects" class="nav-link">Projects</a>
637
+ </div>
638
+ <div class="nav-item">
639
+ <a href="#education" class="nav-link">Education</a>
640
+ </div>
641
+ <div class="nav-item">
642
+ <a href="#certificates" class="nav-link">Certificates</a>
643
+ </div>
644
+ <div class="nav-item">
645
+ <a href="#contact" class="nav-link">Contact</a>
646
+ </div>
647
+ </nav>
648
+
649
+ <section id="hero" class="section">
650
+ <div class="canvas-container" id="hero-canvas"></div>
651
+ <div class="container">
652
+ <div class="flex flex-col md:flex-row items-center">
653
+ <div class="md:w-1/2 mb-8 md:mb-0">
654
+ <h3 class="mono text-xl text-gray-400 mb-2">Hi, my name is</h3>
655
+ <h1 class="text-5xl md:text-6xl font-bold mb-4">Sumit Kumar</h1>
656
+ <h2 class="text-3xl md:text-4xl font-bold text-gray-400 mb-6">I build with AI & Machine Learning</h2>
657
+ <p class="text-gray-400 text-lg mb-8 max-w-lg">
658
+ I'm a machine learning engineer specializing in developing intelligent solutions using cutting-edge technologies. Currently focusing on deep learning applications.
659
+ </p>
660
+ <div class="flex space-x-4">
661
+ <a href="#contact" class="glowing-btn">Contact Me</a>
662
+ <a href="#projects" class="glowing-btn">Explore Projects</a>
663
+ <a href="./Sumit Kumar Resume.pdf" download class="glowing-btn flex items-center">
664
+ <i class="fas fa-download mr-2"></i>Resume
665
+ </a>
666
+ </div>
667
+ </div>
668
+ </div>
669
+ </div>
670
+ </div>
671
+ </div>
672
+ </section>
673
+
674
+
675
+ <section id="about" class="section">
676
+ <div class="container">
677
+ <h2 class="section-title">About Me</h2>
678
+ <div class="flex flex-col md:flex-row">
679
+ <div class="md:w-1/2 mb-8 md:mb-0">
680
+ <p class="text-gray-300 mb-4">
681
+ I'm a Computer Engineering student at Bharati Vidyapeeth College of Engineering, Pune with a passion for Machine Learning and AI. My journey in tech is driven by a desire to build intelligent solutions that solve real-world problems.
682
+ </p>
683
+ <p class="text-gray-300 mb-4">
684
+ With strong foundations in Python, C++, and data analysis, I specialize in developing machine learning models and implementing deep learning frameworks like TensorFlow and PyTorch.
685
+ </p>
686
+ <p class="text-gray-300 mb-6">
687
+ I'm constantly exploring new technologies and methodologies in the AI space, with particular interests in natural language processing and anomaly detection.
688
+ </p>
689
+ <div class="flex flex-wrap">
690
+ <div class="bg-secondary py-2 px-4 rounded-md mr-3 mb-3 text-highlight">
691
+ <i class="fas fa-brain mr-2"></i>Deep Learning
692
+ </div>
693
+ <div class="bg-secondary py-2 px-4 rounded-md mr-3 mb-3 text-highlight">
694
+ <i class="fas fa-robot mr-2"></i>Machine Learning
695
+ </div>
696
+ <div class="bg-secondary py-2 px-4 rounded-md mr-3 mb-3 text-highlight">
697
+ <i class="fas fa-code mr-2"></i>Python
698
+ </div>
699
+ <div class="bg-secondary py-2 px-4 rounded-md mr-3 mb-3 text-highlight">
700
+ <i class="fas fa-chart-line mr-2"></i>Data Science
701
+ </div>
702
+ </div>
703
+ </div>
704
+ <div class="md:w-1/2 relative">
705
+ <div class="canvas-container" id="brain-model"></div>
706
+ </div>
707
+ </div>
708
+ </div>
709
+ </section>
710
+
711
+ <section id="skills" class="section">
712
+ <div class="container">
713
+ <h2 class="section-title">Skills</h2>
714
+ <div class="flex flex-col md:flex-row">
715
+ <div class="md:w-1/2 mb-8 md:mb-0">
716
+ <h3 class="text-xl font-semibold mb-4 text-highlight">Technical Skills</h3>
717
+ <div class="grid grid-cols-1 gap-4">
718
+ <div class="skill-item">
719
+ <div class="flex justify-between items-center mb-2">
720
+ <h4 class="font-medium">AI & Machine Learning</h4>
721
+ <span class="text-highlight">90%</span>
722
+ </div>
723
+ <p class="text-sm text-gray-400 mb-2">TensorFlow, PyTorch, Scikit-Learn, Keras</p>
724
+ <div class="progress-bar">
725
+ <div class="progress" style="width: 0;" data-width="90%"></div>
726
+ </div>
727
+ </div>
728
+
729
+ <div class="skill-item">
730
+ <div class="flex justify-between items-center mb-2">
731
+ <h4 class="font-medium">Programming Languages</h4>
732
+ <span class="text-highlight">85%</span>
733
+ </div>
734
+ <p class="text-sm text-gray-400 mb-2">Python, C++</p>
735
+ <div class="progress-bar">
736
+ <div class="progress" style="width: 0;" data-width="85%"></div>
737
+ </div>
738
+ </div>
739
+
740
+ <div class="skill-item">
741
+ <div class="flex justify-between items-center mb-2">
742
+ <h4 class="font-medium">Data Analysis & Visualization</h4>
743
+ <span class="text-highlight">88%</span>
744
+ </div>
745
+ <p class="text-sm text-gray-400 mb-2">Pandas, NumPy, Matplotlib, Seaborn</p>
746
+ <div class="progress-bar">
747
+ <div class="progress" style="width: 0;" data-width="88%"></div>
748
+ </div>
749
+ </div>
750
+
751
+ <div class="skill-item">
752
+ <div class="flex justify-between items-center mb-2">
753
+ <h4 class="font-medium">Big Data & Cloud</h4>
754
+ <span class="text-highlight">80%</span>
755
+ </div>
756
+ <p class="text-sm text-gray-400 mb-2">SQL, Docker, Git</p>
757
+ <div class="progress-bar">
758
+ <div class="progress" style="width: 0;" data-width="80%"></div>
759
+ </div>
760
+ </div>
761
+ </div>
762
+
763
+ <h3 class="text-xl font-semibold mt-8 mb-4 text-highlight">Soft Skills</h3>
764
+ <div class="grid grid-cols-2 gap-4">
765
+ <div class="skill-item">
766
+ <div class="flex justify-between items-center mb-2">
767
+ <h4 class="font-medium">Problem Solving</h4>
768
+ <span class="text-highlight">92%</span>
769
+ </div>
770
+ <div class="progress-bar">
771
+ <div class="progress" style="width: 0;" data-width="92%"></div>
772
+ </div>
773
+ </div>
774
+
775
+ <div class="skill-item">
776
+ <div class="flex justify-between items-center mb-2">
777
+ <h4 class="font-medium">Communication</h4>
778
+ <span class="text-highlight">88%</span>
779
+ </div>
780
+ <div class="progress-bar">
781
+ <div class="progress" style="width: 0;" data-width="88%"></div>
782
+ </div>
783
+ </div>
784
+
785
+ <div class="skill-item">
786
+ <div class="flex justify-between items-center mb-2">
787
+ <h4 class="font-medium">Teamwork</h4>
788
+ <span class="text-highlight">90%</span>
789
+ </div>
790
+ <div class="progress-bar">
791
+ <div class="progress" style="width: 0;" data-width="90%"></div>
792
+ </div>
793
+ </div>
794
+
795
+ <div class="skill-item">
796
+ <div class="flex justify-between items-center mb-2">
797
+ <h4 class="font-medium">Leadership</h4>
798
+ <span class="text-highlight">85%</span>
799
+ </div>
800
+ <div class="progress-bar">
801
+ <div class="progress" style="width: 0;" data-width="85%"></div>
802
+ </div>
803
+ </div>
804
+ </div>
805
+ </div>
806
+ <div class="md:w-1/2 relative">
807
+ <div class="canvas-container" id="skills-graph"></div>
808
+ </div>
809
+ </div>
810
+ </div>
811
+ </section>
812
+
813
+ <section id="experience" class="section">
814
+ <div class="container">
815
+ <h2 class="section-title">Work Experience</h2>
816
+ <div class="timeline">
817
+ <div class="timeline-item">
818
+ <div class="timeline-dot"></div>
819
+ <div class="timeline-content">
820
+ <h3 class="text-xl font-semibold mb-2">Machine Learning Intern</h3>
821
+ <h4 class="text-lg text-gray-400 mb-1">360DigiTMG</h4>
822
+ <p class="timeline-date mb-3">June 2024 - August 2024</p>
823
+ <h5 class="font-medium mb-2">Project: Medical Inventory Optimization</h5>
824
+ <ul class="list-disc list-inside text-gray-300">
825
+ <li class="mb-2">Utilized Python libraries (Matplotlib, Seaborn, Pandas) to create visualizations (box plots, line plots, scatterplots, histograms) and identify patterns with over 90% accuracy.</li>
826
+ <li class="mb-2">Conducted statistical analysis with SciPy, calculating Pearson correlation coefficients and covariance, achieving 95% precision in deriving insights.</li>
827
+ <li>Managed time series data by converting date columns to datetime and creating time series plots, identifying temporal patterns with 92% accuracy.</li>
828
+ </ul>
829
+ </div>
830
+ </div>
831
+ </div>
832
+ </div>
833
+ </section>
834
+
835
+ <section id="projects" class="section">
836
+ <div class="container">
837
+ <h2 class="section-title">Projects</h2>
838
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
839
+ <div class="project-card">
840
+ <div class="project-image">
841
+ <div class="canvas-container" id="project1-canvas"></div>
842
+ </div>
843
+ <div class="project-content">
844
+ <h3 class="project-title">Real-Time Anomaly Detection</h3>
845
+ <div class="project-tags">
846
+ <span class="project-tag">Python</span>
847
+ <span class="project-tag">Machine Learning</span>
848
+ <span class="project-tag">IsolationForest</span>
849
+ </div>
850
+ <p class="project-description">
851
+ Real-time anomaly detection system for cloud server metrics using the IsolationForest algorithm. Features include pause/resume functionality, customizable parameters, and live plotting.
852
+ </p>
853
+ <div class="project-links">
854
+ <a href="https://github.com/Sumitkumar09876/Real-Time-Anamoly-Detection-in-Cloud-Server.git" class="project-link" target="_blank">
855
+ <i class="fab fa-github"></i>
856
+ </a>
857
+ <a href="https://github.com/Sumitkumar09876/Real-Time-Anamoly-Detection-in-Cloud-Server.git" class="project-link" target="_blank">
858
+ <i class="fas fa-external-link-alt"></i>
859
+ </a>
860
+ </div>
861
+ </div>
862
+ </div>
863
+
864
+ <div class="project-card">
865
+ <div class="project-image">
866
+ <div class="canvas-container" id="project2-canvas"></div>
867
+ </div>
868
+ <div class="project-content">
869
+ <h3 class="project-title">BiomedNLP-HealthPredict</h3>
870
+ <div class="project-tags">
871
+ <span class="project-tag">NLP</span>
872
+ <span class="project-tag">BERT</span>
873
+ <span class="project-tag">Healthcare</span>
874
+ </div>
875
+ <p class="project-description">
876
+ NLP-driven healthcare assistant using PubMedBERT to predict diseases, recommend medications, and assess polypharmacy risk based on patient symptoms and demographics.
877
+ </p>
878
+ <div class="project-links">
879
+ <a href="https://huggingface.co/Sumitkumar098/BiomedNLP-HealthPredict" class="project-link" target="_blank">
880
+ <i class="fab fa-github"></i>
881
+ </a>
882
+ <a href="https://huggingface.co/Sumitkumar098/BiomedNLP-HealthPredict" class="project-link" target="_blank">
883
+ <i class="fas fa-external-link-alt"></i>
884
+ </a>
885
+ </div>
886
+ </div>
887
+ </div>
888
+
889
+ <div class="project-card">
890
+ <div class="project-image">
891
+ <div class="canvas-container" id="project3-canvas"></div>
892
+ </div>
893
+ <div class="project-content">
894
+ <h3 class="project-title">California Housing Price Prediction</h3>
895
+ <div class="project-tags">
896
+ <span class="project-tag">TensorFlow</span>
897
+ <span class="project-tag">Regression</span>
898
+ <span class="project-tag">Feature Engineering</span>
899
+ </div>
900
+ <p class="project-description">
901
+ Built a linear regression model using TensorFlow with 85% accuracy in predicting house prices. Selected and engineered features like total rooms and population, achieving 90% feature selection accuracy.
902
+ </p>
903
+ <div class="project-links">
904
+ <a href="https://github.com/Sumitkumar09876/California-Housing-Price-Prediction-System.git" class="project-link" target="_blank">
905
+ <i class="fab fa-github"></i>
906
+ </a>
907
+ <a href="https://github.com/Sumitkumar09876/California-Housing-Price-Prediction-System.git" class="project-link" target="_blank">
908
+ <i class="fas fa-external-link-alt"></i>
909
+ </a>
910
+ </div>
911
+ </div>
912
+ </div>
913
+ </div>
914
+ </div>
915
+ </section>
916
+
917
+ <section id="education" class="section">
918
+ <div class="container">
919
+ <h2 class="section-title">Education</h2>
920
+ <div class="education-card">
921
+ <div class="flex flex-col md:flex-row items-center">
922
+ <div class="md:w-1/3 mb-6 md:mb-0 flex justify-center">
923
+ <div class="relative w-full h-48">
924
+ <div class="canvas-container absolute inset-0" id="education-canvas"></div>
925
+ <div class="absolute inset-0 flex items-center justify-center z-10">
926
+ <span class="text-3xl font-bold text-white bg-secondary bg-opacity-70 px-4 py-2 rounded-lg shadow-lg border-2 border-highlight">BVCOE</span>
927
+ </div>
928
+ </div>
929
+ </div>
930
+ <div class="md:w-2/3 md:pl-8">
931
+ <h3 class="text-2xl font-bold mb-2">Bachelor of Technology, Computer Engineering</h3>
932
+ <h4 class="text-xl text-gray-400 mb-2">Bharati Vidyapeeth College of Engineering, Pune</h4>
933
+ <p class="text-gray-400 mb-4">December 2021 - June 2025</p>
934
+ <div class="mb-4">
935
+ <div class="flex items-center">
936
+ <span class="mr-2">CGPA: 9.17/10</span>
937
+ <div class="w-48 h-2 bg-gray-700 rounded-full">
938
+ <div class="h-full bg-highlight rounded-full" style="width: 91.7%"></div>
939
+ </div>
940
+ </div>
941
+ </div>
942
+ <p class="text-gray-300">
943
+ Relevant coursework: Data Structures, Algorithms, Artificial Intelligence, Machine Learning, Database Systems, Computer Networks, and Software Engineering.
944
+ </p>
945
+ </div>
946
+ </div>
947
+ </div>
948
+ </div>
949
+ </section>
950
+
951
+ <section id="certificates" class="section">
952
+ <div class="container">
953
+ <h2 class="section-title">Certificates</h2>
954
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
955
+ <div class="certificate-item glow-on-hover">
956
+ <div class="flex items-start">
957
+ <div class="text-3xl text-highlight mr-4">
958
+ <i class="fas fa-certificate"></i>
959
+ </div>
960
+ <div>
961
+ <h3 class="text-xl font-semibold mb-2">Machine Learning with Python</h3>
962
+ <p class="text-gray-400 mb-2">IBM | Coursera</p>
963
+ <p class="text-gray-300 mb-4">Covered supervised/unsupervised learning, regression, classification, clustering, and model evaluation techniques.</p>
964
+ <a href="#" class="text-highlight hover:underline">View Credential</a>
965
+ </div>
966
+ </div>
967
+ </div>
968
+
969
+ <div class="certificate-item glow-on-hover">
970
+ <div class="flex items-start">
971
+ <div class="text-3xl text-highlight mr-4">
972
+ <i class="fas fa-certificate"></i>
973
+ </div>
974
+ <div>
975
+ <h3 class="text-xl font-semibold mb-2">Introduction to Microsoft Azure Cloud Services</h3>
976
+ <p class="text-gray-400 mb-2">Microsoft</p>
977
+ <p class="text-gray-300 mb-4">Fundamentals of cloud computing with Azure, including ML services and deployment.</p>
978
+ <a href="#" class="text-highlight hover:underline">View Credential</a>
979
+ </div>
980
+ </div>
981
+ </div>
982
+ </div>
983
+ </div>
984
+ </section>
985
+
986
+ <section id="contact" class="section">
987
+ <div class="container">
988
+ <h2 class="section-title">Get In Touch</h2>
989
+ <div class="flex flex-col md:flex-row">
990
+ <div class="md:w-1/2 mb-8 md:mb-0">
991
+ <form action="#" method="POST">
992
+ <div class="mb-6">
993
+ <label for="name" class="block mb-2">Name</label>
994
+ <input type="text" id="name" name="name" required class="form-control" placeholder="Your Name">
995
+ </div>
996
+ <div class="mb-6">
997
+ <label for="email" class="block mb-2">Email</label>
998
+ <input type="email" id="email" name="email" required class="form-control" placeholder="Your Email">
999
+ </div>
1000
+ <div class="mb-6">
1001
+ <label for="message" class="block mb-2">Message</label>
1002
+ <textarea id="message" name="message" rows="5" required class="form-control" placeholder="Your Message"></textarea>
1003
+ </div>
1004
+ <button type="submit" class="glowing-btn">Send Message</button>
1005
+ </form>
1006
+ </div>
1007
+ <div class="md:w-1/2 md:pl-8">
1008
+ <div class="bg-secondary p-6 rounded-lg">
1009
+ <h3 class="text-xl font-semibold mb-6">Contact Information</h3>
1010
+ <div class="flex items-center mb-4">
1011
+ <div class="w-10 h-10 flex items-center justify-center bg-highlight bg-opacity-20 rounded-full mr-4">
1012
+ <i class="fas fa-map-marker-alt text-highlight"></i>
1013
+ </div>
1014
+ <span>Pune, Maharashtra, India</span>
1015
+ </div>
1016
+ <div class="flex items-center mb-4">
1017
+ <div class="w-10 h-10 flex items-center justify-center bg-highlight bg-opacity-20 rounded-full mr-4">
1018
+ <i class="fas fa-envelope text-highlight"></i>
1019
+ </div>
1020
+ <span>sumitthundarok@gmail.com</span>
1021
+ </div>
1022
+ <div class="flex items-center mb-6">
1023
+ <div class="w-10 h-10 flex items-center justify-center bg-highlight bg-opacity-20 rounded-full mr-4">
1024
+ <i class="fas fa-phone-alt text-highlight"></i>
1025
+ </div>
1026
+ <span>+91 7061346085</span>
1027
+ </div>
1028
+ <h3 class="text-xl font-semibold mb-4">Follow Me</h3>
1029
+ <div class="flex">
1030
+ <a href="#" class="social-link">
1031
+ <i class="fab fa-github"></i>
1032
+ </a>
1033
+ <a href="#" class="social-link">
1034
+ <i class="fab fa-linkedin-in"></i>
1035
+ </a>
1036
+ <a href="#" class="social-link">
1037
+ <i class="fab fa-twitter"></i>
1038
+ </a>
1039
+ <a href="#" class="social-link">
1040
+ <i class="fab fa-medium-m"></i>
1041
+ </a>
1042
+ </div>
1043
+ </div>
1044
+ </div>
1045
+ </div>
1046
+ </div>
1047
+ </section>
1048
+
1049
+ <footer class="bg-secondary py-8">
1050
+ <div class="container">
1051
+ <div class="flex flex-col md:flex-row justify-between items-center">
1052
+ <div class="mb-4 md:mb-0">
1053
+ <p>© 2024 Sumit Kumar. All Rights Reserved.</p>
1054
+ </div>
1055
+ <div>
1056
+ <p>Designed and Built with <span class="text-highlight">❤</span></p>
1057
+ </div>
1058
+ </div>
1059
+ </div>
1060
+ </footer>
1061
+
1062
+ <script src="https://cdn.jsdelivr.net/npm/three@0.132.2/build/three.min.js"></script>
1063
+ <script src="https://cdn.jsdelivr.net/npm/gsap@3.9.1/dist/gsap.min.js"></script>
1064
+
1065
+ <script>
1066
+ // Cursor follower
1067
+ const cursor = document.getElementById('cursor-follower');
1068
+ let mouseX = 0, mouseY = 0;
1069
+ let cursorX = 0, cursorY = 0;
1070
+
1071
+ document.addEventListener('mousemove', (e) => {
1072
+ mouseX = e.clientX;
1073
+ mouseY = e.clientY;
1074
+ });
1075
+
1076
+ function updateCursor() {
1077
+ const dx = mouseX - cursorX;
1078
+ const dy = mouseY - cursorY;
1079
+
1080
+ cursorX += dx * 0.1;
1081
+ cursorY += dy * 0.1;
1082
+
1083
+ cursor.style.left = cursorX + 'px';
1084
+ cursor.style.top = cursorY + 'px';
1085
+
1086
+ requestAnimationFrame(updateCursor);
1087
+ }
1088
+
1089
+ updateCursor();
1090
+
1091
+ // Hide cursor on mobile devices
1092
+ function isMobile() {
1093
+ return window.innerWidth <= 768;
1094
+ }
1095
+
1096
+ function updateCursorVisibility() {
1097
+ if (isMobile()) {
1098
+ cursor.style.display = 'none';
1099
+ } else {
1100
+ cursor.style.display = 'block';
1101
+ }
1102
+ }
1103
+
1104
+ updateCursorVisibility();
1105
+ window.addEventListener('resize', updateCursorVisibility);
1106
+
1107
+ // Mobile menu toggle
1108
+ const mobileMenuToggle = document.getElementById('mobile-menu-toggle');
1109
+ const navMenu = document.getElementById('nav-menu');
1110
+
1111
+ mobileMenuToggle.addEventListener('click', () => {
1112
+ navMenu.classList.toggle('active');
1113
+ });
1114
+
1115
+ // Smooth scrolling for navigation links
1116
+ document.querySelectorAll('.nav-link').forEach(link => {
1117
+ link.addEventListener('click', (e) => {
1118
+ e.preventDefault();
1119
+
1120
+ const targetId = link.getAttribute('href');
1121
+ const targetSection = document.querySelector(targetId);
1122
+
1123
+ window.scrollTo({
1124
+ top: targetSection.offsetTop,
1125
+ behavior: 'smooth'
1126
+ });
1127
+
1128
+ // Close mobile menu if open
1129
+ if (navMenu.classList.contains('active')) {
1130
+ navMenu.classList.remove('active');
1131
+ }
1132
+ });
1133
+ });
1134
+
1135
+ // Hero canvas animation
1136
+ function initHeroCanvas() {
1137
+ if (isMobile()) return; // Skip on mobile for performance
1138
+
1139
+ const container = document.getElementById('hero-canvas');
1140
+ const renderer = new THREE.WebGLRenderer({
1141
+ alpha: true,
1142
+ antialias: true
1143
+ });
1144
+
1145
+ renderer.setSize(container.clientWidth, container.clientHeight);
1146
+ container.appendChild(renderer.domElement);
1147
+
1148
+ const scene = new THREE.Scene();
1149
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1150
+ camera.position.z = 30;
1151
+
1152
+ // Create particles
1153
+ const particlesGeometry = new THREE.BufferGeometry();
1154
+ const particleCount = 2000;
1155
+
1156
+ const posArray = new Float32Array(particleCount * 3);
1157
+ const colorArray = new Float32Array(particleCount * 3);
1158
+
1159
+ for(let i = 0; i < particleCount * 3; i += 3) {
1160
+ // Position
1161
+ posArray[i] = (Math.random() - 0.5) * 50;
1162
+ posArray[i+1] = (Math.random() - 0.5) * 50;
1163
+ posArray[i+2] = (Math.random() - 0.5) * 50;
1164
+
1165
+ // Color
1166
+ const h = 0.6 + Math.random() * 0.2; // Blue to purple hue range
1167
+ const s = 0.5 + Math.random() * 0.5;
1168
+ const l = 0.5 + Math.random() * 0.5;
1169
+
1170
+ const color = new THREE.Color().setHSL(h, s, l);
1171
+ colorArray[i] = color.r;
1172
+ colorArray[i+1] = color.g;
1173
+ colorArray[i+2] = color.b;
1174
+ }
1175
+
1176
+ particlesGeometry.setAttribute('position', new THREE.BufferAttribute(posArray, 3));
1177
+ particlesGeometry.setAttribute('color', new THREE.BufferAttribute(colorArray, 3));
1178
+
1179
+ const particlesMaterial = new THREE.PointsMaterial({
1180
+ size: 0.1,
1181
+ vertexColors: true,
1182
+ transparent: true,
1183
+ opacity: 0.8
1184
+ });
1185
+
1186
+ const particlesMesh = new THREE.Points(particlesGeometry, particlesMaterial);
1187
+ scene.add(particlesMesh);
1188
+
1189
+ // Create connections between nearby particles
1190
+ const linesMaterial = new THREE.LineBasicMaterial({
1191
+ color: 0x64ffda,
1192
+ transparent: true,
1193
+ opacity: 0.1
1194
+ });
1195
+
1196
+ const linesGeometry = new THREE.BufferGeometry();
1197
+ const linesPositions = [];
1198
+
1199
+ // Find particles that are close enough to connect
1200
+ const maxDistance = 5;
1201
+ const positions = particlesGeometry.attributes.position.array;
1202
+
1203
+ for (let i = 0; i < particleCount; i++) {
1204
+ const x1 = positions[i * 3];
1205
+ const y1 = positions[i * 3 + 1];
1206
+ const z1 = positions[i * 3 + 2];
1207
+
1208
+ for (let j = i + 1; j < particleCount; j++) {
1209
+ const x2 = positions[j * 3];
1210
+ const y2 = positions[j * 3 + 1];
1211
+ const z2 = positions[j * 3 + 2];
1212
+
1213
+ const distance = Math.sqrt(
1214
+ Math.pow(x2 - x1, 2) +
1215
+ Math.pow(y2 - y1, 2) +
1216
+ Math.pow(z2 - z1, 2)
1217
+ );
1218
+
1219
+ if (distance < maxDistance && Math.random() > 0.95) {
1220
+ linesPositions.push(x1, y1, z1);
1221
+ linesPositions.push(x2, y2, z2);
1222
+ }
1223
+ }
1224
+ }
1225
+
1226
+ linesGeometry.setAttribute('position', new THREE.Float32BufferAttribute(linesPositions, 3));
1227
+ const linesMesh = new THREE.LineSegments(linesGeometry, linesMaterial);
1228
+ scene.add(linesMesh);
1229
+
1230
+ function animate() {
1231
+ requestAnimationFrame(animate);
1232
+
1233
+ particlesMesh.rotation.x += 0.0005;
1234
+ particlesMesh.rotation.y += 0.0005;
1235
+
1236
+ linesMesh.rotation.x += 0.0005;
1237
+ linesMesh.rotation.y += 0.0005;
1238
+
1239
+ // Follow mouse movement for particles and lines
1240
+ if (mouseX && mouseY) {
1241
+ const normalizedMouseX = (mouseX / window.innerWidth) * 2 - 1;
1242
+ const normalizedMouseY = -(mouseY / window.innerHeight) * 2 + 1;
1243
+
1244
+ particlesMesh.rotation.x += normalizedMouseY * 0.0005;
1245
+ particlesMesh.rotation.y += normalizedMouseX * 0.0005;
1246
+
1247
+ linesMesh.rotation.x += normalizedMouseY * 0.0005;
1248
+ linesMesh.rotation.y += normalizedMouseX * 0.0005;
1249
+ }
1250
+
1251
+ renderer.render(scene, camera);
1252
+ }
1253
+
1254
+ animate();
1255
+
1256
+ // Handle window resize
1257
+ window.addEventListener('resize', () => {
1258
+ camera.aspect = container.clientWidth / container.clientHeight;
1259
+ camera.updateProjectionMatrix();
1260
+ renderer.setSize(container.clientWidth, container.clientHeight);
1261
+ });
1262
+ }
1263
+
1264
+ // Brain model for about section
1265
+ function initBrainModel() {
1266
+ if (isMobile()) return; // Skip on mobile for performance
1267
+
1268
+ const container = document.getElementById('brain-model');
1269
+ const renderer = new THREE.WebGLRenderer({
1270
+ alpha: true,
1271
+ antialias: true
1272
+ });
1273
+
1274
+ renderer.setSize(container.clientWidth, container.clientHeight);
1275
+ container.appendChild(renderer.domElement);
1276
+
1277
+ const scene = new THREE.Scene();
1278
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1279
+ camera.position.z = 15;
1280
+
1281
+ // Create brain-like structure
1282
+ const brainGroup = new THREE.Group();
1283
+
1284
+ // Create the brain shape
1285
+ const brainGeometry = new THREE.SphereGeometry(5, 32, 32);
1286
+ const brainMaterial = new THREE.MeshBasicMaterial({
1287
+ color: 0x5e38f7,
1288
+ wireframe: true,
1289
+ transparent: true,
1290
+ opacity: 0.5
1291
+ });
1292
+
1293
+ const brainMesh = new THREE.Mesh(brainGeometry, brainMaterial);
1294
+ brainGroup.add(brainMesh);
1295
+
1296
+ // Add neurons
1297
+ const neuronCount = 100;
1298
+ const neurons = [];
1299
+
1300
+ for (let i = 0; i < neuronCount; i++) {
1301
+ const neuronGeometry = new THREE.SphereGeometry(0.1, 8, 8);
1302
+ const neuronMaterial = new THREE.MeshBasicMaterial({
1303
+ color: 0x64ffda,
1304
+ transparent: true,
1305
+ opacity: 0.8
1306
+ });
1307
+
1308
+ const neuron = new THREE.Mesh(neuronGeometry, neuronMaterial);
1309
+
1310
+ // Position neurons randomly within the brain
1311
+ const phi = Math.random() * Math.PI * 2;
1312
+ const theta = Math.random() * Math.PI;
1313
+ const radius = Math.random() * 4 + 0.5;
1314
+
1315
+ neuron.position.x = radius * Math.sin(theta) * Math.cos(phi);
1316
+ neuron.position.y = radius * Math.sin(theta) * Math.sin(phi);
1317
+ neuron.position.z = radius * Math.cos(theta);
1318
+
1319
+ brainGroup.add(neuron);
1320
+ neurons.push({
1321
+ mesh: neuron,
1322
+ initialPosition: neuron.position.clone(),
1323
+ speed: Math.random() * 0.02 + 0.01
1324
+ });
1325
+ }
1326
+
1327
+ // Create connections between neurons
1328
+ const connections = [];
1329
+
1330
+ for (let i = 0; i < neuronCount; i++) {
1331
+ for (let j = i + 1; j < neuronCount; j++) {
1332
+ if (Math.random() > 0.9) {
1333
+ const lineGeometry = new THREE.BufferGeometry();
1334
+ const lineMaterial = new THREE.LineBasicMaterial({
1335
+ color: 0x64ffda,
1336
+ transparent: true,
1337
+ opacity: 0.2
1338
+ });
1339
+
1340
+ const points = [
1341
+ neurons[i].mesh.position.clone(),
1342
+ neurons[j].mesh.position.clone()
1343
+ ];
1344
+
1345
+ lineGeometry.setFromPoints(points);
1346
+ const line = new THREE.Line(lineGeometry, lineMaterial);
1347
+ brainGroup.add(line);
1348
+
1349
+ connections.push({
1350
+ line: line,
1351
+ pointsIndices: [i, j],
1352
+ active: false,
1353
+ duration: Math.random() * 2000 + 1000
1354
+ });
1355
+ }
1356
+ }
1357
+ }
1358
+
1359
+ scene.add(brainGroup);
1360
+
1361
+ // Animate neurons and connections
1362
+ function animate() {
1363
+ requestAnimationFrame(animate);
1364
+
1365
+ // Rotate brain
1366
+ brainGroup.rotation.y += 0.003;
1367
+
1368
+ // Update neuron positions
1369
+ neurons.forEach((neuron, index) => {
1370
+ const time = Date.now() * neuron.speed;
1371
+ const offset = Math.sin(time) * 0.2;
1372
+
1373
+ neuron.mesh.position.x = neuron.initialPosition.x + offset;
1374
+ neuron.mesh.position.y = neuron.initialPosition.y + offset;
1375
+ neuron.mesh.position.z = neuron.initialPosition.z + offset;
1376
+ });
1377
+
1378
+ // Update connections
1379
+ connections.forEach(connection => {
1380
+ const points = [
1381
+ neurons[connection.pointsIndices[0]].mesh.position.clone(),
1382
+ neurons[connection.pointsIndices[1]].mesh.position.clone()
1383
+ ];
1384
+
1385
+ connection.line.geometry.setFromPoints(points);
1386
+ connection.line.geometry.attributes.position.needsUpdate = true;
1387
+
1388
+ // Randomly activate connections
1389
+ if (Math.random() > 0.995) {
1390
+ connection.active = true;
1391
+ connection.line.material.opacity = 0.8;
1392
+ connection.activationTime = Date.now();
1393
+ }
1394
+
1395
+ // Deactivate after duration
1396
+ if (connection.active && Date.now() - connection.activationTime > connection.duration) {
1397
+ connection.active = false;
1398
+ connection.line.material.opacity = 0.2;
1399
+ }
1400
+ });
1401
+
1402
+ // Follow mouse movement
1403
+ if (mouseX && mouseY) {
1404
+ const rect = container.getBoundingClientRect();
1405
+ if (
1406
+ mouseX >= rect.left &&
1407
+ mouseX <= rect.right &&
1408
+ mouseY >= rect.top &&
1409
+ mouseY <= rect.bottom
1410
+ ) {
1411
+ const normalizedMouseX = ((mouseX - rect.left) / rect.width) * 2 - 1;
1412
+ const normalizedMouseY = -((mouseY - rect.top) / rect.height) * 2 + 1;
1413
+
1414
+ brainGroup.rotation.y = normalizedMouseX * 0.5;
1415
+ brainGroup.rotation.x = normalizedMouseY * 0.5;
1416
+ }
1417
+ }
1418
+
1419
+ renderer.render(scene, camera);
1420
+ }
1421
+
1422
+ animate();
1423
+
1424
+ // Handle window resize
1425
+ window.addEventListener('resize', () => {
1426
+ camera.aspect = container.clientWidth / container.clientHeight;
1427
+ camera.updateProjectionMatrix();
1428
+ renderer.setSize(container.clientWidth, container.clientHeight);
1429
+ });
1430
+ }
1431
+
1432
+ // Skills graph animation
1433
+ function initSkillsGraph() {
1434
+ if (isMobile()) return; // Skip on mobile for performance
1435
+
1436
+ const container = document.getElementById('skills-graph');
1437
+ const renderer = new THREE.WebGLRenderer({
1438
+ alpha: true,
1439
+ antialias: true
1440
+ });
1441
+
1442
+ renderer.setSize(container.clientWidth, container.clientHeight);
1443
+ container.appendChild(renderer.domElement);
1444
+
1445
+ const scene = new THREE.Scene();
1446
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1447
+ camera.position.z = 15;
1448
+
1449
+ // Create a skills graph visualization
1450
+ const skillsGroup = new THREE.Group();
1451
+
1452
+ // Define skills - removed Computer Vision
1453
+ const skills = [
1454
+ { name: 'Python', level: 0.9, color: 0x4B8BBE },
1455
+ { name: 'TensorFlow', level: 0.85, color: 0xFF6F00 },
1456
+ { name: 'PyTorch', level: 0.8, color: 0xEE4C2C },
1457
+ { name: 'Scikit-Learn', level: 0.9, color: 0xF89939 },
1458
+ { name: 'Data Analysis', level: 0.88, color: 0x64ffda },
1459
+ { name: 'NLP', level: 0.78, color: 0x9C27B0 },
1460
+ { name: 'Deep Learning', level: 0.87, color: 0x5e38f7 }
1461
+ ];
1462
+
1463
+ // Create a 3D graph
1464
+ const center = new THREE.Vector3(0, 0, 0);
1465
+ const sphereGeometry = new THREE.SphereGeometry(0.3, 16, 16);
1466
+ const nodeObjects = [];
1467
+
1468
+ skills.forEach((skill, index) => {
1469
+ // Position nodes in a circle
1470
+ const angle = (index / skills.length) * Math.PI * 2;
1471
+ const radius = 6;
1472
+ const x = Math.cos(angle) * radius;
1473
+ const y = Math.sin(angle) * radius;
1474
+ const z = (Math.random() - 0.5) * 4;
1475
+
1476
+ const nodeMaterial = new THREE.MeshBasicMaterial({ color: skill.color });
1477
+ const node = new THREE.Mesh(sphereGeometry, nodeMaterial);
1478
+
1479
+ node.position.set(x, y, z);
1480
+ nodeObjects.push({ mesh: node, position: new THREE.Vector3(x, y, z) });
1481
+ skillsGroup.add(node);
1482
+
1483
+ // Create a line to center (skill level)
1484
+ const lineGeometry = new THREE.BufferGeometry();
1485
+ const lineMaterial = new THREE.LineBasicMaterial({
1486
+ color: skill.color,
1487
+ transparent: true,
1488
+ opacity: 0.7
1489
+ });
1490
+
1491
+ const scaledCenter = center.clone().lerp(node.position, 1 - skill.level);
1492
+ const points = [
1493
+ scaledCenter,
1494
+ node.position.clone()
1495
+ ];
1496
+
1497
+ lineGeometry.setFromPoints(points);
1498
+ const line = new THREE.Line(lineGeometry, lineMaterial);
1499
+ skillsGroup.add(line);
1500
+ });
1501
+
1502
+ // Connect nodes that are related
1503
+ for (let i = 0; i < nodeObjects.length; i++) {
1504
+ for (let j = i + 1; j < nodeObjects.length; j++) {
1505
+ if (Math.random() > 0.5) { // Only connect some nodes
1506
+ const lineGeometry = new THREE.BufferGeometry();
1507
+ const lineMaterial = new THREE.LineBasicMaterial({
1508
+ color: 0x64ffda,
1509
+ transparent: true,
1510
+ opacity: 0.2
1511
+ });
1512
+
1513
+ const points = [
1514
+ nodeObjects[i].position.clone(),
1515
+ nodeObjects[j].position.clone()
1516
+ ];
1517
+
1518
+ lineGeometry.setFromPoints(points);
1519
+ const line = new THREE.Line(lineGeometry, lineMaterial);
1520
+ skillsGroup.add(line);
1521
+ }
1522
+ }
1523
+ }
1524
+
1525
+ scene.add(skillsGroup);
1526
+
1527
+ // Create floating particles
1528
+ const particlesGeometry = new THREE.BufferGeometry();
1529
+ const particleCount = 200;
1530
+ const particlePositions = new Float32Array(particleCount * 3);
1531
+
1532
+ for (let i = 0; i < particleCount * 3; i += 3) {
1533
+ particlePositions[i] = (Math.random() - 0.5) * 20;
1534
+ particlePositions[i + 1] = (Math.random() - 0.5) * 20;
1535
+ particlePositions[i + 2] = (Math.random() - 0.5) * 20;
1536
+ }
1537
+
1538
+ particlesGeometry.setAttribute('position', new THREE.BufferAttribute(particlePositions, 3));
1539
+
1540
+ const particlesMaterial = new THREE.PointsMaterial({
1541
+ color: 0x64ffda,
1542
+ size: 0.1,
1543
+ transparent: true,
1544
+ opacity: 0.6
1545
+ });
1546
+
1547
+ const particles = new THREE.Points(particlesGeometry, particlesMaterial);
1548
+ scene.add(particles);
1549
+
1550
+ function animate() {
1551
+ requestAnimationFrame(animate);
1552
+
1553
+ // Rotate the skills graph
1554
+ skillsGroup.rotation.y += 0.002;
1555
+
1556
+ // Animate particles
1557
+ const positions = particlesGeometry.attributes.position.array;
1558
+ for (let i = 0; i < positions.length; i += 3) {
1559
+ positions[i + 1] += (Math.random() - 0.5) * 0.02;
1560
+ if (Math.abs(positions[i + 1]) > 10) {
1561
+ positions[i + 1] *= -1;
1562
+ }
1563
+ }
1564
+ particlesGeometry.attributes.position.needsUpdate = true;
1565
+
1566
+ // Follow mouse movement
1567
+ if (mouseX && mouseY) {
1568
+ const rect = container.getBoundingClientRect();
1569
+ if (
1570
+ mouseX >= rect.left &&
1571
+ mouseX <= rect.right &&
1572
+ mouseY >= rect.top &&
1573
+ mouseY <= rect.bottom
1574
+ ) {
1575
+ const normalizedMouseX = ((mouseX - rect.left) / rect.width) * 2 - 1;
1576
+ const normalizedMouseY = -((mouseY - rect.top) / rect.height) * 2 + 1;
1577
+
1578
+ skillsGroup.rotation.y = normalizedMouseX * 1;
1579
+ skillsGroup.rotation.x = normalizedMouseY * 0.5;
1580
+ }
1581
+ }
1582
+
1583
+ renderer.render(scene, camera);
1584
+ }
1585
+
1586
+ animate();
1587
+
1588
+ // Handle window resize
1589
+ window.addEventListener('resize', () => {
1590
+ camera.aspect = container.clientWidth / container.clientHeight;
1591
+ camera.updateProjectionMatrix();
1592
+ renderer.setSize(container.clientWidth, container.clientHeight);
1593
+ });
1594
+ }
1595
+
1596
+ // Project visualizations
1597
+ function initProject1Canvas() {
1598
+ const container = document.getElementById('project1-canvas');
1599
+ if (!container) return;
1600
+
1601
+ const renderer = new THREE.WebGLRenderer({
1602
+ alpha: true,
1603
+ antialias: true
1604
+ });
1605
+
1606
+ renderer.setSize(container.clientWidth, container.clientHeight);
1607
+ container.appendChild(renderer.domElement);
1608
+
1609
+ const scene = new THREE.Scene();
1610
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1611
+ camera.position.z = 5;
1612
+
1613
+ // Create anomaly detection visualization
1614
+ const dataPoints = [];
1615
+ const dataPointCount = 50;
1616
+ const normalPointMaterial = new THREE.MeshBasicMaterial({ color: 0x64ffda });
1617
+ const anomalyPointMaterial = new THREE.MeshBasicMaterial({ color: 0xff6b6b });
1618
+ const pointGeometry = new THREE.SphereGeometry(0.1, 8, 8);
1619
+
1620
+ // Create a grid plane for reference
1621
+ const gridGeometry = new THREE.PlaneGeometry(10, 10, 10, 10);
1622
+ const gridMaterial = new THREE.MeshBasicMaterial({
1623
+ color: 0x444444,
1624
+ wireframe: true,
1625
+ transparent: true,
1626
+ opacity: 0.3
1627
+ });
1628
+ const grid = new THREE.Mesh(gridGeometry, gridMaterial);
1629
+ grid.rotation.x = -Math.PI / 2;
1630
+ scene.add(grid);
1631
+
1632
+ // Create data points
1633
+ for (let i = 0; i < dataPointCount; i++) {
1634
+ const isAnomaly = Math.random() > 0.9;
1635
+
1636
+ let x, y, z;
1637
+ if (isAnomaly) {
1638
+ // Anomalies are more spread out
1639
+ x = (Math.random() - 0.5) * 8;
1640
+ y = (Math.random() - 0.5) * 8;
1641
+ z = (Math.random() - 0.5) * 8;
1642
+ } else {
1643
+ // Normal data points are clustered
1644
+ x = (Math.random() - 0.5) * 4;
1645
+ y = (Math.random() - 0.5) * 4;
1646
+ z = (Math.random() - 0.5) * 4;
1647
+ }
1648
+
1649
+ const material = isAnomaly ? anomalyPointMaterial : normalPointMaterial;
1650
+ const point = new THREE.Mesh(pointGeometry, material);
1651
+ point.position.set(x, y, z);
1652
+ scene.add(point);
1653
+
1654
+ dataPoints.push({
1655
+ mesh: point,
1656
+ isAnomaly: isAnomaly,
1657
+ originalPosition: new THREE.Vector3(x, y, z),
1658
+ velocity: new THREE.Vector3(
1659
+ (Math.random() - 0.5) * 0.01,
1660
+ (Math.random() - 0.5) * 0.01,
1661
+ (Math.random() - 0.5) * 0.01
1662
+ )
1663
+ });
1664
+ }
1665
+
1666
+ // Add anomaly detection boundary
1667
+ const boundaryGeometry = new THREE.SphereGeometry(3, 32, 32);
1668
+ const boundaryMaterial = new THREE.MeshBasicMaterial({
1669
+ color: 0x64ffda,
1670
+ wireframe: true,
1671
+ transparent: true,
1672
+ opacity: 0.2
1673
+ });
1674
+ const boundary = new THREE.Mesh(boundaryGeometry, boundaryMaterial);
1675
+ scene.add(boundary);
1676
+
1677
+ function animate() {
1678
+ requestAnimationFrame(animate);
1679
+
1680
+ // Animate data points
1681
+ dataPoints.forEach(point => {
1682
+ point.mesh.position.add(point.velocity);
1683
+
1684
+ // Bounce back if too far from original position
1685
+ const distance = point.mesh.position.distanceTo(point.originalPosition);
1686
+ if (distance > 1) {
1687
+ point.velocity.multiplyScalar(-1);
1688
+ }
1689
+
1690
+ // Highlight anomalies
1691
+ if (point.isAnomaly) {
1692
+ point.mesh.scale.setScalar(1 + Math.sin(Date.now() * 0.005) * 0.5);
1693
+ }
1694
+ });
1695
+
1696
+ // Pulse the boundary
1697
+ boundary.scale.setScalar(1 + Math.sin(Date.now() * 0.001) * 0.05);
1698
+
1699
+ // Rotate the scene
1700
+ scene.rotation.y += 0.005;
1701
+
1702
+ renderer.render(scene, camera);
1703
+ }
1704
+
1705
+ animate();
1706
+
1707
+ // Handle window resize
1708
+ window.addEventListener('resize', () => {
1709
+ camera.aspect = container.clientWidth / container.clientHeight;
1710
+ camera.updateProjectionMatrix();
1711
+ renderer.setSize(container.clientWidth, container.clientHeight);
1712
+ });
1713
+ }
1714
+
1715
+ function initProject2Canvas() {
1716
+ const container = document.getElementById('project2-canvas');
1717
+ if (!container) return;
1718
+
1719
+ const renderer = new THREE.WebGLRenderer({
1720
+ alpha: true,
1721
+ antialias: true
1722
+ });
1723
+
1724
+ renderer.setSize(container.clientWidth, container.clientHeight);
1725
+ container.appendChild(renderer.domElement);
1726
+
1727
+ const scene = new THREE.Scene();
1728
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1729
+ camera.position.z = 5;
1730
+
1731
+ // Create NLP visualization
1732
+ const textGeometry = new THREE.TorusKnotGeometry(1, 0.3, 100, 16);
1733
+ const textMaterial = new THREE.MeshBasicMaterial({
1734
+ color: 0x5e38f7,
1735
+ wireframe: true,
1736
+ transparent: true,
1737
+ opacity: 0.7
1738
+ });
1739
+ const textModel = new THREE.Mesh(textGeometry, textMaterial);
1740
+ scene.add(textModel);
1741
+
1742
+ // Add text particles
1743
+ const particlesGeometry = new THREE.BufferGeometry();
1744
+ const particleCount = 100;
1745
+ const particlePositions = new Float32Array(particleCount * 3);
1746
+ const particleSizes = new Float32Array(particleCount);
1747
+
1748
+ for (let i = 0; i < particleCount * 3; i += 3) {
1749
+ const phi = Math.random() * Math.PI * 2;
1750
+ const theta = Math.random() * Math.PI;
1751
+ const radius = 2 + Math.random() * 1;
1752
+
1753
+ particlePositions[i] = radius * Math.sin(theta) * Math.cos(phi);
1754
+ particlePositions[i + 1] = radius * Math.sin(theta) * Math.sin(phi);
1755
+ particlePositions[i + 2] = radius * Math.cos(theta);
1756
+
1757
+ particleSizes[i / 3] = Math.random() * 0.2 + 0.05;
1758
+ }
1759
+
1760
+ particlesGeometry.setAttribute('position', new THREE.BufferAttribute(particlePositions, 3));
1761
+ particlesGeometry.setAttribute('size', new THREE.BufferAttribute(particleSizes, 1));
1762
+
1763
+ const particlesMaterial = new THREE.PointsMaterial({
1764
+ color: 0x64ffda,
1765
+ size: 0.1,
1766
+ transparent: true,
1767
+ opacity: 0.8
1768
+ });
1769
+
1770
+ const particles = new THREE.Points(particlesGeometry, particlesMaterial);
1771
+ scene.add(particles);
1772
+
1773
+ // Add connections between particles
1774
+ const linesMaterial = new THREE.LineBasicMaterial({
1775
+ color: 0x64ffda,
1776
+ transparent: true,
1777
+ opacity: 0.2
1778
+ });
1779
+
1780
+ const linesGeometry = new THREE.BufferGeometry();
1781
+ const linePositions = [];
1782
+
1783
+ for (let i = 0; i < particleCount; i++) {
1784
+ const i3 = i * 3;
1785
+ const x1 = particlePositions[i3];
1786
+ const y1 = particlePositions[i3 + 1];
1787
+ const z1 = particlePositions[i3 + 2];
1788
+
1789
+ for (let j = i + 1; j < particleCount; j++) {
1790
+ const j3 = j * 3;
1791
+ const x2 = particlePositions[j3];
1792
+ const y2 = particlePositions[j3 + 1];
1793
+ const z2 = particlePositions[j3 + 2];
1794
+
1795
+ const distance = Math.sqrt(
1796
+ Math.pow(x2 - x1, 2) +
1797
+ Math.pow(y2 - y1, 2) +
1798
+ Math.pow(z2 - z1, 2)
1799
+ );
1800
+
1801
+ if (distance < 1 && Math.random() > 0.9) {
1802
+ linePositions.push(x1, y1, z1);
1803
+ linePositions.push(x2, y2, z2);
1804
+ }
1805
+ }
1806
+ }
1807
+
1808
+ linesGeometry.setAttribute('position', new THREE.Float32BufferAttribute(linePositions, 3));
1809
+ const lines = new THREE.LineSegments(linesGeometry, linesMaterial);
1810
+ scene.add(lines);
1811
+
1812
+ function animate() {
1813
+ requestAnimationFrame(animate);
1814
+
1815
+ // Rotate torus knot
1816
+ textModel.rotation.x += 0.005;
1817
+ textModel.rotation.y += 0.003;
1818
+
1819
+ // Animate particles
1820
+ const positions = particlesGeometry.attributes.position.array;
1821
+ for (let i = 0; i < particleCount; i++) {
1822
+ const i3 = i * 3;
1823
+
1824
+ // Orbit effect
1825
+ const x = positions[i3];
1826
+ const z = positions[i3 + 2];
1827
+
1828
+ const angle = Math.atan2(z, x) + 0.005;
1829
+ const radius = Math.sqrt(x * x + z * z);
1830
+
1831
+ positions[i3] = Math.cos(angle) * radius;
1832
+ positions[i3 + 2] = Math.sin(angle) * radius;
1833
+
1834
+ // Pulse effect
1835
+ particleSizes[i] = 0.05 + Math.sin(Date.now() * 0.001 + i) * 0.05;
1836
+ }
1837
+
1838
+ particlesGeometry.attributes.position.needsUpdate = true;
1839
+ particlesGeometry.attributes.size.needsUpdate = true;
1840
+
1841
+ // Rotate the whole scene
1842
+ scene.rotation.y += 0.002;
1843
+
1844
+ renderer.render(scene, camera);
1845
+ }
1846
+
1847
+ animate();
1848
+
1849
+ // Handle window resize
1850
+ window.addEventListener('resize', () => {
1851
+ camera.aspect = container.clientWidth / container.clientHeight;
1852
+ camera.updateProjectionMatrix();
1853
+ renderer.setSize(container.clientWidth, container.clientHeight);
1854
+ });
1855
+ }
1856
+
1857
+ function initProject3Canvas() {
1858
+ const container = document.getElementById('project3-canvas');
1859
+ if (!container) return;
1860
+
1861
+ const renderer = new THREE.WebGLRenderer({
1862
+ alpha: true,
1863
+ antialias: true
1864
+ });
1865
+
1866
+ renderer.setSize(container.clientWidth, container.clientHeight);
1867
+ container.appendChild(renderer.domElement);
1868
+
1869
+ const scene = new THREE.Scene();
1870
+ const camera = new THREE.PerspectiveCamera(75, container.clientWidth / container.clientHeight, 0.1, 1000);
1871
+ camera.position.z = 5;
1872
+
1873
+ // Housing price prediction visualization
1874
+
1875
+ // Create a house
1876
+ const houseGroup = new THREE.Group();
1877
+
1878
+ // Base
1879
+ const baseGeometry = new THREE.BoxGeometry(2, 0.2, 1.5);
1880
+ const baseMaterial = new THREE.MeshBasicMaterial({ color: 0x666666 });
1881
+ const base = new THREE.Mesh(baseGeometry, baseMaterial);
1882
+ base.position.y = -0.5;
1883
+ houseGroup.add(base);
1884
+
1885
+ // Walls
1886
+ const wallsGeometry = new THREE.BoxGeometry(1.8, 1, 1.3);
1887
+ const wallsMaterial = new THREE.MeshBasicMaterial({ color: 0xcccccc });
1888
+ const walls = new THREE.Mesh(wallsGeometry, wallsMaterial);
1889
+ houseGroup.add(walls);
1890
+
1891
+ // Roof
1892
+ const roofGeometry = new THREE.ConeGeometry(1.3, 0.8, 4);
1893
+ const roofMaterial = new THREE.MeshBasicMaterial({ color: 0x993300 });
1894
+ const roof = new THREE.Mesh(roofGeometry, roofMaterial);
1895
+ roof.rotation.y = Math.PI / 4;
1896
+ roof.position.y = 0.9;
1897
+ houseGroup.add(roof);
1898
+
1899
+ scene.add(houseGroup);
1900
+
1901
+ // Add price graph
1902
+ const graphGroup = new THREE.Group();
1903
+ graphGroup.position.set(-3, 0, 0);
1904
+
1905
+ // Price line
1906
+ const lineGeometry = new THREE.BufferGeometry();
1907
+ const lineMaterial = new THREE.LineBasicMaterial({ color: 0x64ffda });
1908
+
1909
+ const points = [];
1910
+ for (let i = 0; i < 10; i++) {
1911
+ const x = i * 0.3;
1912
+ const y = Math.sin(i * 0.5) * 0.5 + Math.random() * 0.3;
1913
+ points.push(new THREE.Vector3(x, y, 0));
1914
+ }
1915
+
1916
+ lineGeometry.setFromPoints(points);
1917
+ const priceLine = new THREE.Line(lineGeometry, lineMaterial);
1918
+ graphGroup.add(priceLine);
1919
+
1920
+ // Add graph axes
1921
+ const axesGeometry = new THREE.BufferGeometry();
1922
+ const axesMaterial = new THREE.LineBasicMaterial({
1923
+ color: 0xffffff,
1924
+ opacity: 0.5,
1925
+ transparent: true
1926
+ });
1927
+
1928
+ const axesPoints = [
1929
+ new THREE.Vector3(0, -1, 0),
1930
+ new THREE.Vector3(0, 1, 0),
1931
+ new THREE.Vector3(0, 0, 0),
1932
+ new THREE.Vector3(3, 0, 0)
1933
+ ];
1934
+
1935
+ axesGeometry.setFromPoints(axesPoints);
1936
+ const axes = new THREE.LineSegments(axesGeometry, axesMaterial);
1937
+ graphGroup.add(axes);
1938
+
1939
+ // Add data points
1940
+ const dataPoints = [];
1941
+ const dataGeometry = new THREE.SphereGeometry(0.05, 8, 8);
1942
+ const dataMaterial = new THREE.MeshBasicMaterial({ color: 0xff6b6b });
1943
+
1944
+ for (let i = 0; i < 30; i++) {
1945
+ const x = Math.random() * 3;
1946
+ const y = Math.random() * 2 - 1;
1947
+ const z = Math.random() * 2 - 1;
1948
+
1949
+ const point = new THREE.Mesh(dataGeometry, dataMaterial);
1950
+ point.position.set(x, y, z);
1951
+ graphGroup.add(point);
1952
+
1953
+ dataPoints.push({
1954
+ mesh: point,
1955
+ initialPosition: new THREE.Vector3(x, y, z),
1956
+ velocity: new THREE.Vector3(
1957
+ (Math.random() - 0.5) * 0.01,
1958
+ (Math.random() - 0.5) * 0.01,
1959
+ (Math.random() - 0.5) * 0.01
1960
+ )
1961
+ });
1962
+ }
1963
+
1964
+ scene.add(graphGroup);
1965
+
1966
+ function animate() {
1967
+ requestAnimationFrame(animate);
1968
+
1969
+ // Rotate house
1970
+ houseGroup.rotation.y += 0.01;
1971
+
1972
+ // Animate data points
1973
+ dataPoints.forEach(point => {
1974
+ point.mesh.position.add(point.velocity);
1975
+
1976
+ // Bounce back if too far from original position
1977
+ const distance = point.mesh.position.distanceTo(point.initialPosition);
1978
+ if (distance > 0.3) {
1979
+ point.velocity.multiplyScalar(-1);
1980
+ }
1981
+ });
1982
+
1983
+ // Animate price line
1984
+ const linePoints = [];
1985
+ for (let i = 0; i < 10; i++) {
1986
+ const x = i * 0.3;
1987
+ const time = Date.now() * 0.001 + i;
1988
+ const y = Math.sin(time * 0.3) * 0.3 + 0.5;
1989
+ linePoints.push(new THREE.Vector3(x, y, 0));
1990
+ }
1991
+ lineGeometry.setFromPoints(linePoints);
1992
+
1993
+ renderer.render(scene, camera);
1994
+ }
1995
+
1996
+ animate();
1997
+
1998
+ // Handle window resize
1999
+ window.addEventListener('resize', () => {
2000
+ camera.aspect = container.clientWidth / container.clientHeight;
2001
+ camera.updateProjectionMatrix();
2002
+ renderer.setSize(container.clientWidth, container.clientHeight);
2003
+ });
2004
+ }
2005
+
2006
+ // Education radar animation with maximum visibility
2007
+ function initEducationRadar() {
2008
+ const container = document.getElementById('education-canvas');
2009
+ if (!container) {
2010
+ console.error("Education canvas container not found");
2011
+ return;
2012
+ }
2013
+
2014
+ // Clear any existing canvas
2015
+ while (container.firstChild) {
2016
+ container.removeChild(container.firstChild);
2017
+ }
2018
+
2019
+ const renderer = new THREE.WebGLRenderer({
2020
+ alpha: true,
2021
+ antialias: true
2022
+ });
2023
+
2024
+ renderer.setSize(container.clientWidth, container.clientHeight);
2025
+ container.appendChild(renderer.domElement);
2026
+
2027
+ const scene = new THREE.Scene();
2028
+ const camera = new THREE.PerspectiveCamera(60, container.clientWidth / container.clientHeight, 0.1, 1000);
2029
+ camera.position.z = 4; // Position camera much closer
2030
+
2031
+ // Create a more eye-catching BVCOE logo visualization
2032
+ const logoGroup = new THREE.Group();
2033
+
2034
+ // College emblem base - more vibrant and larger
2035
+ const emblemGeometry = new THREE.CircleGeometry(1.5, 32);
2036
+ const emblemMaterial = new THREE.MeshBasicMaterial({
2037
+ color: 0x112240,
2038
+ transparent: true,
2039
+ opacity: 0.9
2040
+ });
2041
+
2042
+ const emblem = new THREE.Mesh(emblemGeometry, emblemMaterial);
2043
+ logoGroup.add(emblem);
2044
+
2045
+ // Create much brighter, more vibrant rings
2046
+ const createRing = (radius, tubeRadius, color, opacity) => {
2047
+ const geometry = new THREE.TorusGeometry(radius, tubeRadius, 16, 100);
2048
+ const material = new THREE.MeshBasicMaterial({
2049
+ color: color,
2050
+ transparent: true,
2051
+ opacity: opacity
2052
+ });
2053
+ return new THREE.Mesh(geometry, material);
2054
+ };
2055
+
2056
+ // Add extra-bright colored rings with increased size
2057
+ const ring1 = createRing(1.3, 0.08, 0x64ffda, 1.0);
2058
+ const ring2 = createRing(1.0, 0.06, 0x5e38f7, 1.0);
2059
+ const ring3 = createRing(0.7, 0.04, 0x0ea5e9, 1.0);
2060
+
2061
+ logoGroup.add(ring1, ring2, ring3);
2062
+
2063
+ // Add prominent particles with glow effect
2064
+ const createOrbitalParticles = (radius, count, color) => {
2065
+ const geometry = new THREE.BufferGeometry();
2066
+ const positions = new Float32Array(count * 3);
2067
+
2068
+ for (let i = 0; i < count; i++) {
2069
+ const angle = (i / count) * Math.PI * 2;
2070
+ const x = Math.cos(angle) * radius;
2071
+ const y = Math.sin(angle) * radius;
2072
+ const z = (Math.random() - 0.5) * 0.1;
2073
+
2074
+ positions[i * 3] = x;
2075
+ positions[i * 3 + 1] = y;
2076
+ positions[i * 3 + 2] = z;
2077
+ }
2078
+
2079
+ geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
2080
+
2081
+ const material = new THREE.PointsMaterial({
2082
+ color: color,
2083
+ size: 0.25, // Much larger size
2084
+ transparent: true,
2085
+ opacity: 1.0 // Full opacity
2086
+ });
2087
+
2088
+ return new THREE.Points(geometry, material);
2089
+ };
2090
+
2091
+ // Create larger, more visible orbital particles
2092
+ const particles1 = createOrbitalParticles(1.3, 15, 0x64ffda);
2093
+ const particles2 = createOrbitalParticles(1.0, 12, 0x5e38f7);
2094
+ const particles3 = createOrbitalParticles(0.7, 9, 0x0ea5e9);
2095
+
2096
+ logoGroup.add(particles1, particles2, particles3);
2097
+
2098
+ // Add bright center glow
2099
+ const centerGeometry = new THREE.CircleGeometry(0.3, 32);
2100
+ const centerMaterial = new THREE.MeshBasicMaterial({
2101
+ color: 0xffffff,
2102
+ transparent: true,
2103
+ opacity: 0.9
2104
+ });
2105
+
2106
+ const center = new THREE.Mesh(centerGeometry, centerMaterial);
2107
+ logoGroup.add(center);
2108
+
2109
+ // Add letter "B" for BVCOE
2110
+ const addLetter = (letter, position, color) => {
2111
+ // Use box geometry to create simple letters
2112
+ const letterGeometry = new THREE.BoxGeometry(0.15, 0.3, 0.05);
2113
+ const letterMaterial = new THREE.MeshBasicMaterial({
2114
+ color: color,
2115
+ transparent: false
2116
+ });
2117
+
2118
+ const mesh = new THREE.Mesh(letterGeometry, letterMaterial);
2119
+ mesh.position.set(position.x, position.y, position.z);
2120
+ return mesh;
2121
+ };
2122
+
2123
+ // Add simple representation of letters
2124
+ const bLetter = addLetter("B", {x: -0.15, y: 0, z: 0.1}, 0x64ffda);
2125
+ logoGroup.add(bLetter);
2126
+
2127
+ scene.add(logoGroup);
2128
+
2129
+ // Animation loop with faster and more noticeable movements
2130
+ function animate() {
2131
+ requestAnimationFrame(animate);
2132
+
2133
+ // Rotate rings faster for more visibility
2134
+ ring1.rotation.z += 0.02;
2135
+ ring2.rotation.z -= 0.025;
2136
+ ring3.rotation.z += 0.03;
2137
+
2138
+ // Rotate particles in opposite directions (faster)
2139
+ particles1.rotation.z -= 0.015;
2140
+ particles2.rotation.z += 0.02;
2141
+ particles3.rotation.z -= 0.025;
2142
+
2143
+ // Pulse center with high visibility
2144
+ const scale = 1 + Math.sin(Date.now() * 0.005) * 0.3;
2145
+ center.scale.set(scale, scale, 1);
2146
+
2147
+ // Add automatic rotation for constant movement
2148
+ logoGroup.rotation.y += 0.01;
2149
+
2150
+ // Interactive rotation - more responsive
2151
+ if (mouseX && mouseY) {
2152
+ const rect = container.getBoundingClientRect();
2153
+ if (
2154
+ mouseX >= rect.left &&
2155
+ mouseX <= rect.right &&
2156
+ mouseY >= rect.top &&
2157
+ mouseY <= rect.bottom
2158
+ ) {
2159
+ const normalizedMouseX = ((mouseX - rect.left) / rect.width) * 2 - 1;
2160
+ const normalizedMouseY = -((mouseY - rect.top) / rect.height) * 2 + 1;
2161
+
2162
+ logoGroup.rotation.x = normalizedMouseY * 0.8; // More responsive rotation
2163
+ logoGroup.rotation.y = normalizedMouseX * 0.8;
2164
+ } else {
2165
+ // Slower return to neutral position
2166
+ logoGroup.rotation.x *= 0.95;
2167
+ }
2168
+ }
2169
+
2170
+ renderer.render(scene, camera);
2171
+ }
2172
+
2173
+ animate();
2174
+
2175
+ // Force the right size immediately and handle window resize
2176
+ renderer.setSize(container.clientWidth, container.clientHeight);
2177
+ window.addEventListener('resize', () => {
2178
+ camera.aspect = container.clientWidth / container.clientHeight;
2179
+ camera.updateProjectionMatrix();
2180
+ renderer.setSize(container.clientWidth, container.clientHeight);
2181
+ });
2182
+
2183
+ console.log("Education radar animation initialized");
2184
+ }
2185
+
2186
+ // Progress bars animation
2187
+ function animateProgressBars() {
2188
+ const progressBars = document.querySelectorAll('.progress');
2189
+ const observer = new IntersectionObserver((entries) => {
2190
+ entries.forEach(entry => {
2191
+ if (entry.isIntersecting) {
2192
+ const target = entry.target;
2193
+ const width = target.getAttribute('data-width');
2194
+ target.style.width = width;
2195
+ observer.unobserve(target);
2196
+ }
2197
+ });
2198
+ }, { threshold: 0.1 });
2199
+
2200
+ progressBars.forEach(bar => {
2201
+ observer.observe(bar);
2202
+ });
2203
+ }
2204
+
2205
+ // Initialize all animations
2206
+ document.addEventListener('DOMContentLoaded', function() {
2207
+ // Initialize canvases
2208
+ initHeroCanvas();
2209
+ initBrainModel();
2210
+ initSkillsGraph();
2211
+ initProject1Canvas();
2212
+ initProject2Canvas();
2213
+ initProject3Canvas();
2214
+ initEducationRadar();
2215
+
2216
+ // Initialize other animations
2217
+ animateProgressBars();
2218
+ });
2219
+ </script>
2220
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Sumitkumar098/portfolio-webiste" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
2221
  </html>