Spaces:
Sleeping
Sleeping
Upload 2 files
Browse files- .gitattributes +1 -0
- static/Logo.jpg +3 -0
- templates/index.html +1109 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
static/Logo.jpg filter=lfs diff=lfs merge=lfs -text
|
static/Logo.jpg
ADDED
|
Git LFS Details
|
templates/index.html
ADDED
|
@@ -0,0 +1,1109 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdnjs.cloudflare.com; font-src 'self' https://fonts.gstatic.com https://cdnjs.cloudflare.com; script-src 'self' 'unsafe-inline'; img-src 'self' data: https:; frame-src https://www.youtube.com https://www.youtube-nocookie.com;">
|
| 7 |
+
<title>Deepfake Detection Tool | Apex Broadcasting Network</title>
|
| 8 |
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
| 9 |
+
<style>
|
| 10 |
+
* {
|
| 11 |
+
margin: 0;
|
| 12 |
+
padding: 0;
|
| 13 |
+
box-sizing: border-box;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
body {
|
| 17 |
+
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
| 18 |
+
background: linear-gradient(135deg, #0a1628 0%, #1a2940 50%, #0a1628 100%);
|
| 19 |
+
min-height: 100vh;
|
| 20 |
+
color: #fff;
|
| 21 |
+
overflow-x: hidden;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
/* Animated background */
|
| 25 |
+
.background-animation {
|
| 26 |
+
position: fixed;
|
| 27 |
+
top: 0;
|
| 28 |
+
left: 0;
|
| 29 |
+
width: 100%;
|
| 30 |
+
height: 100%;
|
| 31 |
+
background: radial-gradient(circle at 20% 50%, rgba(59, 130, 246, 0.1) 0%, transparent 50%),
|
| 32 |
+
radial-gradient(circle at 80% 80%, rgba(147, 51, 234, 0.1) 0%, transparent 50%);
|
| 33 |
+
animation: pulse 15s ease-in-out infinite;
|
| 34 |
+
pointer-events: none;
|
| 35 |
+
z-index: 0;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
@keyframes pulse {
|
| 39 |
+
0%, 100% { opacity: 0.5; }
|
| 40 |
+
50% { opacity: 0.8; }
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
.container {
|
| 44 |
+
position: relative;
|
| 45 |
+
z-index: 1;
|
| 46 |
+
max-width: 1400px;
|
| 47 |
+
margin: 0 auto;
|
| 48 |
+
padding: 20px;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/* Header with Logo */
|
| 52 |
+
.app-header {
|
| 53 |
+
text-align: center;
|
| 54 |
+
padding: 30px 0;
|
| 55 |
+
margin-bottom: 20px;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
.logo-container {
|
| 59 |
+
display: flex;
|
| 60 |
+
align-items: center;
|
| 61 |
+
justify-content: center;
|
| 62 |
+
gap: 20px;
|
| 63 |
+
margin-bottom: 15px;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.logo-image {
|
| 67 |
+
height: 80px;
|
| 68 |
+
width: auto;
|
| 69 |
+
filter: drop-shadow(0 0 20px rgba(59, 130, 246, 0.5));
|
| 70 |
+
animation: logoGlow 3s ease-in-out infinite;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
@keyframes logoGlow {
|
| 74 |
+
0%, 100% { filter: drop-shadow(0 0 20px rgba(59, 130, 246, 0.5)); }
|
| 75 |
+
50% { filter: drop-shadow(0 0 30px rgba(59, 130, 246, 0.8)); }
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.header-title {
|
| 79 |
+
font-size: 2.5em;
|
| 80 |
+
font-weight: 700;
|
| 81 |
+
background: linear-gradient(135deg, #fff 0%, #3b82f6 100%);
|
| 82 |
+
-webkit-background-clip: text;
|
| 83 |
+
-webkit-text-fill-color: transparent;
|
| 84 |
+
background-clip: text;
|
| 85 |
+
margin-bottom: 5px;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
.header-subtitle {
|
| 89 |
+
font-size: 1.1em;
|
| 90 |
+
color: #94a3b8;
|
| 91 |
+
font-weight: 300;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/* Tabbed Navigation */
|
| 95 |
+
.tab-navigation {
|
| 96 |
+
display: flex;
|
| 97 |
+
justify-content: center;
|
| 98 |
+
gap: 15px;
|
| 99 |
+
margin-bottom: 40px;
|
| 100 |
+
background: rgba(15, 23, 42, 0.6);
|
| 101 |
+
backdrop-filter: blur(10px);
|
| 102 |
+
padding: 15px;
|
| 103 |
+
border-radius: 20px;
|
| 104 |
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
| 105 |
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
.tab-button {
|
| 109 |
+
display: flex;
|
| 110 |
+
align-items: center;
|
| 111 |
+
gap: 12px;
|
| 112 |
+
padding: 15px 40px;
|
| 113 |
+
background: transparent;
|
| 114 |
+
border: 2px solid rgba(59, 130, 246, 0.3);
|
| 115 |
+
border-radius: 15px;
|
| 116 |
+
color: #94a3b8;
|
| 117 |
+
font-size: 1.1em;
|
| 118 |
+
font-weight: 600;
|
| 119 |
+
cursor: pointer;
|
| 120 |
+
transition: all 0.3s ease;
|
| 121 |
+
position: relative;
|
| 122 |
+
overflow: hidden;
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
.tab-button::before {
|
| 126 |
+
content: '';
|
| 127 |
+
position: absolute;
|
| 128 |
+
top: 50%;
|
| 129 |
+
left: 50%;
|
| 130 |
+
width: 0;
|
| 131 |
+
height: 0;
|
| 132 |
+
border-radius: 50%;
|
| 133 |
+
background: rgba(59, 130, 246, 0.2);
|
| 134 |
+
transform: translate(-50%, -50%);
|
| 135 |
+
transition: width 0.4s ease, height 0.4s ease;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
.tab-button:hover::before {
|
| 139 |
+
width: 300px;
|
| 140 |
+
height: 300px;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
.tab-button:hover {
|
| 144 |
+
border-color: #3b82f6;
|
| 145 |
+
color: #fff;
|
| 146 |
+
transform: translateY(-2px);
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
.tab-button.active {
|
| 150 |
+
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
|
| 151 |
+
border-color: transparent;
|
| 152 |
+
color: #fff;
|
| 153 |
+
box-shadow: 0 8px 20px rgba(59, 130, 246, 0.4);
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
.tab-button i {
|
| 157 |
+
font-size: 1.3em;
|
| 158 |
+
position: relative;
|
| 159 |
+
z-index: 1;
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
.tab-button span {
|
| 163 |
+
position: relative;
|
| 164 |
+
z-index: 1;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
/* Tab Content */
|
| 168 |
+
.tab-content {
|
| 169 |
+
display: none;
|
| 170 |
+
animation: fadeIn 0.5s ease-in-out;
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
.tab-content.active {
|
| 174 |
+
display: block;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
@keyframes fadeIn {
|
| 178 |
+
from {
|
| 179 |
+
opacity: 0;
|
| 180 |
+
transform: translateY(20px);
|
| 181 |
+
}
|
| 182 |
+
to {
|
| 183 |
+
opacity: 1;
|
| 184 |
+
transform: translateY(0);
|
| 185 |
+
}
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
/* Glassmorphism Effect */
|
| 189 |
+
.glass-effect {
|
| 190 |
+
background: rgba(15, 23, 42, 0.7);
|
| 191 |
+
backdrop-filter: blur(20px);
|
| 192 |
+
border-radius: 20px;
|
| 193 |
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
| 194 |
+
padding: 30px;
|
| 195 |
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
/* Detection Tab Styles */
|
| 199 |
+
.section-header {
|
| 200 |
+
display: flex;
|
| 201 |
+
align-items: center;
|
| 202 |
+
gap: 15px;
|
| 203 |
+
margin-bottom: 20px;
|
| 204 |
+
font-size: 1.5em;
|
| 205 |
+
color: #3b82f6;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
.section-header i {
|
| 209 |
+
font-size: 1.3em;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
.upload-description {
|
| 213 |
+
color: #94a3b8;
|
| 214 |
+
margin-bottom: 25px;
|
| 215 |
+
font-size: 0.95em;
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
.file-upload-area {
|
| 219 |
+
border: 3px dashed rgba(59, 130, 246, 0.4);
|
| 220 |
+
border-radius: 15px;
|
| 221 |
+
padding: 60px 30px;
|
| 222 |
+
text-align: center;
|
| 223 |
+
cursor: pointer;
|
| 224 |
+
transition: all 0.3s ease;
|
| 225 |
+
background: rgba(59, 130, 246, 0.05);
|
| 226 |
+
margin-bottom: 25px;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
.file-upload-area:hover,
|
| 230 |
+
.file-upload-area.drag-over {
|
| 231 |
+
border-color: #3b82f6;
|
| 232 |
+
background: rgba(59, 130, 246, 0.1);
|
| 233 |
+
transform: scale(1.02);
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
.file-upload-area.file-selected {
|
| 237 |
+
border-color: #10b981;
|
| 238 |
+
background: rgba(16, 185, 129, 0.1);
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
.upload-icon {
|
| 242 |
+
font-size: 4em;
|
| 243 |
+
color: #3b82f6;
|
| 244 |
+
margin-bottom: 20px;
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
.upload-text {
|
| 248 |
+
font-size: 1.1em;
|
| 249 |
+
color: #cbd5e1;
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
.upload-text strong {
|
| 253 |
+
color: #3b82f6;
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
.detect-btn {
|
| 257 |
+
width: 100%;
|
| 258 |
+
padding: 18px;
|
| 259 |
+
background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%);
|
| 260 |
+
border: none;
|
| 261 |
+
border-radius: 12px;
|
| 262 |
+
color: #fff;
|
| 263 |
+
font-size: 1.2em;
|
| 264 |
+
font-weight: 600;
|
| 265 |
+
cursor: pointer;
|
| 266 |
+
display: flex;
|
| 267 |
+
align-items: center;
|
| 268 |
+
justify-content: center;
|
| 269 |
+
gap: 12px;
|
| 270 |
+
transition: all 0.3s ease;
|
| 271 |
+
box-shadow: 0 4px 15px rgba(59, 130, 246, 0.3);
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
.detect-btn:hover:not(:disabled) {
|
| 275 |
+
transform: translateY(-2px);
|
| 276 |
+
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.5);
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
.detect-btn:disabled {
|
| 280 |
+
opacity: 0.5;
|
| 281 |
+
cursor: not-allowed;
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
/* Results Section */
|
| 285 |
+
.result-section {
|
| 286 |
+
margin-top: 30px;
|
| 287 |
+
}
|
| 288 |
+
|
| 289 |
+
.result-container {
|
| 290 |
+
display: grid;
|
| 291 |
+
grid-template-columns: 1fr 1fr;
|
| 292 |
+
gap: 30px;
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
.image-preview h4,
|
| 296 |
+
.detection-results h3 {
|
| 297 |
+
display: flex;
|
| 298 |
+
align-items: center;
|
| 299 |
+
gap: 12px;
|
| 300 |
+
color: #3b82f6;
|
| 301 |
+
margin-bottom: 20px;
|
| 302 |
+
font-size: 1.3em;
|
| 303 |
+
}
|
| 304 |
+
|
| 305 |
+
.image-frame {
|
| 306 |
+
position: relative;
|
| 307 |
+
border-radius: 15px;
|
| 308 |
+
overflow: hidden;
|
| 309 |
+
border: 2px solid rgba(59, 130, 246, 0.3);
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
.uploaded-image {
|
| 313 |
+
width: 100%;
|
| 314 |
+
height: auto;
|
| 315 |
+
display: block;
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
.image-overlay {
|
| 319 |
+
position: absolute;
|
| 320 |
+
bottom: 0;
|
| 321 |
+
left: 0;
|
| 322 |
+
right: 0;
|
| 323 |
+
background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
|
| 324 |
+
padding: 15px;
|
| 325 |
+
color: #fff;
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
.filename {
|
| 329 |
+
font-size: 0.9em;
|
| 330 |
+
word-break: break-all;
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
.result-card {
|
| 334 |
+
padding: 25px;
|
| 335 |
+
border-radius: 15px;
|
| 336 |
+
border: 2px solid;
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
.result-card.real {
|
| 340 |
+
background: rgba(16, 185, 129, 0.1);
|
| 341 |
+
border-color: #10b981;
|
| 342 |
+
}
|
| 343 |
+
|
| 344 |
+
.result-card.fake {
|
| 345 |
+
background: rgba(239, 68, 68, 0.1);
|
| 346 |
+
border-color: #ef4444;
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
.result-header {
|
| 350 |
+
display: flex;
|
| 351 |
+
align-items: center;
|
| 352 |
+
gap: 20px;
|
| 353 |
+
margin-bottom: 20px;
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
.result-icon {
|
| 357 |
+
font-size: 3em;
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
.result-card.real .result-icon {
|
| 361 |
+
color: #10b981;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
.result-card.fake .result-icon {
|
| 365 |
+
color: #ef4444;
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
.result-text h4 {
|
| 369 |
+
font-size: 1.5em;
|
| 370 |
+
margin-bottom: 5px;
|
| 371 |
+
}
|
| 372 |
+
|
| 373 |
+
.confidence-text {
|
| 374 |
+
color: #94a3b8;
|
| 375 |
+
font-size: 0.9em;
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
.confidence-bar {
|
| 379 |
+
position: relative;
|
| 380 |
+
width: 100%;
|
| 381 |
+
height: 40px;
|
| 382 |
+
background: rgba(0, 0, 0, 0.3);
|
| 383 |
+
border-radius: 10px;
|
| 384 |
+
overflow: hidden;
|
| 385 |
+
margin-bottom: 20px;
|
| 386 |
+
}
|
| 387 |
+
|
| 388 |
+
.confidence-fill {
|
| 389 |
+
height: 100%;
|
| 390 |
+
background: linear-gradient(90deg, #3b82f6, #8b5cf6);
|
| 391 |
+
transition: width 1s ease;
|
| 392 |
+
display: flex;
|
| 393 |
+
align-items: center;
|
| 394 |
+
justify-content: flex-end;
|
| 395 |
+
padding-right: 15px;
|
| 396 |
+
}
|
| 397 |
+
|
| 398 |
+
.result-card.real .confidence-fill {
|
| 399 |
+
background: linear-gradient(90deg, #10b981, #059669);
|
| 400 |
+
}
|
| 401 |
+
|
| 402 |
+
.result-card.fake .confidence-fill {
|
| 403 |
+
background: linear-gradient(90deg, #ef4444, #dc2626);
|
| 404 |
+
}
|
| 405 |
+
|
| 406 |
+
.confidence-value {
|
| 407 |
+
position: absolute;
|
| 408 |
+
right: 15px;
|
| 409 |
+
top: 50%;
|
| 410 |
+
transform: translateY(-50%);
|
| 411 |
+
font-weight: 700;
|
| 412 |
+
font-size: 1.1em;
|
| 413 |
+
color: #fff;
|
| 414 |
+
z-index: 1;
|
| 415 |
+
}
|
| 416 |
+
|
| 417 |
+
.result-interpretation {
|
| 418 |
+
display: flex;
|
| 419 |
+
align-items: center;
|
| 420 |
+
gap: 10px;
|
| 421 |
+
padding: 15px;
|
| 422 |
+
background: rgba(0, 0, 0, 0.3);
|
| 423 |
+
border-radius: 10px;
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
.result-interpretation i {
|
| 427 |
+
font-size: 1.2em;
|
| 428 |
+
}
|
| 429 |
+
|
| 430 |
+
/* Literacy Tab Styles */
|
| 431 |
+
.literacy-content {
|
| 432 |
+
max-width: 1200px;
|
| 433 |
+
margin: 0 auto;
|
| 434 |
+
}
|
| 435 |
+
|
| 436 |
+
.literacy-intro {
|
| 437 |
+
text-align: center;
|
| 438 |
+
margin-bottom: 50px;
|
| 439 |
+
}
|
| 440 |
+
|
| 441 |
+
.literacy-intro h2 {
|
| 442 |
+
font-size: 2.5em;
|
| 443 |
+
margin-bottom: 15px;
|
| 444 |
+
background: linear-gradient(135deg, #fff 0%, #3b82f6 100%);
|
| 445 |
+
-webkit-background-clip: text;
|
| 446 |
+
-webkit-text-fill-color: transparent;
|
| 447 |
+
background-clip: text;
|
| 448 |
+
}
|
| 449 |
+
|
| 450 |
+
.literacy-intro p {
|
| 451 |
+
font-size: 1.2em;
|
| 452 |
+
color: #94a3b8;
|
| 453 |
+
line-height: 1.6;
|
| 454 |
+
}
|
| 455 |
+
|
| 456 |
+
.content-section {
|
| 457 |
+
margin-bottom: 50px;
|
| 458 |
+
}
|
| 459 |
+
|
| 460 |
+
.content-section h3 {
|
| 461 |
+
display: flex;
|
| 462 |
+
align-items: center;
|
| 463 |
+
gap: 15px;
|
| 464 |
+
font-size: 1.8em;
|
| 465 |
+
color: #3b82f6;
|
| 466 |
+
margin-bottom: 25px;
|
| 467 |
+
}
|
| 468 |
+
|
| 469 |
+
.content-section h3 i {
|
| 470 |
+
font-size: 1.2em;
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
.content-section p {
|
| 474 |
+
font-size: 1.05em;
|
| 475 |
+
line-height: 1.8;
|
| 476 |
+
color: #cbd5e1;
|
| 477 |
+
margin-bottom: 20px;
|
| 478 |
+
}
|
| 479 |
+
|
| 480 |
+
.content-section ul {
|
| 481 |
+
list-style: none;
|
| 482 |
+
padding-left: 0;
|
| 483 |
+
}
|
| 484 |
+
|
| 485 |
+
.content-section li {
|
| 486 |
+
padding: 15px;
|
| 487 |
+
margin-bottom: 12px;
|
| 488 |
+
background: rgba(59, 130, 246, 0.1);
|
| 489 |
+
border-left: 4px solid #3b82f6;
|
| 490 |
+
border-radius: 8px;
|
| 491 |
+
color: #e2e8f0;
|
| 492 |
+
transition: all 0.3s ease;
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
.content-section li:hover {
|
| 496 |
+
background: rgba(59, 130, 246, 0.15);
|
| 497 |
+
transform: translateX(5px);
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
.content-section strong {
|
| 501 |
+
color: #3b82f6;
|
| 502 |
+
}
|
| 503 |
+
|
| 504 |
+
/* Video Section */
|
| 505 |
+
.video-grid {
|
| 506 |
+
display: grid;
|
| 507 |
+
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
| 508 |
+
gap: 30px;
|
| 509 |
+
margin-top: 30px;
|
| 510 |
+
}
|
| 511 |
+
|
| 512 |
+
.video-card {
|
| 513 |
+
background: rgba(15, 23, 42, 0.7);
|
| 514 |
+
backdrop-filter: blur(20px);
|
| 515 |
+
border-radius: 15px;
|
| 516 |
+
overflow: hidden;
|
| 517 |
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
| 518 |
+
transition: all 0.3s ease;
|
| 519 |
+
}
|
| 520 |
+
|
| 521 |
+
.video-card:hover {
|
| 522 |
+
transform: translateY(-5px);
|
| 523 |
+
box-shadow: 0 12px 30px rgba(59, 130, 246, 0.3);
|
| 524 |
+
}
|
| 525 |
+
|
| 526 |
+
.video-container {
|
| 527 |
+
position: relative;
|
| 528 |
+
padding-bottom: 56.25%;
|
| 529 |
+
height: 0;
|
| 530 |
+
overflow: hidden;
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
.video-container iframe {
|
| 534 |
+
position: absolute;
|
| 535 |
+
top: 0;
|
| 536 |
+
left: 0;
|
| 537 |
+
width: 100%;
|
| 538 |
+
height: 100%;
|
| 539 |
+
border: none;
|
| 540 |
+
}
|
| 541 |
+
|
| 542 |
+
.video-info {
|
| 543 |
+
padding: 20px;
|
| 544 |
+
}
|
| 545 |
+
|
| 546 |
+
.video-info h4 {
|
| 547 |
+
color: #fff;
|
| 548 |
+
margin-bottom: 10px;
|
| 549 |
+
font-size: 1.1em;
|
| 550 |
+
}
|
| 551 |
+
|
| 552 |
+
.video-info p {
|
| 553 |
+
color: #94a3b8;
|
| 554 |
+
font-size: 0.9em;
|
| 555 |
+
margin: 0;
|
| 556 |
+
}
|
| 557 |
+
|
| 558 |
+
/* Resources Section */
|
| 559 |
+
.resources-grid {
|
| 560 |
+
display: grid;
|
| 561 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
| 562 |
+
gap: 25px;
|
| 563 |
+
margin-top: 30px;
|
| 564 |
+
}
|
| 565 |
+
|
| 566 |
+
.resource-card {
|
| 567 |
+
background: rgba(15, 23, 42, 0.7);
|
| 568 |
+
backdrop-filter: blur(20px);
|
| 569 |
+
padding: 25px;
|
| 570 |
+
border-radius: 15px;
|
| 571 |
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
| 572 |
+
transition: all 0.3s ease;
|
| 573 |
+
}
|
| 574 |
+
|
| 575 |
+
.resource-card:hover {
|
| 576 |
+
transform: translateY(-5px);
|
| 577 |
+
border-color: #3b82f6;
|
| 578 |
+
box-shadow: 0 8px 25px rgba(59, 130, 246, 0.3);
|
| 579 |
+
}
|
| 580 |
+
|
| 581 |
+
.resource-card h4 {
|
| 582 |
+
display: flex;
|
| 583 |
+
align-items: center;
|
| 584 |
+
gap: 12px;
|
| 585 |
+
color: #3b82f6;
|
| 586 |
+
margin-bottom: 15px;
|
| 587 |
+
font-size: 1.2em;
|
| 588 |
+
}
|
| 589 |
+
|
| 590 |
+
.resource-card h4 i {
|
| 591 |
+
font-size: 1.3em;
|
| 592 |
+
}
|
| 593 |
+
|
| 594 |
+
.resource-card p {
|
| 595 |
+
color: #cbd5e1;
|
| 596 |
+
margin-bottom: 15px;
|
| 597 |
+
line-height: 1.6;
|
| 598 |
+
}
|
| 599 |
+
|
| 600 |
+
.resource-link {
|
| 601 |
+
display: inline-flex;
|
| 602 |
+
align-items: center;
|
| 603 |
+
gap: 8px;
|
| 604 |
+
color: #3b82f6;
|
| 605 |
+
text-decoration: none;
|
| 606 |
+
font-weight: 600;
|
| 607 |
+
transition: all 0.3s ease;
|
| 608 |
+
}
|
| 609 |
+
|
| 610 |
+
.resource-link:hover {
|
| 611 |
+
color: #60a5fa;
|
| 612 |
+
gap: 12px;
|
| 613 |
+
}
|
| 614 |
+
|
| 615 |
+
/* Error Message */
|
| 616 |
+
.validation-error,
|
| 617 |
+
.error-message {
|
| 618 |
+
background: rgba(239, 68, 68, 0.2);
|
| 619 |
+
border: 1px solid #ef4444;
|
| 620 |
+
color: #fecaca;
|
| 621 |
+
padding: 15px 20px;
|
| 622 |
+
border-radius: 10px;
|
| 623 |
+
margin-bottom: 20px;
|
| 624 |
+
display: flex;
|
| 625 |
+
align-items: center;
|
| 626 |
+
gap: 12px;
|
| 627 |
+
}
|
| 628 |
+
|
| 629 |
+
.validation-error i,
|
| 630 |
+
.error-message i {
|
| 631 |
+
font-size: 1.3em;
|
| 632 |
+
}
|
| 633 |
+
|
| 634 |
+
/* Footer */
|
| 635 |
+
.app-footer {
|
| 636 |
+
margin-top: 60px;
|
| 637 |
+
padding: 30px;
|
| 638 |
+
text-align: center;
|
| 639 |
+
background: rgba(15, 23, 42, 0.7);
|
| 640 |
+
backdrop-filter: blur(20px);
|
| 641 |
+
border-radius: 20px;
|
| 642 |
+
border: 1px solid rgba(59, 130, 246, 0.2);
|
| 643 |
+
}
|
| 644 |
+
|
| 645 |
+
.footer-logo {
|
| 646 |
+
display: flex;
|
| 647 |
+
align-items: center;
|
| 648 |
+
justify-content: center;
|
| 649 |
+
gap: 12px;
|
| 650 |
+
font-size: 1.3em;
|
| 651 |
+
color: #3b82f6;
|
| 652 |
+
margin-bottom: 10px;
|
| 653 |
+
}
|
| 654 |
+
|
| 655 |
+
.footer-text p {
|
| 656 |
+
color: #94a3b8;
|
| 657 |
+
}
|
| 658 |
+
|
| 659 |
+
/* Responsive Design */
|
| 660 |
+
@media (max-width: 1024px) {
|
| 661 |
+
.result-container {
|
| 662 |
+
grid-template-columns: 1fr;
|
| 663 |
+
}
|
| 664 |
+
}
|
| 665 |
+
|
| 666 |
+
@media (max-width: 768px) {
|
| 667 |
+
.header-title {
|
| 668 |
+
font-size: 1.8em;
|
| 669 |
+
}
|
| 670 |
+
|
| 671 |
+
.tab-navigation {
|
| 672 |
+
flex-direction: column;
|
| 673 |
+
gap: 10px;
|
| 674 |
+
}
|
| 675 |
+
|
| 676 |
+
.tab-button {
|
| 677 |
+
padding: 12px 30px;
|
| 678 |
+
font-size: 1em;
|
| 679 |
+
}
|
| 680 |
+
|
| 681 |
+
.video-grid,
|
| 682 |
+
.resources-grid {
|
| 683 |
+
grid-template-columns: 1fr;
|
| 684 |
+
}
|
| 685 |
+
|
| 686 |
+
.literacy-intro h2 {
|
| 687 |
+
font-size: 1.8em;
|
| 688 |
+
}
|
| 689 |
+
|
| 690 |
+
.content-section h3 {
|
| 691 |
+
font-size: 1.4em;
|
| 692 |
+
}
|
| 693 |
+
}
|
| 694 |
+
</style>
|
| 695 |
+
</head>
|
| 696 |
+
<body>
|
| 697 |
+
<div class="background-animation"></div>
|
| 698 |
+
|
| 699 |
+
<div class="container">
|
| 700 |
+
<!-- Header with Logo -->
|
| 701 |
+
<header class="app-header">
|
| 702 |
+
<div class="logo-container">
|
| 703 |
+
<img src="/static/Logo.jpg" alt="Apex Broadcasting Network Logo" class="logo-image">
|
| 704 |
+
</div>
|
| 705 |
+
<h1 class="header-title">Deepfake Detection Tool</h1>
|
| 706 |
+
<p class="header-subtitle">Advancing Media Integrity through AI-Powered Technology</p>
|
| 707 |
+
</header>
|
| 708 |
+
|
| 709 |
+
<!-- Tabbed Navigation -->
|
| 710 |
+
<nav class="tab-navigation">
|
| 711 |
+
<button class="tab-button active" onclick="switchTab('detection')">
|
| 712 |
+
<i class="fas fa-search"></i>
|
| 713 |
+
<span>Detection</span>
|
| 714 |
+
</button>
|
| 715 |
+
<button class="tab-button" onclick="switchTab('literacy')">
|
| 716 |
+
<i class="fas fa-graduation-cap"></i>
|
| 717 |
+
<span>Deepfake Literacy</span>
|
| 718 |
+
</button>
|
| 719 |
+
</nav>
|
| 720 |
+
|
| 721 |
+
<!-- Detection Tab -->
|
| 722 |
+
<div id="detection-tab" class="tab-content active">
|
| 723 |
+
<section class="glass-effect">
|
| 724 |
+
<div class="section-header">
|
| 725 |
+
<i class="fas fa-cloud-upload-alt"></i>
|
| 726 |
+
<h3>Upload Image for Analysis</h3>
|
| 727 |
+
</div>
|
| 728 |
+
<p class="upload-description">Supported formats: JPEG, PNG • Maximum size: 10MB</p>
|
| 729 |
+
|
| 730 |
+
<form action="/predict" method="post" enctype="multipart/form-data" class="upload-form">
|
| 731 |
+
<div class="file-upload-area" id="fileUploadArea">
|
| 732 |
+
<div class="upload-icon">
|
| 733 |
+
<i class="fas fa-image"></i>
|
| 734 |
+
</div>
|
| 735 |
+
<p class="upload-text">
|
| 736 |
+
<strong>Click to browse</strong> or drag and drop your image here
|
| 737 |
+
</p>
|
| 738 |
+
<input type="file"
|
| 739 |
+
id="imageInput"
|
| 740 |
+
name="image"
|
| 741 |
+
accept="image/jpeg,image/png"
|
| 742 |
+
required
|
| 743 |
+
style="display:none;">
|
| 744 |
+
|
| 745 |
+
</div>
|
| 746 |
+
|
| 747 |
+
<button type="submit" class="detect-btn" id="detectBtn" disabled>
|
| 748 |
+
<i class="fas fa-search"></i>
|
| 749 |
+
Analyze Image
|
| 750 |
+
</button>
|
| 751 |
+
</form>
|
| 752 |
+
</section>
|
| 753 |
+
|
| 754 |
+
<!-- Results Section (shown when prediction exists) -->
|
| 755 |
+
<section class="result-section glass-effect" style="display: none;" id="resultsSection">
|
| 756 |
+
<div class="result-container">
|
| 757 |
+
<div class="image-preview">
|
| 758 |
+
<h4><i class="fas fa-image"></i> Analyzed Image</h4>
|
| 759 |
+
<div class="image-frame">
|
| 760 |
+
<img src="" alt="Uploaded image" class="uploaded-image" id="uploadedImage">
|
| 761 |
+
<div class="image-overlay">
|
| 762 |
+
<span class="filename" id="displayFilename">image.jpg</span>
|
| 763 |
+
</div>
|
| 764 |
+
</div>
|
| 765 |
+
</div>
|
| 766 |
+
|
| 767 |
+
<div class="detection-results">
|
| 768 |
+
<h3><i class="fas fa-chart-line"></i> Detection Results</h3>
|
| 769 |
+
|
| 770 |
+
<div class="result-card real" id="resultCard">
|
| 771 |
+
<div class="result-header">
|
| 772 |
+
<div class="result-icon">
|
| 773 |
+
<i class="fas fa-check-circle" id="resultIcon"></i>
|
| 774 |
+
</div>
|
| 775 |
+
<div class="result-text">
|
| 776 |
+
<h4 id="predictionText">Classification: Real</h4>
|
| 777 |
+
<p class="confidence-text">Confidence Level</p>
|
| 778 |
+
</div>
|
| 779 |
+
</div>
|
| 780 |
+
|
| 781 |
+
<div class="confidence-bar">
|
| 782 |
+
<div class="confidence-fill" id="confidenceFill" style="width: 0%"></div>
|
| 783 |
+
<span class="confidence-value" id="confidenceValue">0%</span>
|
| 784 |
+
</div>
|
| 785 |
+
|
| 786 |
+
<div class="result-interpretation">
|
| 787 |
+
<i class="fas fa-info-circle"></i>
|
| 788 |
+
<p id="interpretationText">The image appears to be authentic based on our analysis.</p>
|
| 789 |
+
</div>
|
| 790 |
+
</div>
|
| 791 |
+
</div>
|
| 792 |
+
</div>
|
| 793 |
+
</section>
|
| 794 |
+
</div>
|
| 795 |
+
|
| 796 |
+
<!-- Literacy Tab -->
|
| 797 |
+
<div id="literacy-tab" class="tab-content">
|
| 798 |
+
<div class="literacy-content">
|
| 799 |
+
<div class="literacy-intro glass-effect">
|
| 800 |
+
<h2>Understanding Deepfakes</h2>
|
| 801 |
+
<p>Deepfake technology represents both a remarkable achievement in artificial intelligence and a significant challenge to digital trust. Learn how to identify, understand, and protect yourself from manipulated media.</p>
|
| 802 |
+
</div>
|
| 803 |
+
|
| 804 |
+
<!-- What are Deepfakes -->
|
| 805 |
+
<section class="content-section glass-effect">
|
| 806 |
+
<h3><i class="fas fa-question-circle"></i> What are Deepfakes?</h3>
|
| 807 |
+
<p>Deepfakes are synthetic media created using artificial intelligence and deep learning techniques, particularly Generative Adversarial Networks (GANs). These technologies can create highly realistic fake images, videos, and audio that convincingly mimic real people.</p>
|
| 808 |
+
<ul>
|
| 809 |
+
<li><strong>Synthetic Media:</strong> Content generated entirely or partially by AI algorithms</li>
|
| 810 |
+
<li><strong>Face Swapping:</strong> Replacing one person's face with another's in images or videos</li>
|
| 811 |
+
<li><strong>Voice Cloning:</strong> Replicating someone's voice patterns and speech characteristics</li>
|
| 812 |
+
<li><strong>Facial Reenactment:</strong> Transferring one person's expressions to another's face</li>
|
| 813 |
+
<li><strong>Text-to-Speech Synthesis:</strong> Generating realistic speech from written text</li>
|
| 814 |
+
</ul>
|
| 815 |
+
</section>
|
| 816 |
+
|
| 817 |
+
<!-- How Deepfakes are Created -->
|
| 818 |
+
<section class="content-section glass-effect">
|
| 819 |
+
<h3><i class="fas fa-microchip"></i> How Deepfakes are Created</h3>
|
| 820 |
+
<p>Creating deepfakes involves sophisticated machine learning techniques that have become increasingly accessible through open-source tools and cloud computing platforms.</p>
|
| 821 |
+
<ul>
|
| 822 |
+
<li><strong>Generative Adversarial Networks (GANs):</strong> Two neural networks compete—one generates fake content while the other tries to detect it, improving both over time</li>
|
| 823 |
+
<li><strong>Autoencoder Architecture:</strong> Compresses facial features into a latent space and reconstructs them on a target face</li>
|
| 824 |
+
<li><strong>Training Data Collection:</strong> Requires hundreds to thousands of images or video frames of the target person</li>
|
| 825 |
+
<li><strong>Face Detection & Alignment:</strong> Algorithms identify and normalize facial features for consistent processing</li>
|
| 826 |
+
<li><strong>Feature Extraction:</strong> Deep learning models learn unique characteristics like facial structure, lighting, and expressions</li>
|
| 827 |
+
<li><strong>Rendering & Post-Processing:</strong> Blending, color correction, and refinement to create seamless results</li>
|
| 828 |
+
</ul>
|
| 829 |
+
</section>
|
| 830 |
+
|
| 831 |
+
<!-- Risks and Societal Impact -->
|
| 832 |
+
<section class="content-section glass-effect">
|
| 833 |
+
<h3><i class="fas fa-exclamation-triangle"></i> Risks & Societal Impact</h3>
|
| 834 |
+
<p>The misuse of deepfake technology poses serious threats to individuals, institutions, and society as a whole, undermining trust in digital media.</p>
|
| 835 |
+
<ul>
|
| 836 |
+
<li><strong>Misinformation & Fake News:</strong> Spreading false narratives through fabricated videos of public figures</li>
|
| 837 |
+
<li><strong>Political Manipulation:</strong> Creating fake speeches or compromising situations to influence elections</li>
|
| 838 |
+
<li><strong>Non-Consensual Intimate Content:</strong> Targeting individuals, particularly women, with fake explicit material</li>
|
| 839 |
+
<li><strong>Financial Fraud:</strong> Impersonating executives in video calls to authorize fraudulent transactions</li>
|
| 840 |
+
<li><strong>Identity Theft:</strong> Using someone's likeness for unauthorized commercial purposes</li>
|
| 841 |
+
<li><strong>Erosion of Trust:</strong> Making people doubt the authenticity of all digital content</li>
|
| 842 |
+
<li><strong>Cyberbullying & Harassment:</strong> Creating fake embarrassing content to harm reputations</li>
|
| 843 |
+
<li><strong>National Security Threats:</strong> Fabricating intelligence or military communications</li>
|
| 844 |
+
</ul>
|
| 845 |
+
</section>
|
| 846 |
+
|
| 847 |
+
<!-- How to Identify Deepfakes -->
|
| 848 |
+
<section class="content-section glass-effect">
|
| 849 |
+
<h3><i class="fas fa-eye"></i> How to Identify Deepfake Images</h3>
|
| 850 |
+
<p>While deepfakes are becoming increasingly sophisticated, there are still telltale signs that can help you identify manipulated images and videos.</p>
|
| 851 |
+
<ul>
|
| 852 |
+
<li><strong>Unnatural Facial Features:</strong> Look for asymmetry, unusual proportions, or misaligned features</li>
|
| 853 |
+
<li><strong>Lighting Inconsistencies:</strong> Check if lighting on the face matches the environment</li>
|
| 854 |
+
<li><strong>Blurring at Boundaries:</strong> Examine the edges where the face meets hair or background</li>
|
| 855 |
+
<li><strong>Eye Movement & Blinking:</strong> In videos, unnatural eye movements or lack of blinking</li>
|
| 856 |
+
<li><strong>Skin Texture Anomalies:</strong> Overly smooth or inconsistent skin texture and pores</li>
|
| 857 |
+
<li><strong>Shadow Misalignment:</strong> Shadows that don't match the face's position or light source</li>
|
| 858 |
+
<li><strong>Audio-Visual Sync:</strong> In videos, lips not matching speech patterns correctly</li>
|
| 859 |
+
<li><strong>Compression Artifacts:</strong> Unusual patterns around manipulated areas due to re-encoding</li>
|
| 860 |
+
<li><strong>Reflection & Glasses:</strong> Inconsistencies in reflections in eyeglasses or eyes</li>
|
| 861 |
+
<li><strong>Micro-expressions:</strong> Missing subtle emotional expressions that occur naturally</li>
|
| 862 |
+
</ul>
|
| 863 |
+
</section>
|
| 864 |
+
|
| 865 |
+
<!-- Educational Videos -->
|
| 866 |
+
<section class="content-section glass-effect">
|
| 867 |
+
<h3><i class="fas fa-video"></i> Educational Videos</h3>
|
| 868 |
+
<p>Watch these informative videos to deepen your understanding of deepfake technology and detection methods.</p>
|
| 869 |
+
|
| 870 |
+
<div class="video-grid">
|
| 871 |
+
|
| 872 |
+
<!-- New Video 1: Deepfake Image Detection -->
|
| 873 |
+
<div class="video-card">
|
| 874 |
+
<div class="video-container">
|
| 875 |
+
<iframe src="https://www.youtube-nocookie.com/embed/GMoOCKkcd_w" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 876 |
+
</div>
|
| 877 |
+
<div class="video-info">
|
| 878 |
+
<h4>Deepfake Image Detection Explained</h4>
|
| 879 |
+
<p>A focused introduction on detecting deepfakes</p>
|
| 880 |
+
</div>
|
| 881 |
+
</div>
|
| 882 |
+
|
| 883 |
+
<!-- New Video 2: How to Spot AI‑Generated Images/Videos -->
|
| 884 |
+
<div class="video-card">
|
| 885 |
+
<div class="video-container">
|
| 886 |
+
<iframe src="https://www.youtube-nocookie.com/embed/7akzhpx0EIU" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 887 |
+
</div>
|
| 888 |
+
<div class="video-info">
|
| 889 |
+
<h4>How to Spot Deepfakes & AI‑Generated Content</h4>
|
| 890 |
+
<p>Tips and techniques for identifying AI‑generated images and video content</p>
|
| 891 |
+
</div>
|
| 892 |
+
</div>
|
| 893 |
+
|
| 894 |
+
<!-- Existing Videos -->
|
| 895 |
+
<div class="video-card">
|
| 896 |
+
<div class="video-container">
|
| 897 |
+
<iframe src="https://www.youtube-nocookie.com/embed/mUfJOQKdtAk" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 898 |
+
</div>
|
| 899 |
+
<div class="video-info">
|
| 900 |
+
<h4>What are Deepfakes?</h4>
|
| 901 |
+
<p>An introduction to deepfake technology and its implications</p>
|
| 902 |
+
</div>
|
| 903 |
+
</div>
|
| 904 |
+
|
| 905 |
+
<div class="video-card">
|
| 906 |
+
<div class="video-container">
|
| 907 |
+
<iframe src="https://www.youtube-nocookie.com/embed/gLoI9hAX9dw" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 908 |
+
</div>
|
| 909 |
+
<div class="video-info">
|
| 910 |
+
<h4>How to Spot Deepfakes</h4>
|
| 911 |
+
<p>Learn practical techniques for identifying manipulated media</p>
|
| 912 |
+
</div>
|
| 913 |
+
</div>
|
| 914 |
+
|
| 915 |
+
<div class="video-card">
|
| 916 |
+
<div class="video-container">
|
| 917 |
+
<iframe src="https://www.youtube-nocookie.com/embed/1OqFY_2JE1c" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 918 |
+
</div>
|
| 919 |
+
<div class="video-info">
|
| 920 |
+
<h4>The Threat of Deepfakes</h4>
|
| 921 |
+
<p>Understanding the societal risks and security implications</p>
|
| 922 |
+
</div>
|
| 923 |
+
</div>
|
| 924 |
+
|
| 925 |
+
<div class="video-card">
|
| 926 |
+
<div class="video-container">
|
| 927 |
+
<iframe src="https://www.youtube-nocookie.com/embed/oxXpB9pSETo" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe>
|
| 928 |
+
</div>
|
| 929 |
+
<div class="video-info">
|
| 930 |
+
<h4>Deepfake Detection Technology</h4>
|
| 931 |
+
<p>How AI is being used to combat deepfakes</p>
|
| 932 |
+
</div>
|
| 933 |
+
</div>
|
| 934 |
+
|
| 935 |
+
</div>
|
| 936 |
+
</section>
|
| 937 |
+
|
| 938 |
+
<!-- External Resources -->
|
| 939 |
+
<section class="content-section glass-effect">
|
| 940 |
+
<h3><i class="fas fa-link"></i> Additional Resources</h3>
|
| 941 |
+
<p>Explore these trusted sources for more information about deepfakes and digital media literacy.</p>
|
| 942 |
+
|
| 943 |
+
<div class="resources-grid">
|
| 944 |
+
<div class="resource-card">
|
| 945 |
+
<h4><i class="fas fa-university"></i> MIT Media Lab</h4>
|
| 946 |
+
<p>Research and tools for detecting manipulated media and understanding AI-generated content.</p>
|
| 947 |
+
<a href="https://www.media.mit.edu/projects/detect-fakes/overview/" target="_blank" class="resource-link">
|
| 948 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 949 |
+
</a>
|
| 950 |
+
</div>
|
| 951 |
+
|
| 952 |
+
<div class="resource-card">
|
| 953 |
+
<h4><i class="fas fa-shield-alt"></i> Deepfake Detection Challenge</h4>
|
| 954 |
+
<p>Facebook's initiative to advance deepfake detection technology through competition and research.</p>
|
| 955 |
+
<a href="https://ai.meta.com/datasets/dfdc/" target="_blank" class="resource-link">
|
| 956 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 957 |
+
</a>
|
| 958 |
+
</div>
|
| 959 |
+
|
| 960 |
+
<div class="resource-card">
|
| 961 |
+
<h4><i class="fas fa-balance-scale"></i> FaceOnLive</h4>
|
| 962 |
+
<p>Deepfake & AI-Generated Image Detector is designed to analyze images.</p>
|
| 963 |
+
<a href="https://faceonlive.com/deepfake-detector/" target="_blank" class="resource-link">
|
| 964 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 965 |
+
</a>
|
| 966 |
+
</div>
|
| 967 |
+
|
| 968 |
+
<div class="resource-card">
|
| 969 |
+
<h4><i class="fas fa-book"></i> techtarget</h4>
|
| 970 |
+
<p>What is deepfake technology?</p>
|
| 971 |
+
<a href="https://www.techtarget.com/whatis/definition/deepfake" target="_blank" class="resource-link">
|
| 972 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 973 |
+
</a>
|
| 974 |
+
</div>
|
| 975 |
+
|
| 976 |
+
<div class="resource-card">
|
| 977 |
+
<h4><i class="fas fa-globe"></i> Reality Defender</h4>
|
| 978 |
+
<p>Enterprise-grade deepfake detection platform for organizations and media outlets.</p>
|
| 979 |
+
<a href="https://www.realitydefender.com/" target="_blank" class="resource-link">
|
| 980 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 981 |
+
</a>
|
| 982 |
+
</div>
|
| 983 |
+
|
| 984 |
+
<div class="resource-card">
|
| 985 |
+
<h4><i class="fas fa-newspaper"></i> CNN World</h4>
|
| 986 |
+
<p>Finance worker pays out $25 million after video call with deepfake chief financial officer.</p>
|
| 987 |
+
<a href="https://edition.cnn.com/2024/02/04/asia/deepfake-cfo-scam-hong-kong-intl-hnk" target="_blank" class="resource-link">
|
| 988 |
+
Visit Resource <i class="fas fa-external-link-alt"></i>
|
| 989 |
+
</a>
|
| 990 |
+
</div>
|
| 991 |
+
</div>
|
| 992 |
+
</section>
|
| 993 |
+
</div>
|
| 994 |
+
</div>
|
| 995 |
+
|
| 996 |
+
<!-- Footer -->
|
| 997 |
+
<footer class="app-footer">
|
| 998 |
+
<div class="footer-logo">
|
| 999 |
+
<i class="fas fa-broadcast-tower"></i>
|
| 1000 |
+
<span>Apex Broadcasting Network</span>
|
| 1001 |
+
</div>
|
| 1002 |
+
<div class="footer-text">
|
| 1003 |
+
<p>Advancing media integrity through AI-powered detection technology</p>
|
| 1004 |
+
</div>
|
| 1005 |
+
</footer>
|
| 1006 |
+
</div>
|
| 1007 |
+
|
| 1008 |
+
<script>
|
| 1009 |
+
function switchTab(tabName) {
|
| 1010 |
+
document.querySelectorAll('.tab-content').forEach(tab => tab.classList.remove('active'));
|
| 1011 |
+
document.querySelectorAll('.tab-button').forEach(btn => btn.classList.remove('active'));
|
| 1012 |
+
|
| 1013 |
+
document.getElementById(tabName + '-tab').classList.add('active');
|
| 1014 |
+
event.target.closest('.tab-button').classList.add('active');
|
| 1015 |
+
}
|
| 1016 |
+
|
| 1017 |
+
const fileUploadArea = document.getElementById('fileUploadArea');
|
| 1018 |
+
const imageInput = document.getElementById('imageInput');
|
| 1019 |
+
const detectBtn = document.getElementById('detectBtn');
|
| 1020 |
+
|
| 1021 |
+
fileUploadArea.addEventListener('click', () => imageInput.click());
|
| 1022 |
+
|
| 1023 |
+
imageInput.addEventListener('change', () => {
|
| 1024 |
+
if (imageInput.files.length > 0) {
|
| 1025 |
+
detectBtn.disabled = false;
|
| 1026 |
+
fileUploadArea.classList.add('file-selected');
|
| 1027 |
+
fileUploadArea.querySelector('.upload-text').innerHTML =
|
| 1028 |
+
`<strong>Selected:</strong> ${imageInput.files[0].name}`;
|
| 1029 |
+
}
|
| 1030 |
+
});
|
| 1031 |
+
|
| 1032 |
+
document.querySelector('.upload-form').addEventListener('submit', async function (e) {
|
| 1033 |
+
e.preventDefault();
|
| 1034 |
+
|
| 1035 |
+
if (imageInput.files.length === 0) return;
|
| 1036 |
+
|
| 1037 |
+
detectBtn.disabled = true;
|
| 1038 |
+
detectBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Analyzing...';
|
| 1039 |
+
|
| 1040 |
+
const formData = new FormData();
|
| 1041 |
+
formData.append('image', imageInput.files[0]);
|
| 1042 |
+
|
| 1043 |
+
try {
|
| 1044 |
+
const response = await fetch('/predict', {
|
| 1045 |
+
method: 'POST',
|
| 1046 |
+
body: formData
|
| 1047 |
+
});
|
| 1048 |
+
|
| 1049 |
+
if (!response.ok) throw new Error('Server error');
|
| 1050 |
+
|
| 1051 |
+
const data = await response.json();
|
| 1052 |
+
|
| 1053 |
+
showResults(
|
| 1054 |
+
data.label,
|
| 1055 |
+
data.confidence,
|
| 1056 |
+
imageInput.files[0]
|
| 1057 |
+
);
|
| 1058 |
+
|
| 1059 |
+
} catch (error) {
|
| 1060 |
+
alert('Prediction failed. Please try again.');
|
| 1061 |
+
console.error(error);
|
| 1062 |
+
}
|
| 1063 |
+
|
| 1064 |
+
detectBtn.disabled = false;
|
| 1065 |
+
detectBtn.innerHTML = '<i class="fas fa-search"></i> Analyze Image';
|
| 1066 |
+
});
|
| 1067 |
+
|
| 1068 |
+
function showResults(prediction, confidence, file) {
|
| 1069 |
+
const resultsSection = document.getElementById('resultsSection');
|
| 1070 |
+
const resultCard = document.getElementById('resultCard');
|
| 1071 |
+
const resultIcon = document.getElementById('resultIcon');
|
| 1072 |
+
const predictionText = document.getElementById('predictionText');
|
| 1073 |
+
const confidenceFill = document.getElementById('confidenceFill');
|
| 1074 |
+
const confidenceValue = document.getElementById('confidenceValue');
|
| 1075 |
+
const interpretationText = document.getElementById('interpretationText');
|
| 1076 |
+
const uploadedImage = document.getElementById('uploadedImage');
|
| 1077 |
+
const displayFilename = document.getElementById('displayFilename');
|
| 1078 |
+
|
| 1079 |
+
resultsSection.style.display = 'block';
|
| 1080 |
+
|
| 1081 |
+
if (prediction === 'Real') {
|
| 1082 |
+
resultCard.className = 'result-card real';
|
| 1083 |
+
resultIcon.className = 'fas fa-check-circle';
|
| 1084 |
+
predictionText.textContent = 'Classification: Real';
|
| 1085 |
+
interpretationText.textContent =
|
| 1086 |
+
'The image appears to be authentic based on our analysis.';
|
| 1087 |
+
} else {
|
| 1088 |
+
resultCard.className = 'result-card fake';
|
| 1089 |
+
resultIcon.className = 'fas fa-exclamation-triangle';
|
| 1090 |
+
predictionText.textContent = 'Classification: Fake';
|
| 1091 |
+
interpretationText.textContent =
|
| 1092 |
+
'The image shows signs of manipulation or deepfake generation.';
|
| 1093 |
+
}
|
| 1094 |
+
|
| 1095 |
+
confidenceFill.style.width = confidence + '%';
|
| 1096 |
+
confidenceValue.textContent = confidence + '%';
|
| 1097 |
+
|
| 1098 |
+
const reader = new FileReader();
|
| 1099 |
+
reader.onload = e => uploadedImage.src = e.target.result;
|
| 1100 |
+
reader.readAsDataURL(file);
|
| 1101 |
+
|
| 1102 |
+
displayFilename.textContent = file.name;
|
| 1103 |
+
|
| 1104 |
+
resultsSection.scrollIntoView({ behavior: 'smooth' });
|
| 1105 |
+
}
|
| 1106 |
+
</script>
|
| 1107 |
+
|
| 1108 |
+
</body>
|
| 1109 |
+
</html>
|