eyad222 commited on
Commit
d2a2589
Β·
verified Β·
1 Parent(s): 39a9803

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +1124 -18
index.html CHANGED
@@ -1,19 +1,1125 @@
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>From Data to Defense β€” NIDS Survey Results</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Sora:wght@300;400;600;700;800&display=swap" rel="stylesheet">
8
+ <style>
9
+ :root {
10
+ --bg: #040c14;
11
+ --bg2: #071622;
12
+ --bg3: #0a1f2e;
13
+ --cyan: #00d4ff;
14
+ --cyan2: #00a8cc;
15
+ --green: #00ff9d;
16
+ --orange: #ff6b35;
17
+ --yellow: #ffd700;
18
+ --red: #ff3d5a;
19
+ --text: #d4eaf7;
20
+ --muted: #5a7a8a;
21
+ --border: rgba(0,212,255,0.15);
22
+ --mono: 'Share Tech Mono', monospace;
23
+ --sans: 'Sora', sans-serif;
24
+ }
25
+
26
+ * { margin: 0; padding: 0; box-sizing: border-box; }
27
+
28
+ html { scroll-behavior: smooth; }
29
+
30
+ body {
31
+ background: var(--bg);
32
+ color: var(--text);
33
+ font-family: var(--sans);
34
+ overflow-x: hidden;
35
+ cursor: default;
36
+ }
37
+
38
+ /* ── SCANLINE OVERLAY ── */
39
+ body::before {
40
+ content: '';
41
+ position: fixed;
42
+ inset: 0;
43
+ background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.07) 2px, rgba(0,0,0,0.07) 4px);
44
+ pointer-events: none;
45
+ z-index: 9999;
46
+ }
47
+
48
+ /* ── GRID BACKGROUND ── */
49
+ .grid-bg {
50
+ position: fixed;
51
+ inset: 0;
52
+ background-image:
53
+ linear-gradient(rgba(0,212,255,0.04) 1px, transparent 1px),
54
+ linear-gradient(90deg, rgba(0,212,255,0.04) 1px, transparent 1px);
55
+ background-size: 60px 60px;
56
+ pointer-events: none;
57
+ z-index: 0;
58
+ }
59
+
60
+ /* ── NAV ── */
61
+ nav {
62
+ position: fixed;
63
+ top: 0; left: 0; right: 0;
64
+ z-index: 100;
65
+ background: rgba(4,12,20,0.92);
66
+ backdrop-filter: blur(12px);
67
+ border-bottom: 1px solid var(--border);
68
+ padding: 0 2rem;
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+ height: 56px;
73
+ }
74
+
75
+ .nav-logo {
76
+ font-family: var(--mono);
77
+ font-size: 0.8rem;
78
+ color: var(--cyan);
79
+ letter-spacing: 2px;
80
+ text-transform: uppercase;
81
+ }
82
+
83
+ .nav-links {
84
+ display: flex;
85
+ gap: 2rem;
86
+ list-style: none;
87
+ }
88
+
89
+ .nav-links a {
90
+ font-family: var(--mono);
91
+ font-size: 0.72rem;
92
+ color: var(--muted);
93
+ text-decoration: none;
94
+ letter-spacing: 1px;
95
+ text-transform: uppercase;
96
+ transition: color 0.2s;
97
+ }
98
+
99
+ .nav-links a:hover { color: var(--cyan); }
100
+
101
+ /* ── SECTIONS ── */
102
+ section {
103
+ position: relative;
104
+ z-index: 1;
105
+ padding: 6rem 2rem;
106
+ max-width: 1200px;
107
+ margin: 0 auto;
108
+ }
109
+
110
+ /* ── HERO ── */
111
+ #hero {
112
+ min-height: 100vh;
113
+ display: flex;
114
+ flex-direction: column;
115
+ justify-content: center;
116
+ max-width: 100%;
117
+ padding: 6rem 4rem;
118
+ position: relative;
119
+ overflow: hidden;
120
+ }
121
+
122
+ .hero-tag {
123
+ font-family: var(--mono);
124
+ font-size: 0.72rem;
125
+ color: var(--cyan);
126
+ letter-spacing: 4px;
127
+ text-transform: uppercase;
128
+ margin-bottom: 1.5rem;
129
+ opacity: 0;
130
+ animation: fadeUp 0.8s 0.2s forwards;
131
+ }
132
+
133
+ h1 {
134
+ font-size: clamp(2.5rem, 6vw, 5.5rem);
135
+ font-weight: 800;
136
+ line-height: 1.05;
137
+ letter-spacing: -2px;
138
+ max-width: 900px;
139
+ opacity: 0;
140
+ animation: fadeUp 0.8s 0.4s forwards;
141
+ }
142
+
143
+ h1 span { color: var(--cyan); }
144
+
145
+ .hero-sub {
146
+ margin-top: 2rem;
147
+ font-size: 1rem;
148
+ color: var(--muted);
149
+ max-width: 600px;
150
+ line-height: 1.7;
151
+ opacity: 0;
152
+ animation: fadeUp 0.8s 0.6s forwards;
153
+ }
154
+
155
+ .hero-stats {
156
+ display: flex;
157
+ gap: 3rem;
158
+ margin-top: 4rem;
159
+ opacity: 0;
160
+ animation: fadeUp 0.8s 0.8s forwards;
161
+ }
162
+
163
+ .stat-item { text-align: left; }
164
+
165
+ .stat-num {
166
+ font-family: var(--mono);
167
+ font-size: 2.8rem;
168
+ color: var(--cyan);
169
+ line-height: 1;
170
+ }
171
+
172
+ .stat-label {
173
+ font-size: 0.72rem;
174
+ color: var(--muted);
175
+ letter-spacing: 2px;
176
+ text-transform: uppercase;
177
+ margin-top: 0.3rem;
178
+ }
179
+
180
+ /* Glowing orb */
181
+ .hero-orb {
182
+ position: absolute;
183
+ right: -100px;
184
+ top: 50%;
185
+ transform: translateY(-50%);
186
+ width: 600px;
187
+ height: 600px;
188
+ border-radius: 50%;
189
+ background: radial-gradient(circle, rgba(0,212,255,0.08) 0%, transparent 70%);
190
+ animation: pulse 4s ease-in-out infinite;
191
+ }
192
+
193
+ @keyframes pulse {
194
+ 0%, 100% { transform: translateY(-50%) scale(1); opacity: 0.6; }
195
+ 50% { transform: translateY(-50%) scale(1.1); opacity: 1; }
196
+ }
197
+
198
+ /* ── SECTION HEADERS ── */
199
+ .section-label {
200
+ font-family: var(--mono);
201
+ font-size: 0.68rem;
202
+ color: var(--cyan);
203
+ letter-spacing: 4px;
204
+ text-transform: uppercase;
205
+ margin-bottom: 0.75rem;
206
+ }
207
+
208
+ h2 {
209
+ font-size: clamp(1.8rem, 4vw, 3rem);
210
+ font-weight: 700;
211
+ letter-spacing: -1px;
212
+ margin-bottom: 0.5rem;
213
+ line-height: 1.15;
214
+ }
215
+
216
+ .section-desc {
217
+ color: var(--muted);
218
+ font-size: 0.9rem;
219
+ line-height: 1.7;
220
+ max-width: 640px;
221
+ margin-bottom: 3rem;
222
+ }
223
+
224
+ /* ── DIVIDER ── */
225
+ .divider {
226
+ border: none;
227
+ border-top: 1px solid var(--border);
228
+ margin: 0;
229
+ }
230
+
231
+ /* ── DATASET CARDS ── */
232
+ .dataset-grid {
233
+ display: grid;
234
+ grid-template-columns: 1fr 1fr;
235
+ gap: 1.5rem;
236
+ margin-top: 2rem;
237
+ }
238
+
239
+ .card {
240
+ background: var(--bg2);
241
+ border: 1px solid var(--border);
242
+ border-radius: 12px;
243
+ padding: 2rem;
244
+ position: relative;
245
+ overflow: hidden;
246
+ transition: border-color 0.3s, transform 0.3s;
247
+ }
248
+
249
+ .card:hover {
250
+ border-color: rgba(0,212,255,0.4);
251
+ transform: translateY(-2px);
252
+ }
253
+
254
+ .card::before {
255
+ content: '';
256
+ position: absolute;
257
+ top: 0; left: 0; right: 0;
258
+ height: 2px;
259
+ background: linear-gradient(90deg, var(--cyan), transparent);
260
+ }
261
+
262
+ .card-title {
263
+ font-family: var(--mono);
264
+ font-size: 0.78rem;
265
+ color: var(--cyan);
266
+ letter-spacing: 2px;
267
+ text-transform: uppercase;
268
+ margin-bottom: 1.2rem;
269
+ }
270
+
271
+ .card h3 {
272
+ font-size: 1.5rem;
273
+ font-weight: 700;
274
+ margin-bottom: 0.5rem;
275
+ }
276
+
277
+ .card p {
278
+ font-size: 0.85rem;
279
+ color: var(--muted);
280
+ line-height: 1.6;
281
+ margin-bottom: 1.5rem;
282
+ }
283
+
284
+ .dataset-stat {
285
+ display: flex;
286
+ justify-content: space-between;
287
+ align-items: center;
288
+ padding: 0.5rem 0;
289
+ border-top: 1px solid var(--border);
290
+ font-size: 0.82rem;
291
+ }
292
+
293
+ .dataset-stat span:first-child { color: var(--muted); }
294
+ .dataset-stat span:last-child { font-family: var(--mono); color: var(--cyan); }
295
+
296
+ /* ── TABS ── */
297
+ .tabs {
298
+ display: flex;
299
+ gap: 0;
300
+ border: 1px solid var(--border);
301
+ border-radius: 8px;
302
+ overflow: hidden;
303
+ margin-bottom: 2rem;
304
+ width: fit-content;
305
+ }
306
+
307
+ .tab-btn {
308
+ background: transparent;
309
+ border: none;
310
+ color: var(--muted);
311
+ font-family: var(--mono);
312
+ font-size: 0.72rem;
313
+ letter-spacing: 2px;
314
+ text-transform: uppercase;
315
+ padding: 0.7rem 1.5rem;
316
+ cursor: pointer;
317
+ transition: all 0.2s;
318
+ border-right: 1px solid var(--border);
319
+ }
320
+
321
+ .tab-btn:last-child { border-right: none; }
322
+
323
+ .tab-btn.active {
324
+ background: rgba(0,212,255,0.1);
325
+ color: var(--cyan);
326
+ }
327
+
328
+ .tab-btn:hover:not(.active) {
329
+ background: rgba(0,212,255,0.05);
330
+ color: var(--text);
331
+ }
332
+
333
+ .tab-content { display: none; }
334
+ .tab-content.active { display: block; }
335
+
336
+ /* ── CHART AREA ── */
337
+ .chart-wrap {
338
+ background: var(--bg2);
339
+ border: 1px solid var(--border);
340
+ border-radius: 12px;
341
+ padding: 2rem;
342
+ margin-bottom: 2rem;
343
+ }
344
+
345
+ .chart-title {
346
+ font-family: var(--mono);
347
+ font-size: 0.72rem;
348
+ color: var(--muted);
349
+ letter-spacing: 2px;
350
+ text-transform: uppercase;
351
+ margin-bottom: 1.5rem;
352
+ }
353
+
354
+ .bar-chart { display: flex; flex-direction: column; gap: 0.65rem; }
355
+
356
+ .bar-row {
357
+ display: grid;
358
+ grid-template-columns: 130px 1fr 70px;
359
+ align-items: center;
360
+ gap: 0.75rem;
361
+ }
362
+
363
+ .bar-label {
364
+ font-family: var(--mono);
365
+ font-size: 0.72rem;
366
+ color: var(--muted);
367
+ text-align: right;
368
+ white-space: nowrap;
369
+ }
370
+
371
+ .bar-track {
372
+ height: 20px;
373
+ background: rgba(255,255,255,0.04);
374
+ border-radius: 4px;
375
+ overflow: hidden;
376
+ }
377
+
378
+ .bar-fill {
379
+ height: 100%;
380
+ border-radius: 4px;
381
+ width: 0;
382
+ transition: width 1s cubic-bezier(.16,1,.3,1);
383
+ position: relative;
384
+ }
385
+
386
+ .bar-fill::after {
387
+ content: '';
388
+ position: absolute;
389
+ top: 0; right: 0; bottom: 0;
390
+ width: 6px;
391
+ background: rgba(255,255,255,0.3);
392
+ border-radius: 0 4px 4px 0;
393
+ }
394
+
395
+ .bar-val {
396
+ font-family: var(--mono);
397
+ font-size: 0.72rem;
398
+ color: var(--text);
399
+ }
400
+
401
+ /* ── DATA TABLE ── */
402
+ .table-wrap {
403
+ overflow-x: auto;
404
+ border: 1px solid var(--border);
405
+ border-radius: 12px;
406
+ }
407
+
408
+ table {
409
+ width: 100%;
410
+ border-collapse: collapse;
411
+ font-size: 0.8rem;
412
+ }
413
+
414
+ thead th {
415
+ background: var(--bg3);
416
+ font-family: var(--mono);
417
+ font-size: 0.65rem;
418
+ letter-spacing: 2px;
419
+ text-transform: uppercase;
420
+ color: var(--cyan);
421
+ padding: 0.9rem 1rem;
422
+ text-align: left;
423
+ border-bottom: 1px solid var(--border);
424
+ white-space: nowrap;
425
+ }
426
+
427
+ tbody td {
428
+ padding: 0.7rem 1rem;
429
+ border-bottom: 1px solid var(--border);
430
+ color: var(--text);
431
+ font-family: var(--mono);
432
+ font-size: 0.78rem;
433
+ white-space: nowrap;
434
+ }
435
+
436
+ tbody tr:last-child td { border-bottom: none; }
437
+
438
+ tbody tr:hover td { background: rgba(0,212,255,0.04); }
439
+
440
+ .best { color: var(--green); font-weight: 700; }
441
+ .worst { color: var(--red); }
442
+ .mid { color: var(--yellow); }
443
+
444
+ .badge {
445
+ display: inline-block;
446
+ padding: 0.15rem 0.5rem;
447
+ border-radius: 3px;
448
+ font-size: 0.65rem;
449
+ letter-spacing: 1px;
450
+ text-transform: uppercase;
451
+ }
452
+
453
+ .badge-ml { background: rgba(0,255,157,0.1); color: var(--green); border: 1px solid rgba(0,255,157,0.2); }
454
+ .badge-dl { background: rgba(0,212,255,0.1); color: var(--cyan); border: 1px solid rgba(0,212,255,0.2); }
455
+ .badge-smote { background: rgba(255,107,53,0.1); color: var(--orange); border: 1px solid rgba(255,107,53,0.2); }
456
+
457
+ /* ── FINDING CARDS ── */
458
+ .findings-grid {
459
+ display: grid;
460
+ grid-template-columns: repeat(3, 1fr);
461
+ gap: 1.5rem;
462
+ margin-top: 2rem;
463
+ }
464
+
465
+ .finding-card {
466
+ background: var(--bg2);
467
+ border: 1px solid var(--border);
468
+ border-radius: 12px;
469
+ padding: 1.75rem;
470
+ position: relative;
471
+ overflow: hidden;
472
+ transition: all 0.3s;
473
+ }
474
+
475
+ .finding-card:hover {
476
+ border-color: rgba(0,212,255,0.35);
477
+ transform: translateY(-3px);
478
+ }
479
+
480
+ .finding-icon {
481
+ font-size: 1.8rem;
482
+ margin-bottom: 1rem;
483
+ }
484
+
485
+ .finding-card h4 {
486
+ font-size: 1rem;
487
+ font-weight: 700;
488
+ margin-bottom: 0.6rem;
489
+ color: var(--text);
490
+ }
491
+
492
+ .finding-card p {
493
+ font-size: 0.82rem;
494
+ color: var(--muted);
495
+ line-height: 1.6;
496
+ }
497
+
498
+ /* ── COMPUTATIONAL COST ── */
499
+ .compute-grid {
500
+ display: grid;
501
+ grid-template-columns: 1fr 1fr;
502
+ gap: 1.5rem;
503
+ margin-top: 2rem;
504
+ }
505
+
506
+ /* ── GUIDELINES TABLE ── */
507
+ .guidelines-wrap {
508
+ background: var(--bg2);
509
+ border: 1px solid var(--border);
510
+ border-radius: 12px;
511
+ overflow: hidden;
512
+ margin-top: 2rem;
513
+ }
514
+
515
+ .gl-row {
516
+ display: grid;
517
+ grid-template-columns: 2fr 1.2fr 1.2fr 2fr;
518
+ gap: 0;
519
+ border-bottom: 1px solid var(--border);
520
+ }
521
+
522
+ .gl-row:last-child { border-bottom: none; }
523
+
524
+ .gl-header .gl-cell {
525
+ background: var(--bg3);
526
+ font-family: var(--mono);
527
+ font-size: 0.65rem;
528
+ color: var(--cyan);
529
+ letter-spacing: 2px;
530
+ text-transform: uppercase;
531
+ }
532
+
533
+ .gl-cell {
534
+ padding: 1rem 1.2rem;
535
+ font-size: 0.82rem;
536
+ border-right: 1px solid var(--border);
537
+ line-height: 1.5;
538
+ }
539
+
540
+ .gl-cell:last-child { border-right: none; }
541
+
542
+ .gl-row:not(.gl-header):hover .gl-cell { background: rgba(0,212,255,0.03); }
543
+
544
+ /* ── ANIMATIONS ── */
545
+ @keyframes fadeUp {
546
+ from { opacity: 0; transform: translateY(24px); }
547
+ to { opacity: 1; transform: translateY(0); }
548
+ }
549
+
550
+ .reveal {
551
+ opacity: 0;
552
+ transform: translateY(30px);
553
+ transition: opacity 0.7s ease, transform 0.7s ease;
554
+ }
555
+
556
+ .reveal.visible {
557
+ opacity: 1;
558
+ transform: translateY(0);
559
+ }
560
+
561
+ /* ── FOOTER ── */
562
+ footer {
563
+ position: relative;
564
+ z-index: 1;
565
+ border-top: 1px solid var(--border);
566
+ padding: 2rem 4rem;
567
+ display: flex;
568
+ justify-content: space-between;
569
+ align-items: center;
570
+ }
571
+
572
+ footer p {
573
+ font-family: var(--mono);
574
+ font-size: 0.68rem;
575
+ color: var(--muted);
576
+ letter-spacing: 1px;
577
+ }
578
+
579
+ .dot {
580
+ display: inline-block;
581
+ width: 6px; height: 6px;
582
+ border-radius: 50%;
583
+ background: var(--cyan);
584
+ margin-right: 0.5rem;
585
+ animation: blink 1.2s step-end infinite;
586
+ }
587
+
588
+ @keyframes blink {
589
+ 0%, 100% { opacity: 1; }
590
+ 50% { opacity: 0; }
591
+ }
592
+
593
+ @media (max-width: 768px) {
594
+ #hero { padding: 6rem 2rem; }
595
+ .hero-stats { flex-wrap: wrap; gap: 2rem; }
596
+ .dataset-grid, .findings-grid, .compute-grid { grid-template-columns: 1fr; }
597
+ .gl-row { grid-template-columns: 1fr 1fr; }
598
+ nav { padding: 0 1rem; }
599
+ .nav-links { display: none; }
600
+ h1 { letter-spacing: -1px; }
601
+ }
602
+ </style>
603
+ </head>
604
+ <body>
605
+
606
+ <div class="grid-bg"></div>
607
+
608
+ <!-- NAV -->
609
+ <nav>
610
+ <div class="nav-logo"><span class="dot"></span>NIDS Survey 2024</div>
611
+ <ul class="nav-links">
612
+ <li><a href="#datasets">Datasets</a></li>
613
+ <li><a href="#results">Results</a></li>
614
+ <li><a href="#compute">Compute Cost</a></li>
615
+ <li><a href="#findings">Findings</a></li>
616
+ <li><a href="#guidelines">Guidelines</a></li>
617
+ </ul>
618
+ </nav>
619
+
620
+ <!-- HERO -->
621
+ <div id="hero">
622
+ <div class="hero-orb"></div>
623
+ <div class="hero-tag">Conference Presentation Β· NIDS Survey</div>
624
+ <h1>From <span>Data</span><br>to Defense</h1>
625
+ <p class="hero-sub">An analytical overview of machine and deep learning models for Network Intrusion Detection Systems, evaluated across two benchmark datasets under a unified experimental framework.</p>
626
+ <div class="hero-stats">
627
+ <div class="stat-item">
628
+ <div class="stat-num">7</div>
629
+ <div class="stat-label">Models Evaluated</div>
630
+ </div>
631
+ <div class="stat-item">
632
+ <div class="stat-num">2</div>
633
+ <div class="stat-label">Benchmark Datasets</div>
634
+ </div>
635
+ <div class="stat-item">
636
+ <div class="stat-num">8</div>
637
+ <div class="stat-label">Evaluation Metrics</div>
638
+ </div>
639
+ <div class="stat-item">
640
+ <div class="stat-num">4M+</div>
641
+ <div class="stat-label">Records Processed</div>
642
+ </div>
643
+ </div>
644
+ </div>
645
+
646
+ <hr class="divider">
647
+
648
+ <!-- DATASETS -->
649
+ <section id="datasets">
650
+ <div class="reveal">
651
+ <div class="section-label">// Section 01</div>
652
+ <h2>Benchmark Datasets</h2>
653
+ <p class="section-desc">Two widely-used intrusion detection datasets selected to represent both classical and modern network traffic environments.</p>
654
+ </div>
655
+
656
+ <div class="dataset-grid reveal">
657
+ <div class="card">
658
+ <div class="card-title">Dataset 01</div>
659
+ <h3>KDD Cup 99</h3>
660
+ <p>One of the earliest and most widely-used IDS benchmarks. Contains diverse attack types across 41 features, enabling systematic ML evaluation despite its age.</p>
661
+ <div class="dataset-stat"><span>Total Records</span><span>~4,000,000</span></div>
662
+ <div class="dataset-stat"><span>Features</span><span>41</span></div>
663
+ <div class="dataset-stat"><span>Attack Types</span><span>10 (after filtering)</span></div>
664
+ <div class="dataset-stat"><span>Largest Class</span><span>smurf Β· 2,807,886</span></div>
665
+ <div class="dataset-stat"><span>Normal Traffic</span><span>972,781</span></div>
666
+ </div>
667
+
668
+ <div class="card">
669
+ <div class="card-title">Dataset 02</div>
670
+ <h3>UNSW-NB15</h3>
671
+ <p>A modern dataset with realistic traffic patterns and diverse attack categories. Reflects contemporary network environments with significant class imbalance.</p>
672
+ <div class="dataset-stat"><span>Total Records</span><span>~2,367,624</span></div>
673
+ <div class="dataset-stat"><span>Attack Categories</span><span>9</span></div>
674
+ <div class="dataset-stat"><span>Benign Traffic</span><span>2,237,731</span></div>
675
+ <div class="dataset-stat"><span>Rarest Class</span><span>Worms Β· 158</span></div>
676
+ <div class="dataset-stat"><span>Imbalance Ratio</span><span>High</span></div>
677
+ </div>
678
+ </div>
679
+ </section>
680
+
681
+ <hr class="divider">
682
+
683
+ <!-- RESULTS -->
684
+ <section id="results">
685
+ <div class="reveal">
686
+ <div class="section-label">// Section 02</div>
687
+ <h2>Model Performance Results</h2>
688
+ <p class="section-desc">Comprehensive metrics including balanced accuracy, F1-macro, G-Mean, precision, and recall evaluated across all models on both datasets β€” with and without SMOTE oversampling.</p>
689
+ </div>
690
+
691
+ <div class="reveal">
692
+ <div class="tabs">
693
+ <button class="tab-btn active" onclick="switchTab(event,'unsw-raw')">UNSW Β· Raw</button>
694
+ <button class="tab-btn" onclick="switchTab(event,'unsw-smote')">UNSW Β· SMOTE</button>
695
+ <button class="tab-btn" onclick="switchTab(event,'kdd-raw')">KDD Cup Β· Raw</button>
696
+ <button class="tab-btn" onclick="switchTab(event,'kdd-smote')">KDD Cup Β· SMOTE</button>
697
+ </div>
698
+
699
+ <!-- UNSW RAW -->
700
+ <div id="unsw-raw" class="tab-content active">
701
+ <div class="chart-wrap">
702
+ <div class="chart-title">// Balanced Accuracy β€” UNSW-NB15 (Raw)</div>
703
+ <div class="bar-chart" id="chart-unsw-raw"></div>
704
+ </div>
705
+ <div class="table-wrap">
706
+ <table>
707
+ <thead>
708
+ <tr>
709
+ <th>Model</th><th>Type</th><th>Accuracy</th><th>Balanced Acc.</th><th>Precision</th><th>Recall</th><th>F1-Macro</th><th>G-Mean</th>
710
+ </tr>
711
+ </thead>
712
+ <tbody>
713
+ <tr><td>Random Forest</td><td><span class="badge badge-ml">ML</span></td><td>0.9757</td><td class="best">0.5657</td><td class="best">0.6197</td><td class="best">0.5657</td><td class="best">0.5810</td><td class="best">0.4822</td></tr>
714
+ <tr><td>XGBoost</td><td><span class="badge badge-ml">ML</span></td><td>0.9738</td><td>0.4247</td><td>0.6435</td><td>0.4247</td><td>0.4510</td><td class="worst">0.0180</td></tr>
715
+ <tr><td>Decision Tree</td><td><span class="badge badge-ml">ML</span></td><td>0.9753</td><td>0.4703</td><td>0.5760</td><td>0.4703</td><td>0.4850</td><td>0.0238</td></tr>
716
+ <tr><td>LSTM-CNN</td><td><span class="badge badge-dl">DL</span></td><td>0.9729</td><td>0.3823</td><td>0.4673</td><td>0.3823</td><td>0.3950</td><td>0.0001</td></tr>
717
+ <tr><td>ANN</td><td><span class="badge badge-dl">DL</span></td><td>0.9589</td><td>0.3744</td><td>0.3568</td><td>0.3744</td><td>0.2990</td><td class="worst">β‰ˆ0</td></tr>
718
+ <tr><td>LSTM</td><td><span class="badge badge-dl">DL</span></td><td>0.9673</td><td>0.3287</td><td>0.3546</td><td>0.3287</td><td>0.3250</td><td class="worst">β‰ˆ0</td></tr>
719
+ <tr><td>CNN</td><td><span class="badge badge-dl">DL</span></td><td class="worst">0.9524</td><td class="worst">0.2781</td><td class="worst">0.3386</td><td class="worst">0.2781</td><td class="worst">0.2730</td><td class="worst">β‰ˆ0</td></tr>
720
+ </tbody>
721
+ </table>
722
+ </div>
723
+ </div>
724
+
725
+ <!-- UNSW SMOTE -->
726
+ <div id="unsw-smote" class="tab-content">
727
+ <div class="chart-wrap">
728
+ <div class="chart-title">// Balanced Accuracy β€” UNSW-NB15 (After SMOTE) β€” Degradation observed</div>
729
+ <div class="bar-chart" id="chart-unsw-smote"></div>
730
+ </div>
731
+ <div class="table-wrap">
732
+ <table>
733
+ <thead>
734
+ <tr>
735
+ <th>Model</th><th>Accuracy</th><th>Balanced Acc.</th><th>Precision</th><th>Recall</th><th>F1-Macro</th><th>G-Mean</th>
736
+ </tr>
737
+ </thead>
738
+ <tbody>
739
+ <tr><td>LSTM-CNN <span class="badge badge-smote">SMOTE</span></td><td class="worst">0.0112</td><td>0.1241</td><td>0.0918</td><td>0.1241</td><td class="worst">0.0077</td><td>0.0017</td></tr>
740
+ <tr><td>Random Forest <span class="badge badge-smote">SMOTE</span></td><td>0.9194</td><td class="best">0.1001</td><td class="best">0.1919</td><td class="best">0.1001</td><td class="best">0.0961</td><td class="worst">β‰ˆ0</td></tr>
741
+ <tr><td>ANN <span class="badge badge-smote">SMOTE</span></td><td>0.9194</td><td>0.1000</td><td>0.0919</td><td>0.1000</td><td>0.0958</td><td class="worst">β‰ˆ0</td></tr>
742
+ <tr><td>CNN <span class="badge badge-smote">SMOTE</span></td><td>0.9194</td><td>0.1000</td><td>0.0919</td><td>0.1000</td><td>0.0958</td><td class="worst">β‰ˆ0</td></tr>
743
+ <tr><td>XGBoost <span class="badge badge-smote">SMOTE</span></td><td>0.1104</td><td>0.1108</td><td>0.1044</td><td>0.1108</td><td>0.0248</td><td class="worst">β‰ˆ0</td></tr>
744
+ <tr><td>Decision Tree <span class="badge badge-smote">SMOTE</span></td><td>0.8633</td><td>0.0960</td><td>0.0930</td><td>0.0960</td><td>0.0937</td><td class="worst">β‰ˆ0</td></tr>
745
+ <tr><td>LSTM <span class="badge badge-smote">SMOTE</span></td><td class="worst">0.0352</td><td class="worst">0.0683</td><td class="worst">0.0814</td><td class="worst">0.0683</td><td class="worst">0.0097</td><td class="worst">β‰ˆ0</td></tr>
746
+ </tbody>
747
+ </table>
748
+ </div>
749
+ <div class="chart-wrap" style="margin-top:1.5rem; border-color: rgba(255,61,90,0.2)">
750
+ <div class="chart-title" style="color:var(--red)">// ⚠ SMOTE degraded ALL metrics on UNSW-NB15 β€” Not recommended for high-dimensional imbalanced data</div>
751
+ <p style="font-size:0.85rem; color:var(--muted); line-height:1.7">Applying SMOTE to the UNSW-NB15 dataset caused substantial deterioration across all models. Balanced accuracy, F1-macro, and G-Mean dropped significantly compared to raw data settings, indicating that sample-level oversampling is ineffective for high-dimensional complex datasets. Model robustness and algorithm-level imbalance handling are more critical.</p>
752
+ </div>
753
+ </div>
754
+
755
+ <!-- KDD RAW -->
756
+ <div id="kdd-raw" class="tab-content">
757
+ <div class="chart-wrap">
758
+ <div class="chart-title">// Balanced Accuracy β€” KDD Cup 99 (Raw)</div>
759
+ <div class="bar-chart" id="chart-kdd-raw"></div>
760
+ </div>
761
+ <div class="table-wrap">
762
+ <table>
763
+ <thead>
764
+ <tr>
765
+ <th>Model</th><th>Type</th><th>Accuracy</th><th>Balanced Acc.</th><th>Precision</th><th>Recall</th><th>F1-Macro</th><th>G-Mean</th>
766
+ </tr>
767
+ </thead>
768
+ <tbody>
769
+ <tr><td>Random Forest</td><td><span class="badge badge-ml">ML</span></td><td class="best">0.9999</td><td class="best">0.9940</td><td class="best">0.9969</td><td class="best">0.9940</td><td class="best">0.9955</td><td class="best">0.9939</td></tr>
770
+ <tr><td>XGBoost</td><td><span class="badge badge-ml">ML</span></td><td>0.9997</td><td>0.9909</td><td>0.9941</td><td>0.9909</td><td>0.9925</td><td>0.9908</td></tr>
771
+ <tr><td>LSTM-CNN</td><td><span class="badge badge-dl">DL</span></td><td>0.9992</td><td>0.9848</td><td>0.9687</td><td>0.9848</td><td>0.9758</td><td>0.9846</td></tr>
772
+ <tr><td>Decision Tree</td><td><span class="badge badge-ml">ML</span></td><td>0.9988</td><td>0.9614</td><td>0.9659</td><td>0.9614</td><td>0.9622</td><td>0.9586</td></tr>
773
+ <tr><td>LSTM</td><td><span class="badge badge-dl">DL</span></td><td>0.9985</td><td>0.9673</td><td>0.9401</td><td>0.9673</td><td>0.9517</td><td>0.9663</td></tr>
774
+ <tr><td>ANN</td><td><span class="badge badge-dl">DL</span></td><td>0.9987</td><td>0.9427</td><td>0.9622</td><td>0.9427</td><td>0.9519</td><td>0.9362</td></tr>
775
+ <tr><td>CNN</td><td><span class="badge badge-dl">DL</span></td><td>0.9899</td><td class="worst">0.6256</td><td>0.7080</td><td class="worst">0.6256</td><td>0.6446</td><td class="worst">0.0051</td></tr>
776
+ </tbody>
777
+ </table>
778
+ </div>
779
+ </div>
780
+
781
+ <!-- KDD SMOTE -->
782
+ <div id="kdd-smote" class="tab-content">
783
+ <div class="chart-wrap">
784
+ <div class="chart-title">// Balanced Accuracy β€” KDD Cup 99 (After SMOTE) β€” Selective improvements</div>
785
+ <div class="bar-chart" id="chart-kdd-smote"></div>
786
+ </div>
787
+ <div class="table-wrap">
788
+ <table>
789
+ <thead>
790
+ <tr>
791
+ <th>Model</th><th>Accuracy</th><th>Balanced Acc.</th><th>Precision</th><th>Recall</th><th>F1-Macro</th><th>G-Mean</th>
792
+ </tr>
793
+ </thead>
794
+ <tbody>
795
+ <tr><td>Random Forest <span class="badge badge-smote">SMOTE</span></td><td class="best">0.9999</td><td>0.9922</td><td class="best">0.9978</td><td>0.9922</td><td class="best">0.9949</td><td>0.9920</td></tr>
796
+ <tr><td>XGBoost <span class="badge badge-smote">SMOTE</span></td><td>0.9997</td><td class="best">0.9971</td><td>0.9864</td><td class="best">0.9971</td><td>0.9916</td><td class="best">0.9971</td></tr>
797
+ <tr><td>ANN <span class="badge badge-smote">SMOTE</span></td><td>0.9926</td><td>0.9953</td><td>0.7993</td><td>0.9954</td><td>0.8655</td><td>0.9953</td></tr>
798
+ <tr><td>LSTM-CNN <span class="badge badge-smote">SMOTE</span></td><td>0.9992</td><td>0.9907</td><td>0.9589</td><td>0.9908</td><td>0.9737</td><td>0.9906</td></tr>
799
+ <tr><td>Decision Tree <span class="badge badge-smote">SMOTE</span></td><td>0.9970</td><td>0.9931</td><td>0.9252</td><td>0.9931</td><td>0.9386</td><td>0.9930</td></tr>
800
+ <tr><td>LSTM <span class="badge badge-smote">SMOTE</span></td><td>0.9981</td><td>0.9980</td><td>0.9111</td><td>0.9912</td><td>0.9431</td><td>0.9910</td></tr>
801
+ <tr><td>CNN <span class="badge badge-smote">SMOTE</span></td><td>0.9494</td><td>0.9721</td><td class="worst">0.5231</td><td>0.9721</td><td class="worst">0.6199</td><td>0.9717</td></tr>
802
+ </tbody>
803
+ </table>
804
+ </div>
805
+ <div class="chart-wrap" style="margin-top:1.5rem; border-color: rgba(0,255,157,0.2)">
806
+ <div class="chart-title" style="color:var(--green)">// βœ“ SMOTE on KDD Cup 99 β€” Improvements for DL models, marginal effect on tree-based</div>
807
+ <p style="font-size:0.85rem; color:var(--muted); line-height:1.7">SMOTE improved minority class recall for deep learning models notably (ANN: 0.94 β†’ 0.99, CNN: 0.63 β†’ 0.97). However, precision dropped, indicating more false positives. Tree-based models (RF, XGBoost) were largely unaffected β€” they inherently handle class imbalance well and do not benefit significantly from data-level oversampling.</p>
808
+ </div>
809
+ </div>
810
+ </div>
811
+ </section>
812
+
813
+ <hr class="divider">
814
+
815
+ <!-- COMPUTE COST -->
816
+ <section id="compute">
817
+ <div class="reveal">
818
+ <div class="section-label">// Section 03</div>
819
+ <h2>Computational Cost Analysis</h2>
820
+ <p class="section-desc">Inference time and memory footprint are critical factors for real-world NIDS deployment. Deep learning architectures show significantly higher latency and resource consumption.</p>
821
+ </div>
822
+
823
+ <div class="compute-grid reveal">
824
+ <div class="chart-wrap">
825
+ <div class="chart-title">// Inference Time (seconds) β€” UNSW-NB15</div>
826
+ <div class="bar-chart" id="chart-time-unsw"></div>
827
+ </div>
828
+ <div class="chart-wrap">
829
+ <div class="chart-title">// Inference Time (seconds) β€” KDD Cup 99</div>
830
+ <div class="bar-chart" id="chart-time-kdd"></div>
831
+ </div>
832
+ </div>
833
+
834
+ <div class="compute-grid reveal">
835
+ <div class="chart-wrap">
836
+ <div class="chart-title">// Memory Usage (MB) β€” UNSW-NB15 Β· Note: RF 22,424 MB</div>
837
+ <div class="bar-chart" id="chart-mem-unsw"></div>
838
+ </div>
839
+ <div class="chart-wrap">
840
+ <div class="chart-title">// Memory Usage (MB) β€” KDD Cup 99</div>
841
+ <div class="bar-chart" id="chart-mem-kdd"></div>
842
+ </div>
843
+ </div>
844
+
845
+ <div class="table-wrap reveal" style="margin-top:1.5rem">
846
+ <table>
847
+ <thead>
848
+ <tr><th>Model</th><th>Type</th><th>UNSW Infer. Time (s)</th><th>UNSW Memory (MB)</th><th>KDD Infer. Time (s)</th><th>KDD Memory (MB)</th></tr>
849
+ </thead>
850
+ <tbody>
851
+ <tr><td>Decision Tree</td><td><span class="badge badge-ml">ML</span></td><td class="best">0.025</td><td>1,579</td><td class="best">0.026</td><td>4,959</td></tr>
852
+ <tr><td>XGBoost</td><td><span class="badge badge-ml">ML</span></td><td>0.333</td><td class="best">1,571</td><td>0.226</td><td class="best">4,959</td></tr>
853
+ <tr><td>Random Forest</td><td><span class="badge badge-ml">ML</span></td><td>0.571</td><td class="worst">22,424</td><td>0.373</td><td>4,989</td></tr>
854
+ <tr><td>ANN</td><td><span class="badge badge-dl">DL</span></td><td>1.622</td><td>5,267</td><td>1.410</td><td>4,503</td></tr>
855
+ <tr><td>CNN</td><td><span class="badge badge-dl">DL</span></td><td>1.649</td><td>4,375</td><td>1.314</td><td>5,096</td></tr>
856
+ <tr><td>LSTM</td><td><span class="badge badge-dl">DL</span></td><td>1.902</td><td>4,710</td><td>1.475</td><td>5,104</td></tr>
857
+ <tr><td>LSTM-CNN</td><td><span class="badge badge-dl">DL</span></td><td class="worst">3.721</td><td>4,720</td><td class="worst">2.995</td><td>5,112</td></tr>
858
+ </tbody>
859
+ </table>
860
+ </div>
861
+ </section>
862
+
863
+ <hr class="divider">
864
+
865
+ <!-- KEY FINDINGS -->
866
+ <section id="findings">
867
+ <div class="reveal">
868
+ <div class="section-label">// Section 04</div>
869
+ <h2>Key Findings</h2>
870
+ <p class="section-desc">Six critical insights derived from unified experimental evaluation across models and datasets.</p>
871
+ </div>
872
+
873
+ <div class="findings-grid">
874
+ <div class="finding-card reveal">
875
+ <div class="finding-icon">🌲</div>
876
+ <h4>Tree Models Dominate on Structured Data</h4>
877
+ <p>Random Forest and XGBoost achieved near-perfect F1-macro (>0.99) on KDD Cup 99. Ensemble methods consistently outperformed all other approaches on structured, tabular datasets.</p>
878
+ </div>
879
+ <div class="finding-card reveal">
880
+ <div class="finding-icon">βš–οΈ</div>
881
+ <h4>Accuracy is a Misleading Metric</h4>
882
+ <p>Multiple DL models reported >96% accuracy on UNSW-NB15, yet their balanced accuracy and G-Mean revealed near-zero minority class detection, exposing the danger of relying on a single metric.</p>
883
+ </div>
884
+ <div class="finding-card reveal">
885
+ <div class="finding-icon">🧠</div>
886
+ <h4>Deep Learning: High Cost, Mixed Returns</h4>
887
+ <p>CNN-LSTM hybrid achieved strong KDD performance (F1: 0.976) but requires 3.7s inference and >5GB memory. The computational cost limits real-time applicability significantly.</p>
888
+ </div>
889
+ <div class="finding-card reveal">
890
+ <div class="finding-icon">🚫</div>
891
+ <h4>SMOTE Harmful on High-Dimensional Data</h4>
892
+ <p>Applying SMOTE to UNSW-NB15 degraded all metrics across all models substantially. Simple sample-level balancing cannot compensate for feature complexity and distribution shifts.</p>
893
+ </div>
894
+ <div class="finding-card reveal">
895
+ <div class="finding-icon">βœ…</div>
896
+ <h4>SMOTE Helps DL on KDD Cup 99</h4>
897
+ <p>ANN balanced accuracy improved from 0.943 to 0.995, and CNN from 0.626 to 0.972 after SMOTE on KDD Cup 99. However, this came at the cost of precision degradation.</p>
898
+ </div>
899
+ <div class="finding-card reveal">
900
+ <div class="finding-icon">⚑</div>
901
+ <h4>Decision Tree Best for Real-Time</h4>
902
+ <p>With ~0.025s inference time and the smallest memory footprint, Decision Trees are optimal for latency-sensitive deployments where sub-second detection is a hard requirement.</p>
903
+ </div>
904
+ </div>
905
+ </section>
906
+
907
+ <hr class="divider">
908
+
909
+ <!-- GUIDELINES -->
910
+ <section id="guidelines">
911
+ <div class="reveal">
912
+ <div class="section-label">// Section 05</div>
913
+ <h2>Dataset–Model Selection Guidelines</h2>
914
+ <p class="section-desc">Practical decision framework for selecting the right model and strategy based on deployment requirements and dataset characteristics.</p>
915
+ </div>
916
+
917
+ <div class="guidelines-wrap reveal">
918
+ <div class="gl-row gl-header">
919
+ <div class="gl-cell">Deployment Scenario</div>
920
+ <div class="gl-cell">Recommended Model</div>
921
+ <div class="gl-cell">Dataset</div>
922
+ <div class="gl-cell">Key Evidence</div>
923
+ </div>
924
+ <div class="gl-row">
925
+ <div class="gl-cell">Structured, low-complexity traffic</div>
926
+ <div class="gl-cell"><span class="badge badge-ml">RF / XGBoost</span></div>
927
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">KDD Cup 99</div>
928
+ <div class="gl-cell" style="color:var(--muted)">F1-macro &gt;0.99; near-perfect balanced accuracy</div>
929
+ </div>
930
+ <div class="gl-row">
931
+ <div class="gl-cell">High-dimensional, imbalanced traffic</div>
932
+ <div class="gl-cell"><span class="badge badge-ml">RF</span></div>
933
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">UNSW-NB15</div>
934
+ <div class="gl-cell" style="color:var(--muted)">Best balanced accuracy (0.57) and G-Mean (0.48) among all tested models</div>
935
+ </div>
936
+ <div class="gl-row">
937
+ <div class="gl-cell">Real-time / latency-sensitive deployment</div>
938
+ <div class="gl-cell"><span class="badge badge-ml">DT</span></div>
939
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">Both</div>
940
+ <div class="gl-cell" style="color:var(--muted)">Fastest inference (~0.02s); lowest memory footprint across all datasets</div>
941
+ </div>
942
+ <div class="gl-row">
943
+ <div class="gl-cell">Sequential / temporal attack patterns</div>
944
+ <div class="gl-cell"><span class="badge badge-dl">LSTM / CNN-LSTM</span></div>
945
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">KDD Cup 99</div>
946
+ <div class="gl-cell" style="color:var(--muted)">Strong recall on ordered flow attacks; temporal dependency modeling</div>
947
+ </div>
948
+ <div class="gl-row">
949
+ <div class="gl-cell">Imbalanced data + deep learning</div>
950
+ <div class="gl-cell"><span class="badge badge-smote">SMOTE + ANN/LSTM</span></div>
951
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">KDD Cup 99</div>
952
+ <div class="gl-cell" style="color:var(--muted)">Balanced accuracy improved from 0.94 to 0.99; recall gains outweigh precision drop</div>
953
+ </div>
954
+ <div class="gl-row">
955
+ <div class="gl-cell">High-dimensional data + imbalance</div>
956
+ <div class="gl-cell"><span class="badge badge-ml">RF (no SMOTE)</span></div>
957
+ <div class="gl-cell" style="font-family:var(--mono); font-size:0.78rem; color:var(--cyan)">UNSW-NB15</div>
958
+ <div class="gl-cell" style="color:var(--muted)">SMOTE degraded all metrics on high-dimensional data; avoid sample-level balancing</div>
959
+ </div>
960
+ </div>
961
+
962
+ <!-- Conclusion box -->
963
+ <div class="card reveal" style="margin-top:2rem; border-color:rgba(0,255,157,0.2)">
964
+ <div class="card-title" style="color:var(--green)">// Conclusion & Future Directions</div>
965
+ <h3 style="margin-bottom:1rem; font-size:1.2rem">Ensemble Methods Offer the Best Production Trade-off</h3>
966
+ <p>Decision Trees achieve inference times as low as 0.02s for real-time monitoring, while hybrid CNN-LSTM models exceed 3s latency with >5GB memory β€” suitable only for offline analysis. RF and XGBoost provide the optimal balance of strong detection performance with manageable inference costs, making them the most practical choice for production NIDS environments.</p>
967
+ <p style="margin-top:1rem">Future research should explore <strong style="color:var(--cyan)">transformer-based architectures</strong> for NIDS β€” leveraging self-attention for parallel processing and better capture of global traffic patterns, potentially overcoming the computational bottlenecks observed in LSTM and CNN-LSTM models.</p>
968
+ </div>
969
+ </section>
970
+
971
+ <footer>
972
+ <p>From Data to Defense Β· NIDS Survey Β· Evaluation of ML & DL for Network Intrusion Detection</p>
973
+ <p style="color:var(--cyan)">KDD Cup 99 Β· UNSW-NB15 Β· 7 Models Β· Unified Evaluation Framework</p>
974
+ </footer>
975
+
976
+ <script>
977
+ // ── BAR CHART RENDERER ──
978
+ function renderBar(containerId, data, colorFn) {
979
+ const el = document.getElementById(containerId);
980
+ if (!el) return;
981
+ const max = Math.max(...data.map(d => d.val));
982
+ el.innerHTML = '';
983
+ data.forEach((d, i) => {
984
+ const pct = (d.val / max * 100).toFixed(1);
985
+ const color = colorFn ? colorFn(d, i) : `hsl(${180 + i * 15}, 70%, 55%)`;
986
+ const row = document.createElement('div');
987
+ row.className = 'bar-row';
988
+ row.innerHTML = `
989
+ <div class="bar-label">${d.label}</div>
990
+ <div class="bar-track"><div class="bar-fill" data-width="${pct}" style="background:${color}; width:0%"></div></div>
991
+ <div class="bar-val">${d.val.toFixed ? d.val.toFixed(4) : d.val}</div>`;
992
+ el.appendChild(row);
993
+ });
994
+ requestAnimationFrame(() => {
995
+ el.querySelectorAll('.bar-fill').forEach(b => b.style.width = b.dataset.width + '%');
996
+ });
997
+ }
998
+
999
+ const ml_color = () => 'linear-gradient(90deg, #00d4ff, #00a8cc)';
1000
+ const dl_color = () => 'linear-gradient(90deg, #8b5cf6, #6d28d9)';
1001
+ const smote_color = () => 'linear-gradient(90deg, #ff6b35, #cc4400)';
1002
+
1003
+ function modelColor(d) {
1004
+ if (['RF','DT','XGBoost'].includes(d.type)) return 'linear-gradient(90deg, #00d4ff, #00a8cc)';
1005
+ return 'linear-gradient(90deg, #8b5cf6, #6d28d9)';
1006
+ }
1007
+
1008
+ // UNSW RAW balanced acc
1009
+ renderBar('chart-unsw-raw', [
1010
+ {label:'Random Forest', val:0.5657, type:'RF'},
1011
+ {label:'Decision Tree', val:0.4703, type:'DT'},
1012
+ {label:'XGBoost', val:0.4247, type:'XGBoost'},
1013
+ {label:'LSTM-CNN', val:0.3823, type:'dl'},
1014
+ {label:'ANN', val:0.3744, type:'dl'},
1015
+ {label:'LSTM', val:0.3287, type:'dl'},
1016
+ {label:'CNN', val:0.2781, type:'dl'},
1017
+ ], modelColor);
1018
+
1019
+ // UNSW SMOTE balanced acc
1020
+ renderBar('chart-unsw-smote', [
1021
+ {label:'LSTM-CNN', val:0.1241, type:'dl'},
1022
+ {label:'XGBoost', val:0.1108, type:'XGBoost'},
1023
+ {label:'Random Forest', val:0.1001, type:'RF'},
1024
+ {label:'ANN', val:0.1000, type:'dl'},
1025
+ {label:'CNN', val:0.1000, type:'dl'},
1026
+ {label:'DT', val:0.0960, type:'DT'},
1027
+ {label:'LSTM', val:0.0683, type:'dl'},
1028
+ ], (d) => smote_color());
1029
+
1030
+ // KDD RAW balanced acc
1031
+ renderBar('chart-kdd-raw', [
1032
+ {label:'Random Forest', val:0.9940, type:'RF'},
1033
+ {label:'XGBoost', val:0.9909, type:'XGBoost'},
1034
+ {label:'LSTM-CNN', val:0.9848, type:'dl'},
1035
+ {label:'LSTM', val:0.9673, type:'dl'},
1036
+ {label:'Decision Tree', val:0.9614, type:'DT'},
1037
+ {label:'ANN', val:0.9427, type:'dl'},
1038
+ {label:'CNN', val:0.6256, type:'dl'},
1039
+ ], modelColor);
1040
+
1041
+ // KDD SMOTE balanced acc
1042
+ renderBar('chart-kdd-smote', [
1043
+ {label:'LSTM', val:0.9980, type:'dl'},
1044
+ {label:'ANN', val:0.9953, type:'dl'},
1045
+ {label:'XGBoost', val:0.9971, type:'XGBoost'},
1046
+ {label:'DT', val:0.9931, type:'DT'},
1047
+ {label:'Random Forest', val:0.9922, type:'RF'},
1048
+ {label:'LSTM-CNN', val:0.9907, type:'dl'},
1049
+ {label:'CNN', val:0.9721, type:'dl'},
1050
+ ], (d) => smote_color());
1051
+
1052
+ // INFERENCE TIME UNSW
1053
+ renderBar('chart-time-unsw', [
1054
+ {label:'DT', val:0.025, type:'DT'},
1055
+ {label:'XGBoost', val:0.333, type:'XGBoost'},
1056
+ {label:'RF', val:0.571, type:'RF'},
1057
+ {label:'ANN', val:1.622, type:'dl'},
1058
+ {label:'CNN', val:1.649, type:'dl'},
1059
+ {label:'LSTM', val:1.902, type:'dl'},
1060
+ {label:'LSTM-CNN', val:3.721, type:'dl'},
1061
+ ], (d) => d.type === 'dl' ? 'linear-gradient(90deg,#ff3d5a,#cc2a45)' : 'linear-gradient(90deg,#00d4ff,#00a8cc)');
1062
+
1063
+ // INFERENCE TIME KDD
1064
+ renderBar('chart-time-kdd', [
1065
+ {label:'DT', val:0.026, type:'DT'},
1066
+ {label:'XGBoost', val:0.226, type:'XGBoost'},
1067
+ {label:'RF', val:0.373, type:'RF'},
1068
+ {label:'CNN', val:1.314, type:'dl'},
1069
+ {label:'ANN', val:1.410, type:'dl'},
1070
+ {label:'LSTM', val:1.475, type:'dl'},
1071
+ {label:'LSTM-CNN', val:2.995, type:'dl'},
1072
+ ], (d) => d.type === 'dl' ? 'linear-gradient(90deg,#ff3d5a,#cc2a45)' : 'linear-gradient(90deg,#00d4ff,#00a8cc)');
1073
+
1074
+ // MEMORY UNSW (cap RF for display)
1075
+ renderBar('chart-mem-unsw', [
1076
+ {label:'XGBoost', val:1571, type:'XGBoost'},
1077
+ {label:'DT', val:1580, type:'DT'},
1078
+ {label:'CNN', val:4375, type:'dl'},
1079
+ {label:'LSTM', val:4710, type:'dl'},
1080
+ {label:'LSTM-CNN', val:4720, type:'dl'},
1081
+ {label:'ANN', val:5267, type:'dl'},
1082
+ {label:'RF ⚠', val:22424, type:'RF'},
1083
+ ], (d) => d.label.includes('RF') ? 'linear-gradient(90deg,#ff6b35,#cc4400)' : d.type === 'dl' ? 'linear-gradient(90deg,#8b5cf6,#6d28d9)' : 'linear-gradient(90deg,#00d4ff,#00a8cc)');
1084
+
1085
+ // MEMORY KDD
1086
+ renderBar('chart-mem-kdd', [
1087
+ {label:'ANN', val:4503, type:'dl'},
1088
+ {label:'DT', val:4959, type:'DT'},
1089
+ {label:'XGBoost', val:4959, type:'XGBoost'},
1090
+ {label:'RF', val:4989, type:'RF'},
1091
+ {label:'CNN', val:5096, type:'dl'},
1092
+ {label:'LSTM', val:5104, type:'dl'},
1093
+ {label:'LSTM-CNN', val:5112, type:'dl'},
1094
+ ], (d) => d.type === 'dl' ? 'linear-gradient(90deg,#8b5cf6,#6d28d9)' : 'linear-gradient(90deg,#00d4ff,#00a8cc)');
1095
+
1096
+ // ── TAB SWITCH ──
1097
+ function switchTab(e, id) {
1098
+ document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
1099
+ document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));
1100
+ e.target.classList.add('active');
1101
+ document.getElementById(id).classList.add('active');
1102
+ // Re-trigger bar animations
1103
+ setTimeout(() => {
1104
+ document.querySelectorAll('#' + id + ' .bar-fill').forEach(b => {
1105
+ const w = b.dataset.width;
1106
+ b.style.width = '0%';
1107
+ requestAnimationFrame(() => setTimeout(() => b.style.width = w + '%', 50));
1108
+ });
1109
+ }, 50);
1110
+ }
1111
+
1112
+ // ── SCROLL REVEAL ──
1113
+ const observer = new IntersectionObserver((entries) => {
1114
+ entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); } });
1115
+ }, { threshold: 0.1 });
1116
+
1117
+ document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
1118
+
1119
+ // ── ANIMATE BARS ON LOAD ──
1120
+ setTimeout(() => {
1121
+ document.querySelectorAll('#unsw-raw .bar-fill').forEach(b => b.style.width = b.dataset.width + '%');
1122
+ }, 300);
1123
+ </script>
1124
+ </body>
1125
  </html>