Add 3 files
Browse files- README.md +6 -4
- index.html +1021 -19
- prompts.txt +1 -0
README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
colorFrom: red
|
5 |
-
colorTo:
|
6 |
sdk: static
|
7 |
pinned: false
|
|
|
|
|
8 |
---
|
9 |
|
10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
+
title: privateuserh-uaphe-vbeta1-03
|
3 |
+
emoji: 🐳
|
4 |
colorFrom: red
|
5 |
+
colorTo: gray
|
6 |
sdk: static
|
7 |
pinned: false
|
8 |
+
tags:
|
9 |
+
- deepsite
|
10 |
---
|
11 |
|
12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
index.html
CHANGED
@@ -1,19 +1,1021 @@
|
|
1 |
-
<!
|
2 |
-
<html>
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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>UAP Pulse - Concise UFO News</title>
|
7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
8 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
9 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/qrcode.min.js"></script>
|
10 |
+
<!-- Three.js for 3D visualization -->
|
11 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
12 |
+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/controls/OrbitControls.min.js"></script>
|
13 |
+
<style>
|
14 |
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
15 |
+
|
16 |
+
body {
|
17 |
+
font-family: 'Space Grotesk', sans-serif;
|
18 |
+
background-color: #0f172a;
|
19 |
+
color: #e2e8f0;
|
20 |
+
}
|
21 |
+
|
22 |
+
.post-card {
|
23 |
+
background: linear-gradient(145deg, #1e293b, #0f172a);
|
24 |
+
border-left: 3px solid #3b82f6;
|
25 |
+
transition: transform 0.2s;
|
26 |
+
}
|
27 |
+
|
28 |
+
.post-card:hover {
|
29 |
+
transform: translateY(-2px);
|
30 |
+
}
|
31 |
+
|
32 |
+
.nav-item {
|
33 |
+
position: relative;
|
34 |
+
}
|
35 |
+
|
36 |
+
.nav-item::after {
|
37 |
+
content: '';
|
38 |
+
position: absolute;
|
39 |
+
width: 0;
|
40 |
+
height: 2px;
|
41 |
+
bottom: 0;
|
42 |
+
left: 0;
|
43 |
+
background-color: #3b82f6;
|
44 |
+
transition: width 0.3s;
|
45 |
+
}
|
46 |
+
|
47 |
+
.nav-item:hover::after {
|
48 |
+
width: 100%;
|
49 |
+
}
|
50 |
+
|
51 |
+
.typewriter {
|
52 |
+
overflow: hidden;
|
53 |
+
border-right: 2px solid #3b82f6;
|
54 |
+
white-space: nowrap;
|
55 |
+
animation: typing 3.5s steps(40, end), blink-caret 0.75s step-end infinite;
|
56 |
+
}
|
57 |
+
|
58 |
+
@keyframes typing {
|
59 |
+
from { width: 0 }
|
60 |
+
to { width: 100% }
|
61 |
+
}
|
62 |
+
|
63 |
+
@keyframes blink-caret {
|
64 |
+
from, to { border-color: transparent }
|
65 |
+
50% { border-color: #3b82f6 }
|
66 |
+
}
|
67 |
+
|
68 |
+
.glow {
|
69 |
+
text-shadow: 0 0 10px rgba(59, 130, 246, 0.7);
|
70 |
+
}
|
71 |
+
|
72 |
+
/* UAP Scanner Window */
|
73 |
+
.scanner-window {
|
74 |
+
position: relative;
|
75 |
+
width: 100%;
|
76 |
+
height: 400px;
|
77 |
+
background-color: #000;
|
78 |
+
border: 2px solid #3b82f6;
|
79 |
+
border-radius: 8px;
|
80 |
+
overflow: hidden;
|
81 |
+
margin-bottom: 20px;
|
82 |
+
}
|
83 |
+
|
84 |
+
.scanner-overlay {
|
85 |
+
position: absolute;
|
86 |
+
top: 0;
|
87 |
+
left: 0;
|
88 |
+
width: 100%;
|
89 |
+
height: 100%;
|
90 |
+
background: linear-gradient(transparent 70%, rgba(59, 130, 246, 0.1) 100%);
|
91 |
+
pointer-events: none;
|
92 |
+
}
|
93 |
+
|
94 |
+
.scanner-grid {
|
95 |
+
position: absolute;
|
96 |
+
top: 0;
|
97 |
+
left: 0;
|
98 |
+
width: 100%;
|
99 |
+
height: 100%;
|
100 |
+
background-image:
|
101 |
+
linear-gradient(rgba(59, 130, 246, 0.3) 1px, transparent 1px),
|
102 |
+
linear-gradient(90deg, rgba(59, 130, 246, 0.3) 1px, transparent 1px);
|
103 |
+
background-size: 20px 20px;
|
104 |
+
opacity: 0.5;
|
105 |
+
}
|
106 |
+
|
107 |
+
.scanner-crosshair {
|
108 |
+
position: absolute;
|
109 |
+
top: 50%;
|
110 |
+
left: 50%;
|
111 |
+
transform: translate(-50%, -50%);
|
112 |
+
width: 30px;
|
113 |
+
height: 30px;
|
114 |
+
border: 2px solid rgba(255, 0, 0, 0.7);
|
115 |
+
border-radius: 50%;
|
116 |
+
}
|
117 |
+
|
118 |
+
.scanner-crosshair::before, .scanner-crosshair::after {
|
119 |
+
content: '';
|
120 |
+
position: absolute;
|
121 |
+
background-color: rgba(255, 0, 0, 0.7);
|
122 |
+
}
|
123 |
+
|
124 |
+
.scanner-crosshair::before {
|
125 |
+
width: 2px;
|
126 |
+
height: 10px;
|
127 |
+
top: -12px;
|
128 |
+
left: 50%;
|
129 |
+
transform: translateX(-50%);
|
130 |
+
}
|
131 |
+
|
132 |
+
.scanner-crosshair::after {
|
133 |
+
width: 10px;
|
134 |
+
height: 2px;
|
135 |
+
top: 50%;
|
136 |
+
left: -12px;
|
137 |
+
transform: translateY(-50%);
|
138 |
+
}
|
139 |
+
|
140 |
+
.scanner-coordinates {
|
141 |
+
position: absolute;
|
142 |
+
bottom: 10px;
|
143 |
+
left: 10px;
|
144 |
+
background-color: rgba(0, 0, 0, 0.7);
|
145 |
+
padding: 5px 10px;
|
146 |
+
border-radius: 4px;
|
147 |
+
font-family: monospace;
|
148 |
+
color: #3b82f6;
|
149 |
+
}
|
150 |
+
|
151 |
+
.scanner-controls {
|
152 |
+
position: absolute;
|
153 |
+
bottom: 10px;
|
154 |
+
right: 10px;
|
155 |
+
display: flex;
|
156 |
+
gap: 10px;
|
157 |
+
}
|
158 |
+
|
159 |
+
.scanner-btn {
|
160 |
+
background-color: rgba(59, 130, 246, 0.7);
|
161 |
+
color: white;
|
162 |
+
border: none;
|
163 |
+
border-radius: 50%;
|
164 |
+
width: 40px;
|
165 |
+
height: 40px;
|
166 |
+
display: flex;
|
167 |
+
align-items: center;
|
168 |
+
justify-content: center;
|
169 |
+
cursor: pointer;
|
170 |
+
transition: all 0.2s;
|
171 |
+
}
|
172 |
+
|
173 |
+
.scanner-btn:hover {
|
174 |
+
background-color: rgba(59, 130, 246, 1);
|
175 |
+
transform: scale(1.1);
|
176 |
+
}
|
177 |
+
|
178 |
+
.scanner-btn.active {
|
179 |
+
background-color: rgba(239, 68, 68, 0.7);
|
180 |
+
}
|
181 |
+
|
182 |
+
.scanner-btn.active:hover {
|
183 |
+
background-color: rgba(239, 68, 68, 1);
|
184 |
+
}
|
185 |
+
|
186 |
+
.uap-marker {
|
187 |
+
position: absolute;
|
188 |
+
width: 10px;
|
189 |
+
height: 10px;
|
190 |
+
background-color: red;
|
191 |
+
border-radius: 50%;
|
192 |
+
transform: translate(-50%, -50%);
|
193 |
+
box-shadow: 0 0 10px red;
|
194 |
+
animation: pulse 1.5s infinite;
|
195 |
+
}
|
196 |
+
|
197 |
+
@keyframes pulse {
|
198 |
+
0% { transform: translate(-50%, -50%) scale(1); opacity: 1; }
|
199 |
+
50% { transform: translate(-50%, -50%) scale(1.5); opacity: 0.7; }
|
200 |
+
100% { transform: translate(-50%, -50%) scale(1); opacity: 1; }
|
201 |
+
}
|
202 |
+
|
203 |
+
.uap-info {
|
204 |
+
position: absolute;
|
205 |
+
background-color: rgba(0, 0, 0, 0.8);
|
206 |
+
border: 1px solid #3b82f6;
|
207 |
+
border-radius: 4px;
|
208 |
+
padding: 5px;
|
209 |
+
color: white;
|
210 |
+
font-size: 12px;
|
211 |
+
pointer-events: none;
|
212 |
+
transform: translate(15px, -50%);
|
213 |
+
min-width: 120px;
|
214 |
+
display: none;
|
215 |
+
}
|
216 |
+
|
217 |
+
.uap-info::before {
|
218 |
+
content: '';
|
219 |
+
position: absolute;
|
220 |
+
left: -10px;
|
221 |
+
top: 50%;
|
222 |
+
transform: translateY(-50%);
|
223 |
+
border-width: 5px;
|
224 |
+
border-style: solid;
|
225 |
+
border-color: transparent #3b82f6 transparent transparent;
|
226 |
+
}
|
227 |
+
|
228 |
+
/* 3D Viewer */
|
229 |
+
.viewer-3d {
|
230 |
+
width: 100%;
|
231 |
+
height: 400px;
|
232 |
+
background-color: #000;
|
233 |
+
border: 2px solid #3b82f6;
|
234 |
+
border-radius: 8px;
|
235 |
+
margin-top: 20px;
|
236 |
+
position: relative;
|
237 |
+
}
|
238 |
+
|
239 |
+
.viewer-controls {
|
240 |
+
position: absolute;
|
241 |
+
bottom: 10px;
|
242 |
+
left: 10px;
|
243 |
+
z-index: 100;
|
244 |
+
display: flex;
|
245 |
+
gap: 10px;
|
246 |
+
}
|
247 |
+
|
248 |
+
.atmosphere-levels {
|
249 |
+
position: absolute;
|
250 |
+
right: 10px;
|
251 |
+
top: 10px;
|
252 |
+
background-color: rgba(0, 0, 0, 0.7);
|
253 |
+
padding: 10px;
|
254 |
+
border-radius: 4px;
|
255 |
+
color: white;
|
256 |
+
font-size: 12px;
|
257 |
+
z-index: 100;
|
258 |
+
}
|
259 |
+
|
260 |
+
.atmosphere-level {
|
261 |
+
margin-bottom: 5px;
|
262 |
+
padding-left: 15px;
|
263 |
+
position: relative;
|
264 |
+
}
|
265 |
+
|
266 |
+
.atmosphere-level::before {
|
267 |
+
content: '';
|
268 |
+
position: absolute;
|
269 |
+
left: 0;
|
270 |
+
top: 50%;
|
271 |
+
transform: translateY(-50%);
|
272 |
+
width: 10px;
|
273 |
+
height: 10px;
|
274 |
+
border-radius: 50%;
|
275 |
+
}
|
276 |
+
|
277 |
+
.troposphere::before { background-color: #3b82f6; }
|
278 |
+
.stratosphere::before { background-color: #10b981; }
|
279 |
+
.mesosphere::before { background-color: #f59e0b; }
|
280 |
+
.thermosphere::before { background-color: #ef4444; }
|
281 |
+
.exosphere::before { background-color: #8b5cf6; }
|
282 |
+
|
283 |
+
/* Shape icons */
|
284 |
+
.shape-icon {
|
285 |
+
width: 40px;
|
286 |
+
height: 40px;
|
287 |
+
display: flex;
|
288 |
+
align-items: center;
|
289 |
+
justify-content: center;
|
290 |
+
margin: 0 auto;
|
291 |
+
}
|
292 |
+
|
293 |
+
.triangle {
|
294 |
+
width: 0;
|
295 |
+
height: 0;
|
296 |
+
border-left: 20px solid transparent;
|
297 |
+
border-right: 20px solid transparent;
|
298 |
+
border-bottom: 35px solid transparent;
|
299 |
+
position: relative;
|
300 |
+
}
|
301 |
+
|
302 |
+
.triangle::before {
|
303 |
+
content: '';
|
304 |
+
position: absolute;
|
305 |
+
top: 5px;
|
306 |
+
left: -20px;
|
307 |
+
width: 0;
|
308 |
+
height: 0;
|
309 |
+
border-left: 20px solid transparent;
|
310 |
+
border-right: 20px solid transparent;
|
311 |
+
border-bottom: 35px solid white;
|
312 |
+
filter: drop-shadow(0 0 5px rgba(255, 255, 255, 0.9));
|
313 |
+
}
|
314 |
+
|
315 |
+
.triangle::after {
|
316 |
+
content: '';
|
317 |
+
position: absolute;
|
318 |
+
top: 6px;
|
319 |
+
left: -18px;
|
320 |
+
width: 0;
|
321 |
+
height: 0;
|
322 |
+
border-left: 18px solid transparent;
|
323 |
+
border-right: 18px solid transparent;
|
324 |
+
border-bottom: 32px solid #1e293b;
|
325 |
+
}
|
326 |
+
|
327 |
+
/* Add other shape styles from original code here */
|
328 |
+
|
329 |
+
/* Add all other existing styles from original code here */
|
330 |
+
</style>
|
331 |
+
</head>
|
332 |
+
<body class="min-h-screen">
|
333 |
+
<!-- Header -->
|
334 |
+
<header class="bg-gradient-to-r from-blue-900 to-slate-900 shadow-lg">
|
335 |
+
<div class="container mx-auto px-4 py-6">
|
336 |
+
<div class="flex flex-col md:flex-row justify-between items-center">
|
337 |
+
<div class="flex items-center mb-4 md:mb-0">
|
338 |
+
<i class="fas fa-ufo text-3xl text-blue-400 mr-3"></i>
|
339 |
+
<h1 class="text-2xl md:text-3xl font-bold text-white">
|
340 |
+
<span class="typewriter glow">UAP PULSE</span>
|
341 |
+
</h1>
|
342 |
+
</div>
|
343 |
+
<nav class="flex space-x-6">
|
344 |
+
<a href="#" class="nav-item text-blue-300 hover:text-white py-2">Latest</a>
|
345 |
+
<a href="#" class="nav-item text-blue-300 hover:text-white py-2">Reports</a>
|
346 |
+
<a href="#" class="nav-item text-blue-300 hover:text-white py-2">History</a>
|
347 |
+
<a href="#" class="nav-item text-blue-300 hover:text-white py-2">Resources</a>
|
348 |
+
</nav>
|
349 |
+
</div>
|
350 |
+
</div>
|
351 |
+
</header>
|
352 |
+
|
353 |
+
<!-- Main Content -->
|
354 |
+
<main class="container mx-auto px-4 py-8">
|
355 |
+
<!-- UAP Scanner Section -->
|
356 |
+
<section class="mb-12">
|
357 |
+
<h2 class="text-xl font-semibold text-white mb-4 flex items-center">
|
358 |
+
<i class="fas fa-satellite-dish text-blue-400 mr-2"></i> Live UAP Scanner
|
359 |
+
</h2>
|
360 |
+
|
361 |
+
<div class="scanner-window" id="scannerWindow">
|
362 |
+
<div class="scanner-grid"></div>
|
363 |
+
<div class="scanner-overlay"></div>
|
364 |
+
<div class="scanner-crosshair"></div>
|
365 |
+
|
366 |
+
<!-- UAP markers will be added here dynamically -->
|
367 |
+
|
368 |
+
<div class="scanner-coordinates" id="scannerCoords">
|
369 |
+
Lat: 0.0000° | Long: 0.0000° | Alt: 0m
|
370 |
+
</div>
|
371 |
+
|
372 |
+
<div class="scanner-controls">
|
373 |
+
<button class="scanner-btn" id="startScanner" title="Start Scanner">
|
374 |
+
<i class="fas fa-play"></i>
|
375 |
+
</button>
|
376 |
+
<button class="scanner-btn" id="stopScanner" title="Stop Scanner">
|
377 |
+
<i class="fas fa-stop"></i>
|
378 |
+
</button>
|
379 |
+
<button class="scanner-btn" id="captureUAP" title="Capture UAP">
|
380 |
+
<i class="fas fa-camera"></i>
|
381 |
+
</button>
|
382 |
+
</div>
|
383 |
+
|
384 |
+
<video id="scannerVideo" autoplay muted playsinline style="display: none;"></video>
|
385 |
+
<canvas id="scannerCanvas" style="display: none;"></canvas>
|
386 |
+
</div>
|
387 |
+
|
388 |
+
<!-- 3D Viewer -->
|
389 |
+
<div class="viewer-3d" id="viewer3d">
|
390 |
+
<div class="viewer-controls">
|
391 |
+
<button class="scanner-btn" id="resetView" title="Reset View">
|
392 |
+
<i class="fas fa-crosshairs"></i>
|
393 |
+
</button>
|
394 |
+
<button class="scanner-btn" id="toggleOrbit" title="Toggle Orbit Controls">
|
395 |
+
<i class="fas fa-globe"></i>
|
396 |
+
</button>
|
397 |
+
</div>
|
398 |
+
|
399 |
+
<div class="atmosphere-levels">
|
400 |
+
<div class="atmosphere-level troposphere">Troposphere (0-12km)</div>
|
401 |
+
<div class="atmosphere-level stratosphere">Stratosphere (12-50km)</div>
|
402 |
+
<div class="atmosphere-level mesosphere">Mesosphere (50-85km)</div>
|
403 |
+
<div class="atmosphere-level thermosphere">Thermosphere (85-600km)</div>
|
404 |
+
<div class="atmosphere-level exosphere">Exosphere (600km+)</div>
|
405 |
+
</div>
|
406 |
+
</div>
|
407 |
+
|
408 |
+
<!-- Detected UAPs List -->
|
409 |
+
<div class="mt-6 bg-slate-800/50 rounded-lg p-4 border border-slate-700">
|
410 |
+
<h3 class="font-medium text-white mb-3 flex items-center">
|
411 |
+
<i class="fas fa-list-ul text-blue-400 mr-2"></i> Detected UAPs
|
412 |
+
</h3>
|
413 |
+
<div class="overflow-x-auto">
|
414 |
+
<table class="min-w-full divide-y divide-slate-700">
|
415 |
+
<thead>
|
416 |
+
<tr>
|
417 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">ID</th>
|
418 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">Shape</th>
|
419 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">Coordinates</th>
|
420 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">Altitude</th>
|
421 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">Atmosphere</th>
|
422 |
+
<th class="px-4 py-2 text-left text-xs font-medium text-slate-300 uppercase tracking-wider">Actions</th>
|
423 |
+
</tr>
|
424 |
+
</thead>
|
425 |
+
<tbody id="uapTableBody" class="divide-y divide-slate-700">
|
426 |
+
<!-- UAP entries will be added here dynamically -->
|
427 |
+
</tbody>
|
428 |
+
</table>
|
429 |
+
</div>
|
430 |
+
</div>
|
431 |
+
</section>
|
432 |
+
|
433 |
+
<!-- Rest of the original content sections -->
|
434 |
+
<!-- Featured Post -->
|
435 |
+
<section class="mb-12">
|
436 |
+
<div class="bg-gradient-to-br from-blue-900/50 to-slate-900/50 rounded-xl p-6 shadow-xl border border-blue-800/30">
|
437 |
+
<div class="flex items-center mb-4">
|
438 |
+
<span class="bg-blue-500 text-white text-xs font-semibold px-2.5 py-0.5 rounded">BREAKING</span>
|
439 |
+
<span class="text-blue-300 text-sm ml-2">June 2024</span>
|
440 |
+
</div>
|
441 |
+
<h2 class="text-xl md:text-2xl font-bold text-white mb-3">Pentagon confirms new UAP footage from military pilots</h2>
|
442 |
+
<p class="text-blue-100 mb-4">"The footage shows unidentified objects exhibiting flight characteristics beyond known technology" - DoD spokesperson. Analysis ongoing.</p>
|
443 |
+
<div class="flex justify-between items-center">
|
444 |
+
<span class="text-xs text-blue-300">Source: Defense.gov</span>
|
445 |
+
<button class="text-blue-400 hover:text-blue-200 text-sm flex items-center" onclick="generateQR('Pentagon confirms new UAP footage from military pilots', 'https://uap-pulse.example.com/posts/2024-pentagon-footage')">
|
446 |
+
<i class="fas fa-qrcode mr-1"></i> QR Code
|
447 |
+
</button>
|
448 |
+
</div>
|
449 |
+
</div>
|
450 |
+
</section>
|
451 |
+
|
452 |
+
<!-- Include all other original sections here -->
|
453 |
+
|
454 |
+
</main>
|
455 |
+
|
456 |
+
<!-- Footer -->
|
457 |
+
<footer class="bg-slate-900 mt-16 py-8 border-t border-slate-800">
|
458 |
+
<div class="container mx-auto px-4">
|
459 |
+
<div class="flex flex-col md:flex-row justify-between items-center">
|
460 |
+
<div class="mb-4 md:mb-0">
|
461 |
+
<div class="flex items-center">
|
462 |
+
<i class="fas fa-ufo text-2xl text-blue-400 mr-2"></i>
|
463 |
+
<span class="text-xl font-bold text-white">UAP PULSE</span>
|
464 |
+
</div>
|
465 |
+
<p class="text-slate-400 text-sm mt-1">Concise updates on unidentified aerial phenomena</p>
|
466 |
+
</div>
|
467 |
+
|
468 |
+
<div class="flex space-x-6">
|
469 |
+
<a href="#" class="text-slate-400 hover:text-blue-300">
|
470 |
+
<i class="fab fa-twitter"></i>
|
471 |
+
</a>
|
472 |
+
<a href="#" class="text-slate-400 hover:text-blue-300">
|
473 |
+
<i class="fab fa-facebook"></i>
|
474 |
+
</a>
|
475 |
+
<a href="#" class="text-slate-400 hover:text-blue-300">
|
476 |
+
<i class="fab fa-reddit"></i>
|
477 |
+
</a>
|
478 |
+
<a href="#" class="text-slate-400 hover:text-blue-300">
|
479 |
+
<i class="fas fa-rss"></i>
|
480 |
+
</a>
|
481 |
+
</div>
|
482 |
+
</div>
|
483 |
+
|
484 |
+
<div class="border-t border-slate-800 mt-6 pt-6 flex flex-col md:flex-row justify-between items-center">
|
485 |
+
<p class="text-slate-500 text-sm mb-4 md:mb-0">© 2025 UAP Pulse. All rights reserved. Sponsored by SM+</p>
|
486 |
+
<div class="flex space-x-4">
|
487 |
+
<a href="#" class="text-slate-400 hover:text-blue-300 text-sm">Privacy</a>
|
488 |
+
<a href="#" class="text-slate-400 hover:text-blue-300 text-sm">Terms</a>
|
489 |
+
<a href="#" class="text-slate-400 hover:text-blue-300 text-sm">Contact</a>
|
490 |
+
<a href="#" class="text-slate-400 hover:text-blue-300 text-sm">Submit Report</a>
|
491 |
+
</div>
|
492 |
+
</div>
|
493 |
+
</div>
|
494 |
+
</footer>
|
495 |
+
|
496 |
+
<!-- Include all original modals and popups here -->
|
497 |
+
|
498 |
+
<script>
|
499 |
+
// UAP Scanner and 3D Viewer functionality
|
500 |
+
document.addEventListener('DOMContentLoaded', function() {
|
501 |
+
// Scanner variables
|
502 |
+
const scannerWindow = document.getElementById('scannerWindow');
|
503 |
+
const scannerVideo = document.getElementById('scannerVideo');
|
504 |
+
const scannerCanvas = document.getElementById('scannerCanvas');
|
505 |
+
const scannerCoords = document.getElementById('scannerCoords');
|
506 |
+
const startScannerBtn = document.getElementById('startScanner');
|
507 |
+
const stopScannerBtn = document.getElementById('stopScanner');
|
508 |
+
const captureUAPBtn = document.getElementById('captureUAP');
|
509 |
+
const uapTableBody = document.getElementById('uapTableBody');
|
510 |
+
|
511 |
+
// 3D Viewer variables
|
512 |
+
const viewer3d = document.getElementById('viewer3d');
|
513 |
+
const resetViewBtn = document.getElementById('resetView');
|
514 |
+
const toggleOrbitBtn = document.getElementById('toggleOrbit');
|
515 |
+
|
516 |
+
// Three.js variables
|
517 |
+
let scene, camera, renderer, controls;
|
518 |
+
let uapObjects = [];
|
519 |
+
let orbitEnabled = true;
|
520 |
+
|
521 |
+
// UAP detection variables
|
522 |
+
let detectedUAPs = [];
|
523 |
+
let scannerActive = false;
|
524 |
+
let scanInterval;
|
525 |
+
let frameCount = 0;
|
526 |
+
|
527 |
+
// Initialize 3D viewer
|
528 |
+
function init3DViewer() {
|
529 |
+
// Create scene
|
530 |
+
scene = new THREE.Scene();
|
531 |
+
scene.background = new THREE.Color(0x000000);
|
532 |
+
|
533 |
+
// Create camera
|
534 |
+
camera = new THREE.PerspectiveCamera(75, viewer3d.clientWidth / viewer3d.clientHeight, 0.1, 1000);
|
535 |
+
camera.position.z = 50;
|
536 |
+
|
537 |
+
// Create renderer
|
538 |
+
renderer = new THREE.WebGLRenderer({ antialias: true });
|
539 |
+
renderer.setSize(viewer3d.clientWidth, viewer3d.clientHeight);
|
540 |
+
viewer3d.appendChild(renderer.domElement);
|
541 |
+
|
542 |
+
// Add controls
|
543 |
+
controls = new THREE.OrbitControls(camera, renderer.domElement);
|
544 |
+
controls.enableDamping = true;
|
545 |
+
controls.dampingFactor = 0.25;
|
546 |
+
|
547 |
+
// Add ambient light
|
548 |
+
const ambientLight = new THREE.AmbientLight(0x404040);
|
549 |
+
scene.add(ambientLight);
|
550 |
+
|
551 |
+
// Add directional light
|
552 |
+
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
|
553 |
+
directionalLight.position.set(1, 1, 1);
|
554 |
+
scene.add(directionalLight);
|
555 |
+
|
556 |
+
// Add Earth sphere
|
557 |
+
const geometry = new THREE.SphereGeometry(15, 32, 32);
|
558 |
+
const material = new THREE.MeshPhongMaterial({
|
559 |
+
color: 0x3b82f6,
|
560 |
+
specular: 0x111111,
|
561 |
+
shininess: 30
|
562 |
+
});
|
563 |
+
const earth = new THREE.Mesh(geometry, material);
|
564 |
+
scene.add(earth);
|
565 |
+
|
566 |
+
// Add atmosphere levels as transparent spheres
|
567 |
+
const addAtmosphereLayer = (radius, color, opacity) => {
|
568 |
+
const layerGeometry = new THREE.SphereGeometry(radius, 32, 32);
|
569 |
+
const layerMaterial = new THREE.MeshBasicMaterial({
|
570 |
+
color: color,
|
571 |
+
side: THREE.BackSide,
|
572 |
+
transparent: true,
|
573 |
+
opacity: opacity
|
574 |
+
});
|
575 |
+
const layer = new THREE.Mesh(layerGeometry, layerMaterial);
|
576 |
+
scene.add(layer);
|
577 |
+
};
|
578 |
+
|
579 |
+
// Add atmosphere layers (scaled down for visualization)
|
580 |
+
addAtmosphereLayer(15.5, 0x3b82f6, 0.2); // Troposphere
|
581 |
+
addAtmosphereLayer(16, 0x10b981, 0.15); // Stratosphere
|
582 |
+
addAtmosphereLayer(16.5, 0xf59e0b, 0.1); // Mesosphere
|
583 |
+
addAtmosphereLayer(17.5, 0xef4444, 0.08); // Thermosphere
|
584 |
+
addAtmosphereLayer(20, 0x8b5cf6, 0.05); // Exosphere
|
585 |
+
|
586 |
+
// Handle window resize
|
587 |
+
window.addEventListener('resize', () => {
|
588 |
+
camera.aspect = viewer3d.clientWidth / viewer3d.clientHeight;
|
589 |
+
camera.updateProjectionMatrix();
|
590 |
+
renderer.setSize(viewer3d.clientWidth, viewer3d.clientHeight);
|
591 |
+
});
|
592 |
+
|
593 |
+
// Animation loop
|
594 |
+
function animate() {
|
595 |
+
requestAnimationFrame(animate);
|
596 |
+
|
597 |
+
if (orbitEnabled) {
|
598 |
+
controls.update();
|
599 |
+
}
|
600 |
+
|
601 |
+
renderer.render(scene, camera);
|
602 |
+
}
|
603 |
+
|
604 |
+
animate();
|
605 |
+
}
|
606 |
+
|
607 |
+
// Initialize scanner
|
608 |
+
function initScanner() {
|
609 |
+
// Set up scanner buttons
|
610 |
+
startScannerBtn.addEventListener('click', startScanner);
|
611 |
+
stopScannerBtn.addEventListener('click', stopScanner);
|
612 |
+
captureUAPBtn.addEventListener('click', captureUAP);
|
613 |
+
|
614 |
+
// Set up 3D viewer buttons
|
615 |
+
resetViewBtn.addEventListener('click', resetView);
|
616 |
+
toggleOrbitBtn.addEventListener('click', toggleOrbitControls);
|
617 |
+
|
618 |
+
// Initialize 3D viewer
|
619 |
+
init3DViewer();
|
620 |
+
}
|
621 |
+
|
622 |
+
// Start scanner
|
623 |
+
function startScanner() {
|
624 |
+
if (scannerActive) return;
|
625 |
+
|
626 |
+
// Request camera access
|
627 |
+
navigator.mediaDevices.getUserMedia({ video: true })
|
628 |
+
.then(function(stream) {
|
629 |
+
scannerVideo.srcObject = stream;
|
630 |
+
scannerVideo.style.display = 'block';
|
631 |
+
scannerActive = true;
|
632 |
+
startScannerBtn.classList.add('active');
|
633 |
+
|
634 |
+
// Start detection loop
|
635 |
+
scanInterval = setInterval(detectUAPs, 100);
|
636 |
+
})
|
637 |
+
.catch(function(err) {
|
638 |
+
console.error("Error accessing camera: ", err);
|
639 |
+
alert("Could not access camera. Please ensure you've granted camera permissions.");
|
640 |
+
});
|
641 |
+
}
|
642 |
+
|
643 |
+
// Stop scanner
|
644 |
+
function stopScanner() {
|
645 |
+
if (!scannerActive) return;
|
646 |
+
|
647 |
+
clearInterval(scanInterval);
|
648 |
+
const stream = scannerVideo.srcObject;
|
649 |
+
const tracks = stream.getTracks();
|
650 |
+
|
651 |
+
tracks.forEach(function(track) {
|
652 |
+
track.stop();
|
653 |
+
});
|
654 |
+
|
655 |
+
scannerVideo.srcObject = null;
|
656 |
+
scannerVideo.style.display = 'none';
|
657 |
+
scannerActive = false;
|
658 |
+
startScannerBtn.classList.remove('active');
|
659 |
+
|
660 |
+
// Clear any existing UAP markers
|
661 |
+
clearUAPMarkers();
|
662 |
+
}
|
663 |
+
|
664 |
+
// Detect UAPs in video feed (simulated)
|
665 |
+
function detectUAPs() {
|
666 |
+
if (!scannerActive) return;
|
667 |
+
|
668 |
+
frameCount++;
|
669 |
+
|
670 |
+
// Simulate UAP detection (in a real app, this would use computer vision)
|
671 |
+
if (frameCount % 30 === 0) {
|
672 |
+
// Random chance to detect a UAP
|
673 |
+
if (Math.random() > 0.7) {
|
674 |
+
const uapId = 'UAP-' + Date.now().toString().slice(-4);
|
675 |
+
const shapes = ['triangle', 'circle', 'square', 'cylinder', 'chevron', 'tictac'];
|
676 |
+
const shape = shapes[Math.floor(Math.random() * shapes.length)];
|
677 |
+
|
678 |
+
// Random position in scanner window
|
679 |
+
const x = Math.random() * 80 + 10; // 10-90%
|
680 |
+
const y = Math.random() * 80 + 10; // 10-90%
|
681 |
+
|
682 |
+
// Random altitude (0-1000km)
|
683 |
+
const altitude = Math.random() * 1000;
|
684 |
+
|
685 |
+
// Determine atmosphere layer
|
686 |
+
let atmosphere, atmosphereColor;
|
687 |
+
if (altitude < 12) {
|
688 |
+
atmosphere = 'Troposphere';
|
689 |
+
atmosphereColor = '#3b82f6';
|
690 |
+
} else if (altitude < 50) {
|
691 |
+
atmosphere = 'Stratosphere';
|
692 |
+
atmosphereColor = '#10b981';
|
693 |
+
} else if (altitude < 85) {
|
694 |
+
atmosphere = 'Mesosphere';
|
695 |
+
atmosphereColor = '#f59e0b';
|
696 |
+
} else if (altitude < 600) {
|
697 |
+
atmosphere = 'Thermosphere';
|
698 |
+
atmosphereColor = '#ef4444';
|
699 |
+
} else {
|
700 |
+
atmosphere = 'Exosphere';
|
701 |
+
atmosphereColor = '#8b5cf6';
|
702 |
+
}
|
703 |
+
|
704 |
+
// Generate random coordinates near user's location (simulated)
|
705 |
+
const lat = (Math.random() * 2 - 1) * 5 + 40; // ~40°N ±5°
|
706 |
+
const long = (Math.random() * 2 - 1) * 5 + (-70); // ~70°W ±5°
|
707 |
+
|
708 |
+
// Create UAP object
|
709 |
+
const uap = {
|
710 |
+
id: uapId,
|
711 |
+
shape: shape,
|
712 |
+
x: x,
|
713 |
+
y: y,
|
714 |
+
lat: lat,
|
715 |
+
long: long,
|
716 |
+
altitude: altitude.toFixed(2),
|
717 |
+
atmosphere: atmosphere,
|
718 |
+
atmosphereColor: atmosphereColor,
|
719 |
+
timestamp: new Date().toLocaleTimeString()
|
720 |
+
};
|
721 |
+
|
722 |
+
detectedUAPs.push(uap);
|
723 |
+
addUAPMarker(uap);
|
724 |
+
addUAPToTable(uap);
|
725 |
+
addUAPTo3DViewer(uap);
|
726 |
+
|
727 |
+
// Update coordinates display
|
728 |
+
scannerCoords.textContent = `Lat: ${lat.toFixed(4)}° | Long: ${long.toFixed(4)}° | Alt: ${altitude.toFixed(2)}km | ${atmosphere}`;
|
729 |
+
}
|
730 |
+
}
|
731 |
+
|
732 |
+
// Simulate movement of existing UAPs
|
733 |
+
detectedUAPs.forEach(uap => {
|
734 |
+
// Small random movement
|
735 |
+
uap.x += (Math.random() - 0.5) * 0.5;
|
736 |
+
uap.y += (Math.random() - 0.5) * 0.5;
|
737 |
+
|
738 |
+
// Update marker position
|
739 |
+
const marker = document.querySelector(`.uap-marker[data-id="${uap.id}"]`);
|
740 |
+
if (marker) {
|
741 |
+
marker.style.left = `${uap.x}%`;
|
742 |
+
marker.style.top = `${uap.y}%`;
|
743 |
+
}
|
744 |
+
|
745 |
+
// Update 3D position
|
746 |
+
updateUAPIn3DViewer(uap);
|
747 |
+
});
|
748 |
+
}
|
749 |
+
|
750 |
+
// Add UAP marker to scanner view
|
751 |
+
function addUAPMarker(uap) {
|
752 |
+
clearUAPMarkers(); // Clear previous markers for demo purposes
|
753 |
+
|
754 |
+
const marker = document.createElement('div');
|
755 |
+
marker.className = 'uap-marker';
|
756 |
+
marker.dataset.id = uap.id;
|
757 |
+
marker.style.left = `${uap.x}%`;
|
758 |
+
marker.style.top = `${uap.y}%`;
|
759 |
+
marker.style.backgroundColor = uap.atmosphereColor;
|
760 |
+
marker.style.boxShadow = `0 0 10px ${uap.atmosphereColor}`;
|
761 |
+
|
762 |
+
// Add info tooltip
|
763 |
+
const info = document.createElement('div');
|
764 |
+
info.className = 'uap-info';
|
765 |
+
info.innerHTML = `
|
766 |
+
<strong>${uap.id}</strong><br>
|
767 |
+
Shape: ${uap.shape}<br>
|
768 |
+
Alt: ${uap.altitude}km<br>
|
769 |
+
${uap.atmosphere}
|
770 |
+
`;
|
771 |
+
marker.appendChild(info);
|
772 |
+
|
773 |
+
// Show info on hover
|
774 |
+
marker.addEventListener('mouseenter', () => {
|
775 |
+
info.style.display = 'block';
|
776 |
+
});
|
777 |
+
|
778 |
+
marker.addEventListener('mouseleave', () => {
|
779 |
+
info.style.display = 'none';
|
780 |
+
});
|
781 |
+
|
782 |
+
scannerWindow.appendChild(marker);
|
783 |
+
}
|
784 |
+
|
785 |
+
// Clear all UAP markers
|
786 |
+
function clearUAPMarkers() {
|
787 |
+
document.querySelectorAll('.uap-marker').forEach(marker => {
|
788 |
+
marker.remove();
|
789 |
+
});
|
790 |
+
}
|
791 |
+
|
792 |
+
// Add UAP to table
|
793 |
+
function addUAPToTable(uap) {
|
794 |
+
const row = document.createElement('tr');
|
795 |
+
row.className = 'hover:bg-slate-700/50';
|
796 |
+
row.innerHTML = `
|
797 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm font-medium text-white">${uap.id}</td>
|
798 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm text-slate-300">${uap.shape}</td>
|
799 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm text-slate-300">${uap.lat.toFixed(4)}°, ${uap.long.toFixed(4)}°</td>
|
800 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm text-slate-300">${uap.altitude}km</td>
|
801 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm text-slate-300">
|
802 |
+
<span class="inline-block w-3 h-3 rounded-full mr-1" style="background-color: ${uap.atmosphereColor}"></span>
|
803 |
+
${uap.atmosphere}
|
804 |
+
</td>
|
805 |
+
<td class="px-4 py-2 whitespace-nowrap text-sm text-slate-300">
|
806 |
+
<button class="text-blue-400 hover:text-blue-200 mr-2" onclick="focusUAP('${uap.id}')">
|
807 |
+
<i class="fas fa-search"></i>
|
808 |
+
</button>
|
809 |
+
<button class="text-red-400 hover:text-red-200" onclick="removeUAP('${uap.id}')">
|
810 |
+
<i class="fas fa-trash"></i>
|
811 |
+
</button>
|
812 |
+
</td>
|
813 |
+
`;
|
814 |
+
uapTableBody.appendChild(row);
|
815 |
+
}
|
816 |
+
|
817 |
+
// Add UAP to 3D viewer
|
818 |
+
function addUAPTo3DViewer(uap) {
|
819 |
+
// Scale down altitude for visualization (Earth radius = 15 units)
|
820 |
+
const scaledAltitude = parseFloat(uap.altitude) / 1000 * 15 + 15;
|
821 |
+
|
822 |
+
// Convert lat/long to 3D position
|
823 |
+
const phi = (90 - uap.lat) * (Math.PI / 180);
|
824 |
+
const theta = (uap.long + 180) * (Math.PI / 180);
|
825 |
+
|
826 |
+
const x = scaledAltitude * Math.sin(phi) * Math.cos(theta);
|
827 |
+
const y = scaledAltitude * Math.cos(phi);
|
828 |
+
const z = scaledAltitude * Math.sin(phi) * Math.sin(theta);
|
829 |
+
|
830 |
+
// Create UAP object based on shape
|
831 |
+
let geometry, material;
|
832 |
+
|
833 |
+
switch(uap.shape) {
|
834 |
+
case 'triangle':
|
835 |
+
geometry = new THREE.ConeGeometry(0.5, 1, 3);
|
836 |
+
break;
|
837 |
+
case 'circle':
|
838 |
+
geometry = new THREE.SphereGeometry(0.5);
|
839 |
+
break;
|
840 |
+
case 'square':
|
841 |
+
geometry = new THREE.BoxGeometry(0.8, 0.8, 0.8);
|
842 |
+
break;
|
843 |
+
case 'cylinder':
|
844 |
+
geometry = new THREE.CylinderGeometry(0.4, 0.4, 1, 32);
|
845 |
+
break;
|
846 |
+
case 'chevron':
|
847 |
+
// Create a chevron shape using a custom geometry
|
848 |
+
const chevronShape = new THREE.Shape();
|
849 |
+
chevronShape.moveTo(-0.5, 0.5);
|
850 |
+
chevronShape.lineTo(0, -0.5);
|
851 |
+
chevronShape.lineTo(0.5, 0.5);
|
852 |
+
geometry = new THREE.ExtrudeGeometry(chevronShape, {
|
853 |
+
depth: 0.2,
|
854 |
+
bevelEnabled: false
|
855 |
+
});
|
856 |
+
break;
|
857 |
+
case 'tictac':
|
858 |
+
geometry = new THREE.CapsuleGeometry(0.3, 1, 4, 8);
|
859 |
+
break;
|
860 |
+
default:
|
861 |
+
geometry = new THREE.SphereGeometry(0.5);
|
862 |
+
}
|
863 |
+
|
864 |
+
material = new THREE.MeshPhongMaterial({
|
865 |
+
color: new THREE.Color(uap.atmosphereColor),
|
866 |
+
emissive: new THREE.Color(uap.atmosphereColor),
|
867 |
+
emissiveIntensity: 0.5,
|
868 |
+
specular: 0x111111,
|
869 |
+
shininess: 30
|
870 |
+
});
|
871 |
+
|
872 |
+
const uapObject = new THREE.Mesh(geometry, material);
|
873 |
+
uapObject.position.set(x, y, z);
|
874 |
+
uapObject.userData.uapId = uap.id;
|
875 |
+
|
876 |
+
// Rotate to face outward from Earth
|
877 |
+
uapObject.lookAt(0, 0, 0);
|
878 |
+
|
879 |
+
// Add to scene
|
880 |
+
scene.add(uapObject);
|
881 |
+
|
882 |
+
// Store reference
|
883 |
+
uapObjects.push({
|
884 |
+
id: uap.id,
|
885 |
+
object: uapObject
|
886 |
+
});
|
887 |
+
}
|
888 |
+
|
889 |
+
// Update UAP position in 3D viewer
|
890 |
+
function updateUAPIn3DViewer(uap) {
|
891 |
+
const uapObj = uapObjects.find(obj => obj.id === uap.id);
|
892 |
+
if (!uapObj) return;
|
893 |
+
|
894 |
+
// Scale down altitude for visualization
|
895 |
+
const scaledAltitude = parseFloat(uap.altitude) / 1000 * 15 + 15;
|
896 |
+
|
897 |
+
// Convert lat/long to 3D position
|
898 |
+
const phi = (90 - uap.lat) * (Math.PI / 180);
|
899 |
+
const theta = (uap.long + 180) * (Math.PI / 180);
|
900 |
+
|
901 |
+
const x = scaledAltitude * Math.sin(phi) * Math.cos(theta);
|
902 |
+
const y = scaledAltitude * Math.cos(phi);
|
903 |
+
const z = scaledAltitude * Math.sin(phi) * Math.sin(theta);
|
904 |
+
|
905 |
+
// Update position
|
906 |
+
uapObj.object.position.set(x, y, z);
|
907 |
+
|
908 |
+
// Rotate to face outward from Earth
|
909 |
+
uapObj.object.lookAt(0, 0, 0);
|
910 |
+
}
|
911 |
+
|
912 |
+
// Capture UAP (take screenshot)
|
913 |
+
function captureUAP() {
|
914 |
+
if (!scannerActive || detectedUAPs.length === 0) {
|
915 |
+
alert("No UAPs detected to capture!");
|
916 |
+
return;
|
917 |
+
}
|
918 |
+
|
919 |
+
// Get the latest UAP
|
920 |
+
const uap = detectedUAPs[detectedUAPs.length - 1];
|
921 |
+
|
922 |
+
// In a real app, this would capture the actual video frame
|
923 |
+
// For demo, we'll just show an alert
|
924 |
+
alert(`Captured UAP ${uap.id}\nShape: ${uap.shape}\nCoordinates: ${uap.lat.toFixed(4)}°, ${uap.long.toFixed(4)}°\nAltitude: ${uap.altitude}km (${uap.atmosphere})`);
|
925 |
+
|
926 |
+
// Highlight the UAP in the table
|
927 |
+
const rows = uapTableBody.querySelectorAll('tr');
|
928 |
+
rows[rows.length - 1].classList.add('bg-blue-900/30');
|
929 |
+
setTimeout(() => {
|
930 |
+
rows[rows.length - 1].classList.remove('bg-blue-900/30');
|
931 |
+
}, 2000);
|
932 |
+
}
|
933 |
+
|
934 |
+
// Reset 3D view
|
935 |
+
function resetView() {
|
936 |
+
camera.position.set(0, 0, 50);
|
937 |
+
camera.lookAt(0, 0, 0);
|
938 |
+
controls.target.set(0, 0, 0);
|
939 |
+
}
|
940 |
+
|
941 |
+
// Toggle orbit controls
|
942 |
+
function toggleOrbitControls() {
|
943 |
+
orbitEnabled = !orbitEnabled;
|
944 |
+
controls.enabled = orbitEnabled;
|
945 |
+
toggleOrbitBtn.classList.toggle('active');
|
946 |
+
}
|
947 |
+
|
948 |
+
// Focus on a specific UAP in 3D view
|
949 |
+
window.focusUAP = function(uapId) {
|
950 |
+
const uap = detectedUAPs.find(u => u.id === uapId);
|
951 |
+
if (!uap) return;
|
952 |
+
|
953 |
+
const uapObj = uapObjects.find(obj => obj.id === uapId);
|
954 |
+
if (!uapObj) return;
|
955 |
+
|
956 |
+
// Move camera to view the UAP
|
957 |
+
const targetPosition = uapObj.object.position.clone();
|
958 |
+
const cameraPosition = targetPosition.clone().multiplyScalar(1.5);
|
959 |
+
|
960 |
+
// Animate camera
|
961 |
+
gsap.to(camera.position, {
|
962 |
+
x: cameraPosition.x,
|
963 |
+
y: cameraPosition.y,
|
964 |
+
z: cameraPosition.z,
|
965 |
+
duration: 1,
|
966 |
+
ease: "power2.inOut"
|
967 |
+
});
|
968 |
+
|
969 |
+
gsap.to(controls.target, {
|
970 |
+
x: targetPosition.x,
|
971 |
+
y: targetPosition.y,
|
972 |
+
z: targetPosition.z,
|
973 |
+
duration: 1,
|
974 |
+
ease: "power2.inOut"
|
975 |
+
});
|
976 |
+
|
977 |
+
// Highlight the UAP in the table
|
978 |
+
const rows = uapTableBody.querySelectorAll('tr');
|
979 |
+
rows.forEach(row => {
|
980 |
+
if (row.querySelector('td:first-child').textContent === uapId) {
|
981 |
+
row.classList.add('bg-blue-900/30');
|
982 |
+
setTimeout(() => {
|
983 |
+
row.classList.remove('bg-blue-900/30');
|
984 |
+
}, 2000);
|
985 |
+
}
|
986 |
+
});
|
987 |
+
};
|
988 |
+
|
989 |
+
// Remove a UAP
|
990 |
+
window.removeUAP = function(uapId) {
|
991 |
+
// Remove from detected UAPs array
|
992 |
+
detectedUAPs = detectedUAPs.filter(u => u.id !== uapId);
|
993 |
+
|
994 |
+
// Remove from 3D scene
|
995 |
+
const uapObjIndex = uapObjects.findIndex(obj => obj.id === uapId);
|
996 |
+
if (uapObjIndex !== -1) {
|
997 |
+
scene.remove(uapObjects[uapObjIndex].object);
|
998 |
+
uapObjects.splice(uapObjIndex, 1);
|
999 |
+
}
|
1000 |
+
|
1001 |
+
// Remove from table
|
1002 |
+
const rows = uapTableBody.querySelectorAll('tr');
|
1003 |
+
rows.forEach(row => {
|
1004 |
+
if (row.querySelector('td:first-child').textContent === uapId) {
|
1005 |
+
row.remove();
|
1006 |
+
}
|
1007 |
+
});
|
1008 |
+
|
1009 |
+
// Remove marker
|
1010 |
+
const marker = document.querySelector(`.uap-marker[data-id="${uapId}"]`);
|
1011 |
+
if (marker) marker.remove();
|
1012 |
+
};
|
1013 |
+
|
1014 |
+
// Initialize the scanner
|
1015 |
+
initScanner();
|
1016 |
+
|
1017 |
+
// Include all other original JavaScript functionality here
|
1018 |
+
});
|
1019 |
+
</script>
|
1020 |
+
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=privateuserh/privateuserh-uaphe-vbeta1-03" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
1021 |
+
</html>
|
prompts.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
In the UAP Report area make a live interactive window that links to camera make the live window a scanning window to track the UAP display the UAP locally in VR via web3D scanner automatically display UAP virtually add live coordinates in the window based on object detection list coordinates based on UAP level height in atmosphere starting at troposphere then stratosphere then mesosphere then thermosphere and exosphere
|