bithal26 commited on
Commit
74bddaf
Β·
verified Β·
1 Parent(s): 1f2a723

Delete deepfake-detector.html

Browse files
Files changed (1) hide show
  1. deepfake-detector.html +0 -1829
deepfake-detector.html DELETED
@@ -1,1829 +0,0 @@
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>VERIDEX β€” Deepfake Detection Intelligence</title>
7
- <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Syne:wght@400;600;700;800&family=JetBrains+Mono:wght@300;400;500&display=swap" rel="stylesheet">
8
- <style>
9
- :root {
10
- --bg: #030508;
11
- --bg2: #070c12;
12
- --panel: rgba(8, 18, 30, 0.85);
13
- --border: rgba(0, 210, 255, 0.12);
14
- --border-bright: rgba(0, 210, 255, 0.45);
15
- --cyan: #00d2ff;
16
- --cyan-dim: rgba(0, 210, 255, 0.6);
17
- --red: #ff2d55;
18
- --green: #00ff88;
19
- --amber: #ffb800;
20
- --text: #e8f4ff;
21
- --text-dim: rgba(232, 244, 255, 0.5);
22
- --text-faint: rgba(232, 244, 255, 0.25);
23
- --glow-cyan: 0 0 20px rgba(0, 210, 255, 0.35), 0 0 60px rgba(0, 210, 255, 0.1);
24
- --glow-red: 0 0 20px rgba(255, 45, 85, 0.4);
25
- --glow-green: 0 0 20px rgba(0, 255, 136, 0.35);
26
- }
27
-
28
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
29
-
30
- html { scroll-behavior: smooth; }
31
-
32
- body {
33
- background: var(--bg);
34
- color: var(--text);
35
- font-family: 'Syne', sans-serif;
36
- overflow-x: hidden;
37
- cursor: crosshair;
38
- }
39
-
40
- /* ── NOISE OVERLAY ── */
41
- body::before {
42
- content: '';
43
- position: fixed;
44
- inset: 0;
45
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
46
- pointer-events: none;
47
- z-index: 9999;
48
- opacity: 0.4;
49
- }
50
-
51
- /* ── SCANLINES ── */
52
- body::after {
53
- content: '';
54
- position: fixed;
55
- inset: 0;
56
- background: repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(0,0,0,0.03) 2px, rgba(0,0,0,0.03) 4px);
57
- pointer-events: none;
58
- z-index: 9998;
59
- }
60
-
61
- /* ── GRID BG ── */
62
- .grid-bg {
63
- position: fixed;
64
- inset: 0;
65
- background-image:
66
- linear-gradient(rgba(0,210,255,0.03) 1px, transparent 1px),
67
- linear-gradient(90deg, rgba(0,210,255,0.03) 1px, transparent 1px);
68
- background-size: 60px 60px;
69
- pointer-events: none;
70
- z-index: 0;
71
- }
72
-
73
- /* ── AMBIENT GLOW ── */
74
- .ambient {
75
- position: fixed;
76
- border-radius: 50%;
77
- filter: blur(120px);
78
- pointer-events: none;
79
- z-index: 0;
80
- opacity: 0.18;
81
- }
82
- .ambient-1 { width: 600px; height: 600px; background: var(--cyan); top: -200px; left: -100px; animation: drift1 20s ease-in-out infinite; }
83
- .ambient-2 { width: 500px; height: 500px; background: var(--red); bottom: -200px; right: -100px; animation: drift2 25s ease-in-out infinite; }
84
- .ambient-3 { width: 400px; height: 400px; background: #5500ff; top: 40%; left: 40%; animation: drift3 30s ease-in-out infinite; opacity: 0.1; }
85
-
86
- @keyframes drift1 { 0%,100%{transform:translate(0,0)} 50%{transform:translate(80px,60px)} }
87
- @keyframes drift2 { 0%,100%{transform:translate(0,0)} 50%{transform:translate(-60px,-80px)} }
88
- @keyframes drift3 { 0%,100%{transform:translate(0,0)} 50%{transform:translate(40px,-40px)} }
89
-
90
- /* ── NAV ── */
91
- nav {
92
- position: fixed;
93
- top: 0; left: 0; right: 0;
94
- z-index: 100;
95
- display: flex;
96
- align-items: center;
97
- justify-content: space-between;
98
- padding: 20px 48px;
99
- background: rgba(3, 5, 8, 0.7);
100
- backdrop-filter: blur(20px);
101
- border-bottom: 1px solid var(--border);
102
- }
103
-
104
- .nav-logo {
105
- display: flex;
106
- align-items: center;
107
- gap: 12px;
108
- }
109
-
110
- .logo-mark {
111
- width: 36px; height: 36px;
112
- border: 1.5px solid var(--cyan);
113
- border-radius: 8px;
114
- display: flex;
115
- align-items: center;
116
- justify-content: center;
117
- box-shadow: var(--glow-cyan);
118
- position: relative;
119
- overflow: hidden;
120
- }
121
-
122
- .logo-mark::before {
123
- content: '';
124
- position: absolute;
125
- inset: 0;
126
- background: linear-gradient(135deg, rgba(0,210,255,0.15), transparent);
127
- }
128
-
129
- .logo-mark svg { width: 18px; height: 18px; fill: none; stroke: var(--cyan); stroke-width: 2; }
130
-
131
- .logo-text {
132
- font-family: 'Bebas Neue', sans-serif;
133
- font-size: 22px;
134
- letter-spacing: 4px;
135
- color: var(--text);
136
- }
137
-
138
- .logo-text span { color: var(--cyan); }
139
-
140
- .nav-links {
141
- display: flex;
142
- gap: 36px;
143
- list-style: none;
144
- }
145
-
146
- .nav-links a {
147
- font-family: 'JetBrains Mono', monospace;
148
- font-size: 11px;
149
- letter-spacing: 2px;
150
- text-transform: uppercase;
151
- color: var(--text-dim);
152
- text-decoration: none;
153
- transition: color 0.2s;
154
- position: relative;
155
- }
156
-
157
- .nav-links a::after {
158
- content: '';
159
- position: absolute;
160
- bottom: -4px; left: 0; right: 0;
161
- height: 1px;
162
- background: var(--cyan);
163
- transform: scaleX(0);
164
- transition: transform 0.2s;
165
- }
166
-
167
- .nav-links a:hover { color: var(--cyan); }
168
- .nav-links a:hover::after { transform: scaleX(1); }
169
-
170
- .nav-cta {
171
- font-family: 'JetBrains Mono', monospace;
172
- font-size: 11px;
173
- letter-spacing: 2px;
174
- text-transform: uppercase;
175
- color: var(--bg);
176
- background: var(--cyan);
177
- padding: 10px 24px;
178
- border: none;
179
- cursor: pointer;
180
- font-weight: 500;
181
- transition: all 0.2s;
182
- clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%);
183
- }
184
- .nav-cta:hover { box-shadow: var(--glow-cyan); transform: translateY(-1px); }
185
-
186
- /* ── HERO ── */
187
- .hero {
188
- min-height: 100vh;
189
- display: flex;
190
- flex-direction: column;
191
- align-items: center;
192
- justify-content: center;
193
- text-align: center;
194
- padding: 120px 48px 80px;
195
- position: relative;
196
- z-index: 1;
197
- }
198
-
199
- .hero-badge {
200
- display: inline-flex;
201
- align-items: center;
202
- gap: 8px;
203
- font-family: 'JetBrains Mono', monospace;
204
- font-size: 10px;
205
- letter-spacing: 3px;
206
- text-transform: uppercase;
207
- color: var(--cyan);
208
- border: 1px solid var(--border-bright);
209
- padding: 6px 16px;
210
- border-radius: 2px;
211
- margin-bottom: 32px;
212
- animation: fadeUp 0.8s ease both;
213
- background: rgba(0, 210, 255, 0.05);
214
- }
215
-
216
- .hero-badge::before {
217
- content: '';
218
- width: 6px; height: 6px;
219
- border-radius: 50%;
220
- background: var(--green);
221
- box-shadow: 0 0 8px var(--green);
222
- animation: pulse 2s ease-in-out infinite;
223
- }
224
-
225
- @keyframes pulse { 0%,100%{opacity:1} 50%{opacity:0.3} }
226
-
227
- .hero-title {
228
- font-family: 'Bebas Neue', sans-serif;
229
- font-size: clamp(72px, 10vw, 140px);
230
- line-height: 0.9;
231
- letter-spacing: 2px;
232
- animation: fadeUp 0.8s 0.1s ease both;
233
- position: relative;
234
- }
235
-
236
- .hero-title .line1 { display: block; color: var(--text); }
237
- .hero-title .line2 {
238
- display: block;
239
- color: transparent;
240
- -webkit-text-stroke: 1px rgba(0, 210, 255, 0.5);
241
- position: relative;
242
- }
243
-
244
- .hero-title .line2::after {
245
- content: attr(data-text);
246
- position: absolute;
247
- left: 0; top: 0;
248
- color: var(--cyan);
249
- clip-path: polygon(0 0, 30% 0, 30% 100%, 0 100%);
250
- animation: scanReveal 4s ease-in-out infinite;
251
- }
252
-
253
- @keyframes scanReveal {
254
- 0% { clip-path: polygon(0 0, 0% 0, 0% 100%, 0 100%); }
255
- 40% { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
256
- 60% { clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); }
257
- 100% { clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%); }
258
- }
259
-
260
- .hero-sub {
261
- max-width: 580px;
262
- font-size: 16px;
263
- line-height: 1.7;
264
- color: var(--text-dim);
265
- margin: 28px auto 48px;
266
- animation: fadeUp 0.8s 0.2s ease both;
267
- }
268
-
269
- .hero-actions {
270
- display: flex;
271
- gap: 16px;
272
- animation: fadeUp 0.8s 0.3s ease both;
273
- }
274
-
275
- .btn-primary {
276
- display: inline-flex;
277
- align-items: center;
278
- gap: 10px;
279
- padding: 16px 36px;
280
- background: var(--cyan);
281
- color: var(--bg);
282
- font-family: 'JetBrains Mono', monospace;
283
- font-size: 12px;
284
- letter-spacing: 2px;
285
- text-transform: uppercase;
286
- font-weight: 600;
287
- border: none;
288
- cursor: pointer;
289
- transition: all 0.25s;
290
- clip-path: polygon(12px 0%, 100% 0%, calc(100% - 12px) 100%, 0% 100%);
291
- }
292
-
293
- .btn-primary:hover { box-shadow: var(--glow-cyan); transform: translateY(-2px) scale(1.02); }
294
-
295
- .btn-secondary {
296
- display: inline-flex;
297
- align-items: center;
298
- gap: 10px;
299
- padding: 16px 36px;
300
- background: transparent;
301
- color: var(--text-dim);
302
- font-family: 'JetBrains Mono', monospace;
303
- font-size: 12px;
304
- letter-spacing: 2px;
305
- text-transform: uppercase;
306
- border: 1px solid var(--border-bright);
307
- cursor: pointer;
308
- transition: all 0.25s;
309
- }
310
-
311
- .btn-secondary:hover { color: var(--cyan); border-color: var(--cyan); background: rgba(0,210,255,0.05); }
312
-
313
- .hero-stats {
314
- display: flex;
315
- gap: 0;
316
- margin-top: 80px;
317
- border: 1px solid var(--border);
318
- animation: fadeUp 0.8s 0.4s ease both;
319
- }
320
-
321
- .stat {
322
- padding: 24px 48px;
323
- border-right: 1px solid var(--border);
324
- text-align: left;
325
- position: relative;
326
- overflow: hidden;
327
- }
328
-
329
- .stat:last-child { border-right: none; }
330
-
331
- .stat::before {
332
- content: '';
333
- position: absolute;
334
- bottom: 0; left: 0; right: 0;
335
- height: 1px;
336
- background: linear-gradient(90deg, transparent, var(--cyan), transparent);
337
- animation: shimmer 3s ease-in-out infinite;
338
- opacity: 0.4;
339
- }
340
-
341
- @keyframes shimmer { 0%,100%{opacity:0.2} 50%{opacity:0.8} }
342
-
343
- .stat-number {
344
- font-family: 'Bebas Neue', sans-serif;
345
- font-size: 44px;
346
- color: var(--cyan);
347
- line-height: 1;
348
- text-shadow: var(--glow-cyan);
349
- }
350
-
351
- .stat-label {
352
- font-family: 'JetBrains Mono', monospace;
353
- font-size: 10px;
354
- letter-spacing: 2px;
355
- text-transform: uppercase;
356
- color: var(--text-faint);
357
- margin-top: 4px;
358
- }
359
-
360
- @keyframes fadeUp { from { opacity:0; transform: translateY(24px); } to { opacity:1; transform: translateY(0); } }
361
-
362
- /* ── UPLOAD SECTION ── */
363
- .section {
364
- position: relative;
365
- z-index: 1;
366
- padding: 100px 48px;
367
- max-width: 1400px;
368
- margin: 0 auto;
369
- }
370
-
371
- .section-label {
372
- font-family: 'JetBrains Mono', monospace;
373
- font-size: 10px;
374
- letter-spacing: 4px;
375
- text-transform: uppercase;
376
- color: var(--cyan);
377
- margin-bottom: 12px;
378
- display: flex;
379
- align-items: center;
380
- gap: 12px;
381
- }
382
-
383
- .section-label::before {
384
- content: '';
385
- width: 32px; height: 1px;
386
- background: var(--cyan);
387
- box-shadow: var(--glow-cyan);
388
- }
389
-
390
- .section-title {
391
- font-family: 'Syne', sans-serif;
392
- font-size: clamp(32px, 4vw, 52px);
393
- font-weight: 800;
394
- line-height: 1.1;
395
- margin-bottom: 16px;
396
- }
397
-
398
- .section-title em { font-style: normal; color: var(--cyan); }
399
-
400
- .section-sub {
401
- color: var(--text-dim);
402
- font-size: 15px;
403
- line-height: 1.7;
404
- max-width: 480px;
405
- margin-bottom: 48px;
406
- }
407
-
408
- /* ── UPLOAD ZONE ── */
409
- .upload-layout {
410
- display: grid;
411
- grid-template-columns: 1fr 380px;
412
- gap: 24px;
413
- align-items: start;
414
- }
415
-
416
- .upload-zone {
417
- border: 1px dashed var(--border-bright);
418
- border-radius: 4px;
419
- padding: 80px 40px;
420
- text-align: center;
421
- cursor: pointer;
422
- transition: all 0.3s;
423
- position: relative;
424
- overflow: hidden;
425
- background: var(--panel);
426
- backdrop-filter: blur(20px);
427
- min-height: 380px;
428
- display: flex;
429
- flex-direction: column;
430
- align-items: center;
431
- justify-content: center;
432
- }
433
-
434
- .upload-zone::before {
435
- content: '';
436
- position: absolute;
437
- top: 0; left: -100%;
438
- width: 200%; height: 2px;
439
- background: linear-gradient(90deg, transparent, var(--cyan), transparent);
440
- animation: scanLine 4s ease-in-out infinite;
441
- }
442
-
443
- @keyframes scanLine {
444
- 0% { top: 0; opacity: 0; }
445
- 10% { opacity: 1; }
446
- 90% { opacity: 1; }
447
- 100% { top: 100%; opacity: 0; }
448
- }
449
-
450
- .upload-zone:hover {
451
- border-color: var(--cyan);
452
- background: rgba(0, 210, 255, 0.03);
453
- box-shadow: inset 0 0 40px rgba(0,210,255,0.05);
454
- }
455
-
456
- .upload-zone.dragging {
457
- border-color: var(--cyan);
458
- background: rgba(0, 210, 255, 0.08);
459
- box-shadow: 0 0 40px rgba(0,210,255,0.2), inset 0 0 40px rgba(0,210,255,0.05);
460
- }
461
-
462
- .upload-icon {
463
- width: 72px; height: 72px;
464
- border: 1px solid var(--border-bright);
465
- border-radius: 50%;
466
- display: flex;
467
- align-items: center;
468
- justify-content: center;
469
- margin-bottom: 24px;
470
- position: relative;
471
- transition: all 0.3s;
472
- }
473
-
474
- .upload-icon::before {
475
- content: '';
476
- position: absolute;
477
- inset: -6px;
478
- border-radius: 50%;
479
- border: 1px solid transparent;
480
- border-top-color: var(--cyan);
481
- animation: spin 3s linear infinite;
482
- opacity: 0.4;
483
- }
484
-
485
- @keyframes spin { to { transform: rotate(360deg); } }
486
-
487
- .upload-zone:hover .upload-icon { border-color: var(--cyan); box-shadow: var(--glow-cyan); }
488
-
489
- .upload-icon svg { width: 28px; height: 28px; stroke: var(--cyan); fill: none; stroke-width: 1.5; }
490
-
491
- .upload-title {
492
- font-size: 18px;
493
- font-weight: 700;
494
- margin-bottom: 8px;
495
- }
496
-
497
- .upload-desc {
498
- font-family: 'JetBrains Mono', monospace;
499
- font-size: 11px;
500
- letter-spacing: 1px;
501
- color: var(--text-dim);
502
- margin-bottom: 24px;
503
- line-height: 1.7;
504
- }
505
-
506
- .upload-formats {
507
- display: flex;
508
- gap: 8px;
509
- flex-wrap: wrap;
510
- justify-content: center;
511
- }
512
-
513
- .format-tag {
514
- font-family: 'JetBrains Mono', monospace;
515
- font-size: 10px;
516
- letter-spacing: 1.5px;
517
- padding: 4px 10px;
518
- border: 1px solid var(--border);
519
- color: var(--text-faint);
520
- text-transform: uppercase;
521
- }
522
-
523
- input[type="file"] { display: none; }
524
-
525
- /* ── ANALYSIS PANEL ── */
526
- .analysis-panel {
527
- display: flex;
528
- flex-direction: column;
529
- gap: 16px;
530
- }
531
-
532
- .panel-card {
533
- background: var(--panel);
534
- border: 1px solid var(--border);
535
- backdrop-filter: blur(20px);
536
- padding: 24px;
537
- position: relative;
538
- overflow: hidden;
539
- transition: border-color 0.3s;
540
- }
541
-
542
- .panel-card::after {
543
- content: '';
544
- position: absolute;
545
- top: 0; left: 0;
546
- width: 3px; height: 100%;
547
- background: var(--cyan);
548
- box-shadow: var(--glow-cyan);
549
- opacity: 0.6;
550
- }
551
-
552
- .panel-card:hover { border-color: var(--border-bright); }
553
-
554
- .card-title {
555
- font-family: 'JetBrains Mono', monospace;
556
- font-size: 10px;
557
- letter-spacing: 3px;
558
- text-transform: uppercase;
559
- color: var(--cyan);
560
- margin-bottom: 16px;
561
- display: flex;
562
- align-items: center;
563
- gap: 8px;
564
- }
565
-
566
- .card-title .dot {
567
- width: 5px; height: 5px;
568
- border-radius: 50%;
569
- background: var(--cyan);
570
- box-shadow: 0 0 8px var(--cyan);
571
- }
572
-
573
- /* ── RESULT DISPLAY ── */
574
- .result-display {
575
- text-align: center;
576
- padding: 8px 0;
577
- }
578
-
579
- .result-score {
580
- font-family: 'Bebas Neue', sans-serif;
581
- font-size: 72px;
582
- line-height: 1;
583
- color: var(--green);
584
- text-shadow: var(--glow-green);
585
- transition: all 0.5s;
586
- }
587
-
588
- .result-score.fake { color: var(--red); text-shadow: var(--glow-red); }
589
- .result-score.uncertain { color: var(--amber); }
590
-
591
- .result-label {
592
- font-family: 'JetBrains Mono', monospace;
593
- font-size: 11px;
594
- letter-spacing: 3px;
595
- text-transform: uppercase;
596
- color: var(--text-dim);
597
- margin-top: 4px;
598
- }
599
-
600
- /* ── PROGRESS BARS ── */
601
- .metric-row {
602
- margin-bottom: 14px;
603
- }
604
-
605
- .metric-header {
606
- display: flex;
607
- justify-content: space-between;
608
- margin-bottom: 6px;
609
- }
610
-
611
- .metric-name {
612
- font-family: 'JetBrains Mono', monospace;
613
- font-size: 10px;
614
- letter-spacing: 1.5px;
615
- text-transform: uppercase;
616
- color: var(--text-dim);
617
- }
618
-
619
- .metric-value {
620
- font-family: 'JetBrains Mono', monospace;
621
- font-size: 10px;
622
- color: var(--cyan);
623
- }
624
-
625
- .metric-bar {
626
- height: 3px;
627
- background: rgba(255,255,255,0.06);
628
- border-radius: 0;
629
- overflow: hidden;
630
- position: relative;
631
- }
632
-
633
- .metric-fill {
634
- height: 100%;
635
- background: linear-gradient(90deg, var(--cyan), rgba(0,210,255,0.4));
636
- transition: width 1s ease;
637
- position: relative;
638
- }
639
-
640
- .metric-fill::after {
641
- content: '';
642
- position: absolute;
643
- right: 0; top: -2px;
644
- width: 1px; height: 7px;
645
- background: var(--cyan);
646
- box-shadow: 0 0 6px var(--cyan);
647
- }
648
-
649
- /* ── HOW IT WORKS ── */
650
- .how-section {
651
- padding: 100px 48px;
652
- max-width: 1400px;
653
- margin: 0 auto;
654
- position: relative;
655
- z-index: 1;
656
- }
657
-
658
- .how-grid {
659
- display: grid;
660
- grid-template-columns: repeat(4, 1fr);
661
- gap: 2px;
662
- margin-top: 60px;
663
- }
664
-
665
- .how-step {
666
- background: var(--panel);
667
- border: 1px solid var(--border);
668
- padding: 40px 32px;
669
- position: relative;
670
- overflow: hidden;
671
- transition: all 0.3s;
672
- backdrop-filter: blur(20px);
673
- }
674
-
675
- .how-step::before {
676
- content: '';
677
- position: absolute;
678
- top: 0; left: 0; right: 0;
679
- height: 1px;
680
- background: linear-gradient(90deg, transparent, var(--cyan), transparent);
681
- opacity: 0;
682
- transition: opacity 0.3s;
683
- }
684
-
685
- .how-step:hover { border-color: var(--border-bright); transform: translateY(-4px); }
686
- .how-step:hover::before { opacity: 1; }
687
-
688
- .step-number {
689
- font-family: 'Bebas Neue', sans-serif;
690
- font-size: 72px;
691
- color: rgba(0, 210, 255, 0.08);
692
- line-height: 1;
693
- margin-bottom: 20px;
694
- transition: color 0.3s;
695
- }
696
-
697
- .how-step:hover .step-number { color: rgba(0, 210, 255, 0.15); }
698
-
699
- .step-icon {
700
- width: 48px; height: 48px;
701
- border: 1px solid var(--border-bright);
702
- display: flex;
703
- align-items: center;
704
- justify-content: center;
705
- margin-bottom: 20px;
706
- transition: all 0.3s;
707
- }
708
-
709
- .how-step:hover .step-icon { border-color: var(--cyan); box-shadow: var(--glow-cyan); }
710
- .step-icon svg { width: 22px; height: 22px; stroke: var(--cyan); fill: none; stroke-width: 1.5; }
711
-
712
- .step-title {
713
- font-size: 18px;
714
- font-weight: 700;
715
- margin-bottom: 12px;
716
- }
717
-
718
- .step-desc {
719
- font-size: 13px;
720
- line-height: 1.7;
721
- color: var(--text-dim);
722
- }
723
-
724
- /* ── FEATURES ── */
725
- .features-section {
726
- padding: 100px 48px;
727
- max-width: 1400px;
728
- margin: 0 auto;
729
- position: relative;
730
- z-index: 1;
731
- }
732
-
733
- .features-grid {
734
- display: grid;
735
- grid-template-columns: repeat(3, 1fr);
736
- gap: 2px;
737
- margin-top: 60px;
738
- }
739
-
740
- .feature-card {
741
- background: var(--panel);
742
- border: 1px solid var(--border);
743
- padding: 36px;
744
- position: relative;
745
- overflow: hidden;
746
- transition: all 0.3s;
747
- backdrop-filter: blur(20px);
748
- cursor: default;
749
- }
750
-
751
- .feature-card::after {
752
- content: '';
753
- position: absolute;
754
- bottom: 0; left: 0; right: 0;
755
- height: 2px;
756
- background: linear-gradient(90deg, transparent, var(--cyan), transparent);
757
- transform: scaleX(0);
758
- transition: transform 0.4s;
759
- }
760
-
761
- .feature-card:hover { border-color: rgba(0, 210, 255, 0.25); background: rgba(0, 210, 255, 0.03); }
762
- .feature-card:hover::after { transform: scaleX(1); }
763
-
764
- .feature-icon {
765
- width: 44px; height: 44px;
766
- margin-bottom: 20px;
767
- display: flex;
768
- align-items: center;
769
- justify-content: center;
770
- background: rgba(0, 210, 255, 0.08);
771
- border: 1px solid var(--border-bright);
772
- transition: all 0.3s;
773
- }
774
-
775
- .feature-card:hover .feature-icon { background: rgba(0, 210, 255, 0.15); box-shadow: var(--glow-cyan); }
776
- .feature-icon svg { width: 20px; height: 20px; stroke: var(--cyan); fill: none; stroke-width: 1.5; }
777
-
778
- .feature-title {
779
- font-size: 16px;
780
- font-weight: 700;
781
- margin-bottom: 10px;
782
- }
783
-
784
- .feature-desc {
785
- font-size: 13px;
786
- line-height: 1.7;
787
- color: var(--text-dim);
788
- }
789
-
790
- /* ── TECH STACK ── */
791
- .tech-section {
792
- padding: 60px 48px;
793
- max-width: 1400px;
794
- margin: 0 auto;
795
- position: relative;
796
- z-index: 1;
797
- }
798
-
799
- .tech-strip {
800
- border: 1px solid var(--border);
801
- display: flex;
802
- align-items: stretch;
803
- overflow: hidden;
804
- background: var(--panel);
805
- backdrop-filter: blur(20px);
806
- }
807
-
808
- .tech-label-box {
809
- padding: 20px 28px;
810
- border-right: 1px solid var(--border);
811
- display: flex;
812
- align-items: center;
813
- background: rgba(0,210,255,0.05);
814
- white-space: nowrap;
815
- }
816
-
817
- .tech-items {
818
- display: flex;
819
- overflow: hidden;
820
- flex: 1;
821
- position: relative;
822
- }
823
-
824
- .tech-items::before, .tech-items::after {
825
- content: '';
826
- position: absolute;
827
- top: 0; bottom: 0;
828
- width: 60px;
829
- z-index: 2;
830
- pointer-events: none;
831
- }
832
-
833
- .tech-items::before { left: 0; background: linear-gradient(90deg, rgba(8,18,30,0.9), transparent); }
834
- .tech-items::after { right: 0; background: linear-gradient(-90deg, rgba(8,18,30,0.9), transparent); }
835
-
836
- .tech-scroll {
837
- display: flex;
838
- gap: 0;
839
- animation: techScroll 20s linear infinite;
840
- width: max-content;
841
- }
842
-
843
- @keyframes techScroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
844
-
845
- .tech-item {
846
- font-family: 'JetBrains Mono', monospace;
847
- font-size: 11px;
848
- letter-spacing: 2px;
849
- text-transform: uppercase;
850
- color: var(--text-dim);
851
- padding: 20px 32px;
852
- border-right: 1px solid var(--border);
853
- white-space: nowrap;
854
- transition: color 0.2s;
855
- }
856
-
857
- .tech-item:hover { color: var(--cyan); }
858
-
859
- /* ── REPORT SECTION ── */
860
- .report-section {
861
- padding: 100px 48px;
862
- max-width: 1400px;
863
- margin: 0 auto;
864
- position: relative;
865
- z-index: 1;
866
- }
867
-
868
- .report-layout {
869
- display: grid;
870
- grid-template-columns: 1fr 1fr;
871
- gap: 2px;
872
- margin-top: 60px;
873
- }
874
-
875
- .report-card {
876
- background: var(--panel);
877
- border: 1px solid var(--border);
878
- padding: 40px;
879
- backdrop-filter: blur(20px);
880
- }
881
-
882
- .report-card.accent {
883
- background: rgba(0, 210, 255, 0.04);
884
- border-color: rgba(0,210,255,0.2);
885
- }
886
-
887
- .forensic-list {
888
- list-style: none;
889
- display: flex;
890
- flex-direction: column;
891
- gap: 12px;
892
- margin-top: 20px;
893
- }
894
-
895
- .forensic-item {
896
- display: flex;
897
- align-items: center;
898
- gap: 12px;
899
- padding: 14px 16px;
900
- border: 1px solid var(--border);
901
- transition: all 0.2s;
902
- }
903
-
904
- .forensic-item:hover { border-color: var(--border-bright); background: rgba(0,210,255,0.03); }
905
-
906
- .forensic-icon {
907
- width: 32px; height: 32px;
908
- border: 1px solid var(--border-bright);
909
- display: flex;
910
- align-items: center;
911
- justify-content: center;
912
- flex-shrink: 0;
913
- }
914
-
915
- .forensic-icon svg { width: 14px; height: 14px; stroke: var(--cyan); fill: none; stroke-width: 2; }
916
-
917
- .forensic-name {
918
- font-size: 13px;
919
- font-weight: 600;
920
- flex: 1;
921
- }
922
-
923
- .forensic-status {
924
- font-family: 'JetBrains Mono', monospace;
925
- font-size: 9px;
926
- letter-spacing: 2px;
927
- text-transform: uppercase;
928
- padding: 3px 8px;
929
- }
930
-
931
- .forensic-status.pass { color: var(--green); border: 1px solid rgba(0,255,136,0.3); background: rgba(0,255,136,0.05); }
932
- .forensic-status.alert { color: var(--red); border: 1px solid rgba(255,45,85,0.3); background: rgba(255,45,85,0.05); }
933
- .forensic-status.warn { color: var(--amber); border: 1px solid rgba(255,184,0,0.3); background: rgba(255,184,0,0.05); }
934
-
935
- /* ── FOOTER ── */
936
- footer {
937
- position: relative;
938
- z-index: 1;
939
- padding: 48px;
940
- border-top: 1px solid var(--border);
941
- display: flex;
942
- align-items: center;
943
- justify-content: space-between;
944
- background: rgba(3, 5, 8, 0.5);
945
- }
946
-
947
- .footer-logo {
948
- font-family: 'Bebas Neue', sans-serif;
949
- font-size: 24px;
950
- letter-spacing: 4px;
951
- color: var(--text);
952
- }
953
- .footer-logo span { color: var(--cyan); }
954
-
955
- .footer-copy {
956
- font-family: 'JetBrains Mono', monospace;
957
- font-size: 10px;
958
- letter-spacing: 2px;
959
- color: var(--text-faint);
960
- text-transform: uppercase;
961
- }
962
-
963
- .footer-links {
964
- display: flex;
965
- gap: 24px;
966
- list-style: none;
967
- }
968
-
969
- .footer-links a {
970
- font-family: 'JetBrains Mono', monospace;
971
- font-size: 10px;
972
- letter-spacing: 2px;
973
- text-transform: uppercase;
974
- color: var(--text-faint);
975
- text-decoration: none;
976
- transition: color 0.2s;
977
- }
978
-
979
- .footer-links a:hover { color: var(--cyan); }
980
-
981
- /* ── MODAL / ANALYZING ── */
982
- .analyze-overlay {
983
- position: fixed;
984
- inset: 0;
985
- background: rgba(3, 5, 8, 0.95);
986
- backdrop-filter: blur(20px);
987
- z-index: 200;
988
- display: flex;
989
- align-items: center;
990
- justify-content: center;
991
- flex-direction: column;
992
- gap: 32px;
993
- opacity: 0;
994
- pointer-events: none;
995
- transition: opacity 0.3s;
996
- }
997
-
998
- .analyze-overlay.visible { opacity: 1; pointer-events: all; }
999
-
1000
- .analyze-scanner {
1001
- width: 200px; height: 200px;
1002
- position: relative;
1003
- border: 1px solid var(--border-bright);
1004
- }
1005
-
1006
- .analyze-scanner::before {
1007
- content: '';
1008
- position: absolute;
1009
- top: 0; left: 0; right: 0;
1010
- height: 2px;
1011
- background: var(--cyan);
1012
- box-shadow: 0 0 12px var(--cyan), 0 0 40px rgba(0,210,255,0.4);
1013
- animation: scannerLine 2s ease-in-out infinite;
1014
- }
1015
-
1016
- @keyframes scannerLine {
1017
- 0% { top: 0; }
1018
- 50% { top: calc(100% - 2px); }
1019
- 100% { top: 0; }
1020
- }
1021
-
1022
- .scanner-corner {
1023
- position: absolute;
1024
- width: 16px; height: 16px;
1025
- border-color: var(--cyan);
1026
- border-style: solid;
1027
- }
1028
-
1029
- .scanner-corner.tl { top: -1px; left: -1px; border-width: 2px 0 0 2px; }
1030
- .scanner-corner.tr { top: -1px; right: -1px; border-width: 2px 2px 0 0; }
1031
- .scanner-corner.bl { bottom: -1px; left: -1px; border-width: 0 0 2px 2px; }
1032
- .scanner-corner.br { bottom: -1px; right: -1px; border-width: 0 2px 2px 0; }
1033
-
1034
- .analyze-text {
1035
- font-family: 'JetBrains Mono', monospace;
1036
- font-size: 12px;
1037
- letter-spacing: 4px;
1038
- text-transform: uppercase;
1039
- color: var(--cyan);
1040
- text-align: center;
1041
- }
1042
-
1043
- .analyze-progress-bar {
1044
- width: 300px;
1045
- height: 2px;
1046
- background: rgba(255,255,255,0.06);
1047
- position: relative;
1048
- overflow: hidden;
1049
- }
1050
-
1051
- .analyze-fill {
1052
- height: 100%;
1053
- background: var(--cyan);
1054
- box-shadow: var(--glow-cyan);
1055
- animation: loadBar 3s ease forwards;
1056
- }
1057
-
1058
- @keyframes loadBar { from { width: 0%; } to { width: 100%; } }
1059
-
1060
- .analyze-steps {
1061
- display: flex;
1062
- flex-direction: column;
1063
- gap: 8px;
1064
- width: 300px;
1065
- }
1066
-
1067
- .a-step {
1068
- font-family: 'JetBrains Mono', monospace;
1069
- font-size: 10px;
1070
- letter-spacing: 2px;
1071
- color: var(--text-faint);
1072
- display: flex;
1073
- align-items: center;
1074
- gap: 10px;
1075
- transition: color 0.3s;
1076
- }
1077
-
1078
- .a-step.active { color: var(--cyan); }
1079
- .a-step.done { color: var(--green); }
1080
-
1081
- .a-step-dot {
1082
- width: 6px; height: 6px;
1083
- border-radius: 50%;
1084
- background: currentColor;
1085
- flex-shrink: 0;
1086
- }
1087
-
1088
- /* ── RESULT MODAL ── */
1089
- .result-overlay {
1090
- position: fixed;
1091
- inset: 0;
1092
- background: rgba(3, 5, 8, 0.9);
1093
- backdrop-filter: blur(20px);
1094
- z-index: 200;
1095
- display: flex;
1096
- align-items: center;
1097
- justify-content: center;
1098
- opacity: 0;
1099
- pointer-events: none;
1100
- transition: opacity 0.3s;
1101
- }
1102
-
1103
- .result-overlay.visible { opacity: 1; pointer-events: all; }
1104
-
1105
- .result-modal {
1106
- width: 90%;
1107
- max-width: 800px;
1108
- background: var(--bg2);
1109
- border: 1px solid var(--border-bright);
1110
- padding: 48px;
1111
- position: relative;
1112
- animation: modalIn 0.4s ease both;
1113
- }
1114
-
1115
- @keyframes modalIn { from { opacity:0; transform: scale(0.95) translateY(20px); } to { opacity:1; transform: scale(1) translateY(0); } }
1116
-
1117
- .result-modal::before {
1118
- content: '';
1119
- position: absolute;
1120
- top: 0; left: 0; right: 0;
1121
- height: 2px;
1122
- background: linear-gradient(90deg, var(--red), var(--cyan));
1123
- }
1124
-
1125
- .modal-close {
1126
- position: absolute;
1127
- top: 20px; right: 20px;
1128
- background: none;
1129
- border: 1px solid var(--border);
1130
- color: var(--text-dim);
1131
- font-family: 'JetBrains Mono', monospace;
1132
- font-size: 11px;
1133
- letter-spacing: 2px;
1134
- padding: 6px 12px;
1135
- cursor: pointer;
1136
- transition: all 0.2s;
1137
- text-transform: uppercase;
1138
- }
1139
-
1140
- .modal-close:hover { border-color: var(--red); color: var(--red); }
1141
-
1142
- .modal-verdict {
1143
- display: flex;
1144
- align-items: center;
1145
- gap: 32px;
1146
- margin-bottom: 40px;
1147
- padding-bottom: 40px;
1148
- border-bottom: 1px solid var(--border);
1149
- }
1150
-
1151
- .verdict-score {
1152
- font-family: 'Bebas Neue', sans-serif;
1153
- font-size: 100px;
1154
- line-height: 1;
1155
- color: var(--red);
1156
- text-shadow: var(--glow-red);
1157
- flex-shrink: 0;
1158
- }
1159
-
1160
- .verdict-info {}
1161
- .verdict-label {
1162
- font-family: 'JetBrains Mono', monospace;
1163
- font-size: 10px;
1164
- letter-spacing: 3px;
1165
- text-transform: uppercase;
1166
- color: var(--text-faint);
1167
- margin-bottom: 6px;
1168
- }
1169
-
1170
- .verdict-title {
1171
- font-family: 'Bebas Neue', sans-serif;
1172
- font-size: 48px;
1173
- line-height: 1;
1174
- color: var(--red);
1175
- margin-bottom: 12px;
1176
- }
1177
-
1178
- .verdict-title.authentic { color: var(--green); }
1179
-
1180
- .verdict-desc {
1181
- font-size: 14px;
1182
- line-height: 1.6;
1183
- color: var(--text-dim);
1184
- }
1185
-
1186
- .modal-metrics {
1187
- display: grid;
1188
- grid-template-columns: repeat(3, 1fr);
1189
- gap: 16px;
1190
- margin-bottom: 32px;
1191
- }
1192
-
1193
- .modal-metric {
1194
- border: 1px solid var(--border);
1195
- padding: 20px;
1196
- text-align: center;
1197
- }
1198
-
1199
- .modal-metric-val {
1200
- font-family: 'Bebas Neue', sans-serif;
1201
- font-size: 36px;
1202
- color: var(--cyan);
1203
- }
1204
-
1205
- .modal-metric-label {
1206
- font-family: 'JetBrains Mono', monospace;
1207
- font-size: 9px;
1208
- letter-spacing: 2px;
1209
- text-transform: uppercase;
1210
- color: var(--text-faint);
1211
- margin-top: 4px;
1212
- }
1213
-
1214
- .modal-footer-actions {
1215
- display: flex;
1216
- gap: 12px;
1217
- justify-content: flex-end;
1218
- }
1219
-
1220
- .btn-download {
1221
- font-family: 'JetBrains Mono', monospace;
1222
- font-size: 11px;
1223
- letter-spacing: 2px;
1224
- text-transform: uppercase;
1225
- color: var(--cyan);
1226
- background: transparent;
1227
- border: 1px solid var(--border-bright);
1228
- padding: 10px 24px;
1229
- cursor: pointer;
1230
- transition: all 0.2s;
1231
- }
1232
-
1233
- .btn-download:hover { background: rgba(0,210,255,0.08); }
1234
-
1235
- .btn-new-scan {
1236
- font-family: 'JetBrains Mono', monospace;
1237
- font-size: 11px;
1238
- letter-spacing: 2px;
1239
- text-transform: uppercase;
1240
- color: var(--bg);
1241
- background: var(--cyan);
1242
- border: none;
1243
- padding: 10px 24px;
1244
- cursor: pointer;
1245
- transition: all 0.2s;
1246
- }
1247
-
1248
- .btn-new-scan:hover { box-shadow: var(--glow-cyan); }
1249
-
1250
- /* ── RESPONSIVE ── */
1251
- @media (max-width: 900px) {
1252
- nav { padding: 16px 24px; }
1253
- .nav-links { display: none; }
1254
- .hero { padding: 100px 24px 60px; }
1255
- .hero-stats { flex-direction: column; }
1256
- .stat { border-right: none; border-bottom: 1px solid var(--border); }
1257
- .upload-layout { grid-template-columns: 1fr; }
1258
- .how-grid { grid-template-columns: 1fr 1fr; }
1259
- .features-grid { grid-template-columns: 1fr 1fr; }
1260
- .report-layout { grid-template-columns: 1fr; }
1261
- .section, .how-section, .features-section, .report-section, .tech-section { padding: 60px 24px; }
1262
- footer { flex-direction: column; gap: 24px; text-align: center; }
1263
- }
1264
- </style>
1265
- </head>
1266
- <body>
1267
-
1268
- <div class="grid-bg"></div>
1269
- <div class="ambient ambient-1"></div>
1270
- <div class="ambient ambient-2"></div>
1271
- <div class="ambient ambient-3"></div>
1272
-
1273
- <!-- NAV -->
1274
- <nav>
1275
- <div class="nav-logo">
1276
- <div class="logo-mark">
1277
- <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M12 2v3M12 19v3M2 12h3M19 12h3"/><path d="M5.64 5.64l2.12 2.12M16.24 16.24l2.12 2.12M5.64 18.36l2.12-2.12M16.24 7.76l2.12-2.12"/></svg>
1278
- </div>
1279
- <span class="logo-text">VERI<span>DEX</span></span>
1280
- </div>
1281
- <ul class="nav-links">
1282
- <li><a href="#detect">Detect</a></li>
1283
- <li><a href="#how">How It Works</a></li>
1284
- <li><a href="#features">Technology</a></li>
1285
- <li><a href="#forensics">Forensics</a></li>
1286
- <li><a href="#api">API</a></li>
1287
- </ul>
1288
- <button class="nav-cta">Get API Access</button>
1289
- </nav>
1290
-
1291
- <!-- HERO -->
1292
- <section class="hero">
1293
- <div class="hero-badge">
1294
- <span>Live System Online</span>
1295
- β€” Neural Detection Engine v4.2
1296
- </div>
1297
- <h1 class="hero-title">
1298
- <span class="line1">Unmask the</span>
1299
- <span class="line2" data-text="Invisible Lie">Invisible Lie</span>
1300
- </h1>
1301
- <p class="hero-sub">Military-grade deepfake detection powered by multi-modal neural forensics. Analyze faces, voices, and pixel artifacts in seconds.</p>
1302
- <div class="hero-actions">
1303
- <button class="btn-primary" onclick="document.getElementById('detect').scrollIntoView({behavior:'smooth'})">
1304
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.35-4.35"/></svg>
1305
- Scan a Video
1306
- </button>
1307
- <button class="btn-secondary">
1308
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="5 3 19 12 5 21 5 3"/></svg>
1309
- See Demo
1310
- </button>
1311
- </div>
1312
- <div class="hero-stats">
1313
- <div class="stat">
1314
- <div class="stat-number">99.4<span style="font-size:24px;color:var(--text-dim)">%</span></div>
1315
- <div class="stat-label">Detection Accuracy</div>
1316
- </div>
1317
- <div class="stat">
1318
- <div class="stat-number">2.1<span style="font-size:24px;color:var(--text-dim)">s</span></div>
1319
- <div class="stat-label">Avg. Scan Time</div>
1320
- </div>
1321
- <div class="stat">
1322
- <div class="stat-number">47M+</div>
1323
- <div class="stat-label">Videos Scanned</div>
1324
- </div>
1325
- <div class="stat">
1326
- <div class="stat-number">12</div>
1327
- <div class="stat-label">AI Models Used</div>
1328
- </div>
1329
- </div>
1330
- </section>
1331
-
1332
- <!-- UPLOAD / DETECT -->
1333
- <section class="section" id="detect">
1334
- <div class="section-label">Detection Engine</div>
1335
- <h2 class="section-title">Upload & <em>Analyze</em></h2>
1336
- <p class="section-sub">Drop any video or image file. Our ensemble of 12 specialized neural networks will dissect every frame.</p>
1337
-
1338
- <div class="upload-layout">
1339
- <div class="upload-zone" id="uploadZone" onclick="document.getElementById('fileInput').click()" ondragover="event.preventDefault();this.classList.add('dragging')" ondragleave="this.classList.remove('dragging')" ondrop="handleDrop(event)">
1340
- <div class="upload-icon">
1341
- <svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
1342
- </div>
1343
- <h3 class="upload-title">Drop your file here</h3>
1344
- <p class="upload-desc">Drag & drop or click to browse<br>Max file size: 2GB</p>
1345
- <div class="upload-formats">
1346
- <span class="format-tag">MP4</span>
1347
- <span class="format-tag">MOV</span>
1348
- <span class="format-tag">AVI</span>
1349
- <span class="format-tag">WebM</span>
1350
- <span class="format-tag">JPG</span>
1351
- <span class="format-tag">PNG</span>
1352
- </div>
1353
- <input type="file" id="fileInput" accept="video/*,image/*" onchange="startAnalysis(this.files[0])">
1354
- </div>
1355
-
1356
- <div class="analysis-panel">
1357
- <div class="panel-card">
1358
- <div class="card-title"><span class="dot"></span>Authenticity Score</div>
1359
- <div class="result-display">
1360
- <div class="result-score" id="authScore">β€”</div>
1361
- <div class="result-label">Awaiting Analysis</div>
1362
- </div>
1363
- </div>
1364
-
1365
- <div class="panel-card">
1366
- <div class="card-title"><span class="dot"></span>Forensic Signals</div>
1367
- <div class="metric-row">
1368
- <div class="metric-header">
1369
- <span class="metric-name">Face Consistency</span>
1370
- <span class="metric-value" id="m1">β€”</span>
1371
- </div>
1372
- <div class="metric-bar"><div class="metric-fill" id="b1" style="width:0%"></div></div>
1373
- </div>
1374
- <div class="metric-row">
1375
- <div class="metric-header">
1376
- <span class="metric-name">Temporal Artifacts</span>
1377
- <span class="metric-value" id="m2">β€”</span>
1378
- </div>
1379
- <div class="metric-bar"><div class="metric-fill" id="b2" style="width:0%"></div></div>
1380
- </div>
1381
- <div class="metric-row">
1382
- <div class="metric-header">
1383
- <span class="metric-name">GAN Fingerprint</span>
1384
- <span class="metric-value" id="m3">β€”</span>
1385
- </div>
1386
- <div class="metric-bar"><div class="metric-fill" id="b3" style="width:0%"></div></div>
1387
- </div>
1388
- <div class="metric-row">
1389
- <div class="metric-header">
1390
- <span class="metric-name">Blending Seams</span>
1391
- <span class="metric-value" id="m4">β€”</span>
1392
- </div>
1393
- <div class="metric-bar"><div class="metric-fill" id="b4" style="width:0%"></div></div>
1394
- </div>
1395
- <div class="metric-row">
1396
- <div class="metric-header">
1397
- <span class="metric-name">Noise Consistency</span>
1398
- <span class="metric-value" id="m5">β€”</span>
1399
- </div>
1400
- <div class="metric-bar"><div class="metric-fill" id="b5" style="width:0%"></div></div>
1401
- </div>
1402
- </div>
1403
-
1404
- <div class="panel-card">
1405
- <div class="card-title"><span class="dot"></span>System Status</div>
1406
- <div style="font-family:'JetBrains Mono',monospace;font-size:10px;color:var(--text-dim);line-height:2;letter-spacing:1px;" id="statusLog">
1407
- <div>β€Ί System ready</div>
1408
- <div>β€Ί 12 models loaded</div>
1409
- <div>β€Ί GPU: NVIDIA A100 online</div>
1410
- <div style="color:var(--cyan)">β€Ί Awaiting input...</div>
1411
- </div>
1412
- </div>
1413
- </div>
1414
- </div>
1415
- </section>
1416
-
1417
- <!-- HOW IT WORKS -->
1418
- <section class="how-section" id="how">
1419
- <div class="section-label">Process</div>
1420
- <h2 class="section-title">How It <em>Works</em></h2>
1421
- <div class="how-grid">
1422
- <div class="how-step">
1423
- <div class="step-number">01</div>
1424
- <div class="step-icon">
1425
- <svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
1426
- </div>
1427
- <h3 class="step-title">Ingest & Extract</h3>
1428
- <p class="step-desc">Video is decoded frame-by-frame at full resolution. Faces, audio tracks, and metadata are extracted and queued for parallel analysis.</p>
1429
- </div>
1430
- <div class="how-step">
1431
- <div class="step-number">02</div>
1432
- <div class="step-icon">
1433
- <svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/></svg>
1434
- </div>
1435
- <h3 class="step-title">Spatial Analysis</h3>
1436
- <p class="step-desc">12 convolutional neural networks simultaneously scan for blending artifacts, edge inconsistencies, and GAN-specific frequency signatures.</p>
1437
- </div>
1438
- <div class="how-step">
1439
- <div class="step-number">03</div>
1440
- <div class="step-icon">
1441
- <svg viewBox="0 0 24 24"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
1442
- </div>
1443
- <h3 class="step-title">Temporal Coherence</h3>
1444
- <p class="step-desc">Optical flow analysis detects unnatural motion patterns between frames β€” a signature of many AI-generation models that fail to maintain temporal consistency.</p>
1445
- </div>
1446
- <div class="how-step">
1447
- <div class="step-number">04</div>
1448
- <div class="step-icon">
1449
- <svg viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
1450
- </div>
1451
- <h3 class="step-title">Ensemble Verdict</h3>
1452
- <p class="step-desc">Results from all models are aggregated using Bayesian fusion, producing a confidence-weighted final score with full forensic breakdown.</p>
1453
- </div>
1454
- </div>
1455
- </section>
1456
-
1457
- <!-- FEATURES -->
1458
- <section class="features-section" id="features">
1459
- <div class="section-label">Technology</div>
1460
- <h2 class="section-title">Detection <em>Capabilities</em></h2>
1461
- <div class="features-grid">
1462
- <div class="feature-card">
1463
- <div class="feature-icon"><svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M20 21a8 8 0 1 0-16 0"/></svg></div>
1464
- <h3 class="feature-title">Face Swap Detection</h3>
1465
- <p class="feature-desc">Detects FaceSwap, DeepFaceLab, SimSwap, and commercial apps. Analyzes 68 facial landmarks for geometric inconsistencies.</p>
1466
- </div>
1467
- <div class="feature-card">
1468
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg></div>
1469
- <h3 class="feature-title">Voice Cloning Analysis</h3>
1470
- <p class="feature-desc">Spectral fingerprinting identifies AI-synthesized voices from ElevenLabs, VALL-E, and other neural TTS systems with 97.8% accuracy.</p>
1471
- </div>
1472
- <div class="feature-card">
1473
- <div class="feature-icon"><svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2"/><path d="M8 21h8M12 17v4"/></svg></div>
1474
- <h3 class="feature-title">Lip Sync Verification</h3>
1475
- <p class="feature-desc">Cross-modal analysis of audio-visual alignment detects synthetic dubbing and emotional incongruence in manipulated content.</p>
1476
- </div>
1477
- <div class="feature-card">
1478
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><line x1="4" y1="22" x2="4" y2="15"/></svg></div>
1479
- <h3 class="feature-title">GAN Frequency Analysis</h3>
1480
- <p class="feature-desc">DCT and Fourier transform analysis reveals invisible artifacts left in the frequency domain by generative adversarial networks.</p>
1481
- </div>
1482
- <div class="feature-card">
1483
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/></svg></div>
1484
- <h3 class="feature-title">Metadata Forensics</h3>
1485
- <p class="feature-desc">Deep EXIF analysis, compression artifact profiling, and camera model fingerprinting to verify provenance and chain of custody.</p>
1486
- </div>
1487
- <div class="feature-card">
1488
- <div class="feature-icon"><svg viewBox="0 0 24 24"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg></div>
1489
- <h3 class="feature-title">Confidence Scoring</h3>
1490
- <p class="feature-desc">Bayesian ensemble fusion of 12 models generates uncertainty-quantified confidence intervals. Never just a binary yes/no.</p>
1491
- </div>
1492
- </div>
1493
- </section>
1494
-
1495
- <!-- TECH STRIP -->
1496
- <section class="tech-section">
1497
- <div class="tech-strip">
1498
- <div class="tech-label-box">
1499
- <span style="font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:2px;text-transform:uppercase;color:var(--cyan)">Powered By</span>
1500
- </div>
1501
- <div class="tech-items">
1502
- <div class="tech-scroll">
1503
- <span class="tech-item">PyTorch</span>
1504
- <span class="tech-item">EfficientNet-B7</span>
1505
- <span class="tech-item">CLIP</span>
1506
- <span class="tech-item">Xception</span>
1507
- <span class="tech-item">ONNX Runtime</span>
1508
- <span class="tech-item">OpenCV</span>
1509
- <span class="tech-item">Dlib</span>
1510
- <span class="tech-item">NVIDIA A100</span>
1511
- <span class="tech-item">ViT-Large</span>
1512
- <span class="tech-item">FaceForensics++</span>
1513
- <span class="tech-item">DFDC Dataset</span>
1514
- <span class="tech-item">PyTorch</span>
1515
- <span class="tech-item">EfficientNet-B7</span>
1516
- <span class="tech-item">CLIP</span>
1517
- <span class="tech-item">Xception</span>
1518
- <span class="tech-item">ONNX Runtime</span>
1519
- <span class="tech-item">OpenCV</span>
1520
- <span class="tech-item">Dlib</span>
1521
- <span class="tech-item">NVIDIA A100</span>
1522
- <span class="tech-item">ViT-Large</span>
1523
- <span class="tech-item">FaceForensics++</span>
1524
- <span class="tech-item">DFDC Dataset</span>
1525
- </div>
1526
- </div>
1527
- </div>
1528
- </section>
1529
-
1530
- <!-- FORENSICS -->
1531
- <section class="report-section" id="forensics">
1532
- <div class="section-label">Forensic Report</div>
1533
- <h2 class="section-title">Full <em>Transparency</em></h2>
1534
- <p class="section-sub">Every analysis produces a detailed forensic report with explainable AI breakdowns β€” not just a score.</p>
1535
- <div class="report-layout">
1536
- <div class="report-card accent">
1537
- <div class="card-title"><span class="dot"></span>Sample Analysis Report</div>
1538
- <div style="margin-top:8px">
1539
- <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:24px">
1540
- <div>
1541
- <div style="font-family:'JetBrains Mono',monospace;font-size:10px;letter-spacing:2px;color:var(--text-faint);text-transform:uppercase">File</div>
1542
- <div style="font-size:14px;font-weight:600;margin-top:4px">interview_clip_03.mp4</div>
1543
- </div>
1544
- <div style="text-align:right">
1545
- <div style="font-family:'Bebas Neue',sans-serif;font-size:48px;color:var(--red);text-shadow:var(--glow-red);line-height:1">87%</div>
1546
- <div style="font-family:'JetBrains Mono',monospace;font-size:9px;letter-spacing:2px;color:var(--red);text-transform:uppercase">Fake Probability</div>
1547
- </div>
1548
- </div>
1549
- <ul class="forensic-list">
1550
- <li class="forensic-item">
1551
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="4"/><path d="M20 21a8 8 0 1 0-16 0"/></svg></div>
1552
- <span class="forensic-name">Facial Landmark Deviation</span>
1553
- <span class="forensic-status alert">Anomaly</span>
1554
- </li>
1555
- <li class="forensic-item">
1556
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg></div>
1557
- <span class="forensic-name">Temporal Consistency</span>
1558
- <span class="forensic-status alert">Fail</span>
1559
- </li>
1560
- <li class="forensic-item">
1561
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/><line x1="4" y1="22" x2="4" y2="15"/></svg></div>
1562
- <span class="forensic-name">GAN Frequency Signature</span>
1563
- <span class="forensic-status alert">Detected</span>
1564
- </li>
1565
- <li class="forensic-item">
1566
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg></div>
1567
- <span class="forensic-name">Audio-Visual Sync</span>
1568
- <span class="forensic-status warn">Mismatch</span>
1569
- </li>
1570
- <li class="forensic-item">
1571
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/></svg></div>
1572
- <span class="forensic-name">Metadata Integrity</span>
1573
- <span class="forensic-status pass">Pass</span>
1574
- </li>
1575
- <li class="forensic-item">
1576
- <div class="forensic-icon"><svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/></svg></div>
1577
- <span class="forensic-name">Compression Artifacts</span>
1578
- <span class="forensic-status pass">Normal</span>
1579
- </li>
1580
- </ul>
1581
- </div>
1582
- </div>
1583
-
1584
- <div style="display:flex;flex-direction:column;gap:2px">
1585
- <div class="report-card" style="flex:1">
1586
- <div class="card-title"><span class="dot"></span>Model Confidence Breakdown</div>
1587
- <div style="margin-top:16px">
1588
- <div class="metric-row">
1589
- <div class="metric-header"><span class="metric-name">EfficientNet Ensemble</span><span class="metric-value">92%</span></div>
1590
- <div class="metric-bar"><div class="metric-fill" style="width:92%;background:linear-gradient(90deg,var(--red),rgba(255,45,85,0.4))"></div></div>
1591
- </div>
1592
- <div class="metric-row">
1593
- <div class="metric-header"><span class="metric-name">Xception Network</span><span class="metric-value">88%</span></div>
1594
- <div class="metric-bar"><div class="metric-fill" style="width:88%;background:linear-gradient(90deg,var(--red),rgba(255,45,85,0.4))"></div></div>
1595
- </div>
1596
- <div class="metric-row">
1597
- <div class="metric-header"><span class="metric-name">Vision Transformer</span><span class="metric-value">84%</span></div>
1598
- <div class="metric-bar"><div class="metric-fill" style="width:84%;background:linear-gradient(90deg,var(--amber),rgba(255,184,0,0.4))"></div></div>
1599
- </div>
1600
- <div class="metric-row">
1601
- <div class="metric-header"><span class="metric-name">Frequency Analyzer</span><span class="metric-value">91%</span></div>
1602
- <div class="metric-bar"><div class="metric-fill" style="width:91%;background:linear-gradient(90deg,var(--red),rgba(255,45,85,0.4))"></div></div>
1603
- </div>
1604
- <div class="metric-row">
1605
- <div class="metric-header"><span class="metric-name">Temporal Network</span><span class="metric-value">79%</span></div>
1606
- <div class="metric-bar"><div class="metric-fill" style="width:79%;background:linear-gradient(90deg,var(--amber),rgba(255,184,0,0.4))"></div></div>
1607
- </div>
1608
- </div>
1609
- </div>
1610
-
1611
- <div class="report-card">
1612
- <div class="card-title"><span class="dot"></span>Export Options</div>
1613
- <div style="display:flex;gap:8px;margin-top:12px;flex-wrap:wrap">
1614
- <button class="btn-download">PDF Report</button>
1615
- <button class="btn-download">JSON Data</button>
1616
- <button class="btn-download">CSV Export</button>
1617
- <button class="btn-new-scan">New Scan</button>
1618
- </div>
1619
- </div>
1620
- </div>
1621
- </div>
1622
- </section>
1623
-
1624
- <!-- FOOTER -->
1625
- <footer>
1626
- <div class="footer-logo">VERI<span>DEX</span></div>
1627
- <div class="footer-copy">Β© 2025 Veridex Intelligence Β· All Rights Reserved</div>
1628
- <ul class="footer-links">
1629
- <li><a href="#">Privacy</a></li>
1630
- <li><a href="#">Terms</a></li>
1631
- <li><a href="#">API Docs</a></li>
1632
- <li><a href="#">Contact</a></li>
1633
- </ul>
1634
- </footer>
1635
-
1636
- <!-- ANALYZING OVERLAY -->
1637
- <div class="analyze-overlay" id="analyzeOverlay">
1638
- <div class="analyze-scanner">
1639
- <div class="scanner-corner tl"></div>
1640
- <div class="scanner-corner tr"></div>
1641
- <div class="scanner-corner bl"></div>
1642
- <div class="scanner-corner br"></div>
1643
- </div>
1644
- <div class="analyze-text" id="analyzeText">Initializing Neural Networks...</div>
1645
- <div class="analyze-progress-bar"><div class="analyze-fill" id="analyzeFill"></div></div>
1646
- <div class="analyze-steps" id="analyzeSteps">
1647
- <div class="a-step" id="step1"><div class="a-step-dot"></div>Decoding video frames</div>
1648
- <div class="a-step" id="step2"><div class="a-step-dot"></div>Extracting facial landmarks</div>
1649
- <div class="a-step" id="step3"><div class="a-step-dot"></div>Running ensemble models</div>
1650
- <div class="a-step" id="step4"><div class="a-step-dot"></div>Frequency domain analysis</div>
1651
- <div class="a-step" id="step5"><div class="a-step-dot"></div>Temporal coherence check</div>
1652
- <div class="a-step" id="step6"><div class="a-step-dot"></div>Generating forensic report</div>
1653
- </div>
1654
- </div>
1655
-
1656
- <!-- RESULT OVERLAY -->
1657
- <div class="result-overlay" id="resultOverlay">
1658
- <div class="result-modal">
1659
- <button class="modal-close" onclick="closeResult()">βœ• Close</button>
1660
- <div class="modal-verdict">
1661
- <div class="verdict-score" id="modalScore">87%</div>
1662
- <div class="verdict-info">
1663
- <div class="verdict-label">Analysis Complete</div>
1664
- <div class="verdict-title" id="modalVerdict">DEEPFAKE DETECTED</div>
1665
- <p class="verdict-desc" id="modalDesc">High confidence manipulation detected. Multiple forensic signals indicate AI-generated face swap using DeepFaceLab or similar toolchain. Temporal artifacts present in frames 42–87.</p>
1666
- </div>
1667
- </div>
1668
- <div class="modal-metrics">
1669
- <div class="modal-metric">
1670
- <div class="modal-metric-val" id="mm1">94%</div>
1671
- <div class="modal-metric-label">Face Anomaly</div>
1672
- </div>
1673
- <div class="modal-metric">
1674
- <div class="modal-metric-val" id="mm2">87%</div>
1675
- <div class="modal-metric-label">GAN Signature</div>
1676
- </div>
1677
- <div class="modal-metric">
1678
- <div class="modal-metric-val" id="mm3">2.1s</div>
1679
- <div class="modal-metric-label">Scan Duration</div>
1680
- </div>
1681
- </div>
1682
- <div class="modal-footer-actions">
1683
- <button class="btn-download" onclick="closeResult()">Download Report</button>
1684
- <button class="btn-new-scan" onclick="closeResult()">New Scan</button>
1685
- </div>
1686
- </div>
1687
- </div>
1688
-
1689
- <script>
1690
- // ── UPLOAD INTERACTION ──
1691
- function handleDrop(e) {
1692
- e.preventDefault();
1693
- document.getElementById('uploadZone').classList.remove('dragging');
1694
- const file = e.dataTransfer.files[0];
1695
- if (file) startAnalysis(file);
1696
- }
1697
-
1698
- function startAnalysis(file) {
1699
- if (!file) return;
1700
- showAnalyzing(file);
1701
- }
1702
-
1703
- function showAnalyzing(file) {
1704
- const overlay = document.getElementById('analyzeOverlay');
1705
- overlay.classList.add('visible');
1706
-
1707
- const steps = ['step1','step2','step3','step4','step5','step6'];
1708
- const labels = [
1709
- 'Decoding video frames...',
1710
- 'Extracting facial landmarks...',
1711
- 'Running 12 neural models...',
1712
- 'Frequency domain analysis...',
1713
- 'Temporal coherence check...',
1714
- 'Generating forensic report...'
1715
- ];
1716
-
1717
- let currentStep = 0;
1718
-
1719
- const interval = setInterval(() => {
1720
- if (currentStep > 0) {
1721
- document.getElementById(steps[currentStep - 1]).className = 'a-step done';
1722
- }
1723
- if (currentStep < steps.length) {
1724
- document.getElementById(steps[currentStep]).className = 'a-step active';
1725
- document.getElementById('analyzeText').textContent = labels[currentStep];
1726
- currentStep++;
1727
- } else {
1728
- clearInterval(interval);
1729
- setTimeout(() => {
1730
- overlay.classList.remove('visible');
1731
- // reset steps
1732
- steps.forEach(s => document.getElementById(s).className = 'a-step');
1733
- showResult(file);
1734
- updateMetrics();
1735
- }, 600);
1736
- }
1737
- }, 480);
1738
- }
1739
-
1740
- function updateMetrics() {
1741
- const metrics = [
1742
- { id: 'm1', bar: 'b1', val: Math.floor(Math.random()*30+65) },
1743
- { id: 'm2', bar: 'b2', val: Math.floor(Math.random()*30+55) },
1744
- { id: 'm3', bar: 'b3', val: Math.floor(Math.random()*30+60) },
1745
- { id: 'm4', bar: 'b4', val: Math.floor(Math.random()*40+40) },
1746
- { id: 'm5', bar: 'b5', val: Math.floor(Math.random()*30+50) },
1747
- ];
1748
- const overall = Math.floor(metrics.reduce((a,m) => a+m.val, 0) / metrics.length);
1749
-
1750
- const scoreEl = document.getElementById('authScore');
1751
- scoreEl.textContent = overall + '%';
1752
- scoreEl.className = 'result-score ' + (overall > 65 ? 'fake' : overall > 40 ? 'uncertain' : '');
1753
-
1754
- metrics.forEach(m => {
1755
- document.getElementById(m.id).textContent = m.val + '%';
1756
- document.getElementById(m.bar).style.width = m.val + '%';
1757
- });
1758
- }
1759
-
1760
- function showResult(file) {
1761
- const isFake = Math.random() > 0.4;
1762
- const score = isFake ? Math.floor(Math.random()*25+65) : Math.floor(Math.random()*25+5);
1763
- const overlay = document.getElementById('resultOverlay');
1764
-
1765
- document.getElementById('modalScore').textContent = score + '%';
1766
- document.getElementById('modalScore').style.color = isFake ? 'var(--red)' : 'var(--green)';
1767
- document.getElementById('modalVerdict').textContent = isFake ? 'DEEPFAKE DETECTED' : 'AUTHENTIC CONTENT';
1768
- document.getElementById('modalVerdict').className = 'verdict-title ' + (isFake ? '' : 'authentic');
1769
- document.getElementById('modalDesc').textContent = isFake
1770
- ? `High confidence manipulation detected in "${file.name}". Multiple forensic signals indicate AI-generated face swap. Temporal artifacts present across multiple frames.`
1771
- : `No significant manipulation detected in "${file.name}". All forensic signals within normal parameters. Content appears to be authentic original media.`;
1772
- document.getElementById('mm1').textContent = Math.floor(Math.random()*20 + (isFake?75:5)) + '%';
1773
- document.getElementById('mm2').textContent = Math.floor(Math.random()*20 + (isFake?70:3)) + '%';
1774
-
1775
- overlay.classList.add('visible');
1776
- }
1777
-
1778
- function closeResult() {
1779
- document.getElementById('resultOverlay').classList.remove('visible');
1780
- }
1781
-
1782
- // Close result on overlay click
1783
- document.getElementById('resultOverlay').addEventListener('click', function(e) {
1784
- if (e.target === this) closeResult();
1785
- });
1786
-
1787
- // ── COUNTER ANIMATION ──
1788
- function animateCounters() {
1789
- document.querySelectorAll('.stat-number').forEach(el => {
1790
- const text = el.textContent;
1791
- const num = parseFloat(text);
1792
- if (isNaN(num)) return;
1793
- const suffix = text.replace(/[\d.]/g, '');
1794
- let start = 0;
1795
- const duration = 2000;
1796
- const startTime = performance.now();
1797
- function update(now) {
1798
- const elapsed = now - startTime;
1799
- const progress = Math.min(elapsed / duration, 1);
1800
- const eased = 1 - Math.pow(1 - progress, 3);
1801
- const current = start + (num - start) * eased;
1802
- el.firstChild.textContent = (num % 1 !== 0 ? current.toFixed(1) : Math.floor(current)) + suffix;
1803
- if (progress < 1) requestAnimationFrame(update);
1804
- }
1805
- el.firstChild && requestAnimationFrame(update);
1806
- });
1807
- }
1808
-
1809
- // Intersection observer for animations
1810
- const observer = new IntersectionObserver((entries) => {
1811
- entries.forEach(e => {
1812
- if (e.isIntersecting) {
1813
- e.target.style.opacity = '1';
1814
- e.target.style.transform = 'translateY(0)';
1815
- }
1816
- });
1817
- }, { threshold: 0.1 });
1818
-
1819
- document.querySelectorAll('.how-step, .feature-card, .report-card').forEach(el => {
1820
- el.style.opacity = '0';
1821
- el.style.transform = 'translateY(24px)';
1822
- el.style.transition = 'opacity 0.6s ease, transform 0.6s ease, border-color 0.3s';
1823
- observer.observe(el);
1824
- });
1825
-
1826
- setTimeout(animateCounters, 500);
1827
- </script>
1828
- </body>
1829
- </html>