Files changed (1) hide show
  1. Neo.txt +1025 -0
Neo.txt ADDED
@@ -0,0 +1,1025 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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, maximum-scale=1.0, user-scalable=no">
6
+ <title>Neo Security Guard</title>
7
+ <meta name="theme-color" content="#0a0a0a">
8
+ <meta name="apple-mobile-web-app-capable" content="yes">
9
+ <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>πŸ›‘οΈ</text></svg>">
10
+ <style>
11
+ @import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&family=Orbitron:wght@400;700;900&display=swap');
12
+
13
+ * { margin: 0; padding: 0; box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
14
+
15
+ :root {
16
+ --neon-green: #00ff41;
17
+ --neon-blue: #00d4ff;
18
+ --neon-red: #ff0040;
19
+ --neon-yellow: #ffff00;
20
+ --dark-bg: #0a0a0a;
21
+ --panel-bg: #111111;
22
+ --text-main: #e0e0e0;
23
+ --text-dim: #666666;
24
+ }
25
+
26
+ body {
27
+ font-family: 'Share Tech Mono', monospace;
28
+ background: var(--dark-bg);
29
+ color: var(--text-main);
30
+ min-height: 100vh;
31
+ overflow-x: hidden;
32
+ padding-bottom: 100px;
33
+ }
34
+
35
+ .matrix-bg {
36
+ position: fixed;
37
+ top: 0;
38
+ left: 0;
39
+ width: 100%;
40
+ height: 100%;
41
+ z-index: -1;
42
+ opacity: 0.04;
43
+ background: repeating-linear-gradient(0deg, transparent, transparent 2px, var(--neon-green) 2px, var(--neon-green) 4px);
44
+ animation: matrixScroll 20s linear infinite;
45
+ }
46
+
47
+ @keyframes matrixScroll { from { background-position: 0 0; } to { background-position: 0 1000px; } }
48
+
49
+ .app { max-width: 100%; min-height: 100vh; padding: 15px; }
50
+
51
+ /* Header */
52
+ .header {
53
+ text-align: center;
54
+ margin-bottom: 20px;
55
+ padding: 15px;
56
+ background: linear-gradient(180deg, rgba(0,212,255,0.1) 0%, transparent 100%);
57
+ border: 1px solid var(--neon-blue);
58
+ border-radius: 12px;
59
+ }
60
+
61
+ .logo {
62
+ font-family: 'Orbitron', sans-serif;
63
+ font-size: 2.5rem;
64
+ font-weight: 900;
65
+ color: var(--neon-blue);
66
+ text-shadow: 0 0 20px var(--neon-blue);
67
+ letter-spacing: 6px;
68
+ }
69
+
70
+ .tagline { font-size: 0.7rem; color: var(--neon-green); margin-top: 5px; }
71
+
72
+ /* Status Grid */
73
+ .status-grid {
74
+ display: grid;
75
+ grid-template-columns: repeat(3, 1fr);
76
+ gap: 8px;
77
+ margin-bottom: 15px;
78
+ }
79
+
80
+ .status-card {
81
+ background: var(--panel-bg);
82
+ border: 1px solid #333;
83
+ border-radius: 10px;
84
+ padding: 12px 8px;
85
+ text-align: center;
86
+ }
87
+
88
+ .status-label { font-size: 0.6rem; color: var(--text-dim); text-transform: uppercase; margin-bottom: 4px; }
89
+ .status-value { font-family: 'Orbitron', sans-serif; font-size: 1.2rem; font-weight: bold; }
90
+ .status-value.secure { color: var(--neon-green); text-shadow: 0 0 10px var(--neon-green); }
91
+ .status-value.warning { color: var(--neon-yellow); text-shadow: 0 0 10px var(--neon-yellow); }
92
+ .status-value.danger { color: var(--neon-red); text-shadow: 0 0 10px var(--neon-red); }
93
+
94
+ /* Mode Toggle */
95
+ .mode-toggle { display: flex; gap: 10px; margin-bottom: 15px; }
96
+
97
+ .mode-btn {
98
+ flex: 1;
99
+ padding: 14px;
100
+ font-family: 'Orbitron', sans-serif;
101
+ font-weight: 700;
102
+ font-size: 0.8rem;
103
+ border: 2px solid;
104
+ border-radius: 10px;
105
+ cursor: pointer;
106
+ transition: all 0.3s ease;
107
+ text-transform: uppercase;
108
+ }
109
+
110
+ .mode-btn.blue { background: transparent; border-color: var(--neon-blue); color: var(--neon-blue); }
111
+ .mode-btn.blue.active { background: var(--neon-blue); color: var(--dark-bg); box-shadow: 0 0 20px var(--neon-blue); }
112
+ .mode-btn.red { background: transparent; border-color: var(--neon-red); color: var(--neon-red); }
113
+ .mode-btn.red.active { background: var(--neon-red); color: var(--dark-bg); box-shadow: 0 0 20px var(--neon-red); }
114
+
115
+ /* Buttons Grid */
116
+ .feature-btns {
117
+ display: grid;
118
+ grid-template-columns: repeat(3, 1fr);
119
+ gap: 10px;
120
+ margin-bottom: 15px;
121
+ }
122
+
123
+ .feature-btn {
124
+ padding: 15px 10px;
125
+ background: var(--panel-bg);
126
+ border: 1px solid #333;
127
+ border-radius: 10px;
128
+ text-align: center;
129
+ cursor: pointer;
130
+ transition: all 0.3s;
131
+ }
132
+
133
+ .feature-btn:hover, .feature-btn.active {
134
+ border-color: var(--neon-blue);
135
+ box-shadow: 0 0 15px rgba(0,212,255,0.3);
136
+ }
137
+
138
+ .feature-btn-icon { font-size: 1.5rem; display: block; margin-bottom: 5px; }
139
+ .feature-btn-label { font-size: 0.65rem; color: var(--text-dim); }
140
+
141
+ /* Scan Button */
142
+ .scan-btn {
143
+ width: 100%;
144
+ padding: 18px;
145
+ font-family: 'Orbitron', sans-serif;
146
+ font-size: 1rem;
147
+ font-weight: 700;
148
+ background: linear-gradient(135deg, var(--neon-blue), var(--neon-green));
149
+ border: none;
150
+ border-radius: 12px;
151
+ color: var(--dark-bg);
152
+ cursor: pointer;
153
+ text-transform: uppercase;
154
+ letter-spacing: 2px;
155
+ box-shadow: 0 0 25px rgba(0,212,255,0.4);
156
+ margin-bottom: 15px;
157
+ }
158
+
159
+ .scan-btn:active { transform: scale(0.97); }
160
+ .scan-btn.scanning { animation: scanPulse 1s infinite; }
161
+
162
+ @keyframes scanPulse { 0%, 100% { box-shadow: 0 0 25px rgba(0,212,255,0.4); } 50% { box-shadow: 0 0 50px rgba(0,212,255,0.8); } }
163
+
164
+ /* Panels */
165
+ .panel {
166
+ display: none;
167
+ background: var(--panel-bg);
168
+ border: 1px solid #333;
169
+ border-radius: 12px;
170
+ padding: 15px;
171
+ margin-bottom: 15px;
172
+ }
173
+
174
+ .panel.active { display: block; }
175
+
176
+ .panel-header {
177
+ display: flex;
178
+ justify-content: space-between;
179
+ align-items: center;
180
+ margin-bottom: 15px;
181
+ padding-bottom: 10px;
182
+ border-bottom: 1px solid #333;
183
+ }
184
+
185
+ .panel-title { font-family: 'Orbitron', sans-serif; font-size: 0.9rem; color: var(--neon-blue); }
186
+
187
+ /* Progress */
188
+ .progress-container { margin-bottom: 15px; display: none; }
189
+ .progress-container.active { display: block; }
190
+ .progress-bar { height: 6px; background: #222; border-radius: 3px; overflow: hidden; margin-bottom: 8px; }
191
+ .progress-fill { height: 100%; background: linear-gradient(90deg, var(--neon-blue), var(--neon-green)); width: 0%; transition: width 0.3s; }
192
+ .progress-text { font-size: 0.75rem; color: var(--neon-blue); text-align: center; }
193
+
194
+ /* Monitor Stats */
195
+ .monitor-grid {
196
+ display: grid;
197
+ grid-template-columns: repeat(2, 1fr);
198
+ gap: 8px;
199
+ }
200
+
201
+ .monitor-stat {
202
+ background: rgba(0,0,0,0.3);
203
+ border-radius: 8px;
204
+ padding: 10px;
205
+ display: flex;
206
+ justify-content: space-between;
207
+ align-items: center;
208
+ }
209
+
210
+ .monitor-stat-label { font-size: 0.7rem; color: var(--text-dim); }
211
+ .monitor-stat-value { font-family: 'Orbitron', sans-serif; font-size: 0.85rem; color: var(--neon-blue); }
212
+
213
+ /* Quote */
214
+ .matrix-quote {
215
+ text-align: center;
216
+ padding: 15px;
217
+ margin-bottom: 15px;
218
+ font-style: italic;
219
+ color: var(--neon-green);
220
+ text-shadow: 0 0 10px var(--neon-green);
221
+ font-size: 0.85rem;
222
+ border: 1px solid rgba(0,255,65,0.2);
223
+ border-radius: 8px;
224
+ background: rgba(0,255,65,0.02);
225
+ }
226
+
227
+ /* Stats Grid */
228
+ .stats-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 15px; }
229
+
230
+ .stat-card {
231
+ background: var(--panel-bg);
232
+ border: 1px solid #333;
233
+ border-radius: 10px;
234
+ padding: 12px 8px;
235
+ text-align: center;
236
+ cursor: pointer;
237
+ transition: all 0.3s;
238
+ }
239
+
240
+ .stat-card:active { transform: scale(0.95); }
241
+ .stat-card:hover { border-color: var(--neon-blue); }
242
+
243
+ .stat-value { font-family: 'Orbitron', sans-serif; font-size: 1.3rem; font-weight: bold; }
244
+ .stat-label { font-size: 0.6rem; color: var(--text-dim); margin-top: 4px; }
245
+
246
+ /* Threat List */
247
+ .patrol-log { background: var(--panel-bg); border: 1px solid #333; border-radius: 12px; padding: 15px; }
248
+ .log-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid #333; }
249
+ .log-title { font-family: 'Orbitron', sans-serif; font-size: 0.9rem; color: var(--neon-blue); }
250
+ .log-count { font-size: 0.75rem; color: var(--neon-red); background: rgba(255,0,64,0.1); padding: 4px 8px; border-radius: 20px; }
251
+
252
+ .threat-item { padding: 12px; margin-bottom: 10px; border-radius: 8px; border-left: 4px solid; }
253
+ .threat-item.critical { border-color: var(--neon-red); background: rgba(255,0,64,0.08); }
254
+ .threat-item.high { border-color: #ff6600; background: rgba(255,102,0,0.08); }
255
+ .threat-item.medium { border-color: var(--neon-yellow); background: rgba(255,255,0,0.08); }
256
+
257
+ .threat-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
258
+ .threat-title { font-weight: bold; font-size: 0.9rem; }
259
+ .threat-level { font-size: 0.6rem; padding: 3px 8px; border-radius: 4px; font-weight: bold; text-transform: uppercase; }
260
+ .threat-level.critical { background: var(--neon-red); color: white; }
261
+ .threat-level.high { background: #ff6600; color: white; }
262
+ .threat-level.medium { background: var(--neon-yellow); color: black; }
263
+
264
+ .threat-desc { font-size: 0.8rem; color: #aaa; margin-bottom: 10px; line-height: 1.4; }
265
+ .threat-fix { font-size: 0.75rem; color: var(--neon-blue); padding: 10px; background: rgba(0,212,255,0.08); border-radius: 6px; border-left: 3px solid var(--neon-blue); }
266
+
267
+ /* Camera Scanner */
268
+ .camera-scanner { text-align: center; }
269
+ .camera-preview {
270
+ width: 100%;
271
+ height: 250px;
272
+ background: #000;
273
+ border-radius: 10px;
274
+ margin-bottom: 15px;
275
+ position: relative;
276
+ overflow: hidden;
277
+ border: 2px solid var(--neon-blue);
278
+ }
279
+
280
+ .camera-preview video { width: 100%; height: 100%; object-fit: cover; }
281
+ .scan-overlay {
282
+ position: absolute;
283
+ top: 50%;
284
+ left: 50%;
285
+ transform: translate(-50%, -50%);
286
+ width: 200px;
287
+ height: 200px;
288
+ border: 2px solid var(--neon-green);
289
+ box-shadow: 0 0 0 9999px rgba(0,0,0,0.5);
290
+ animation: scanPulse 2s infinite;
291
+ }
292
+
293
+ .scan-line {
294
+ position: absolute;
295
+ top: 0;
296
+ left: 0;
297
+ right: 0;
298
+ height: 2px;
299
+ background: var(--neon-green);
300
+ animation: scanLine 2s linear infinite;
301
+ }
302
+
303
+ @keyframes scanLine { 0% { top: 0; } 100% { top: 100%; } }
304
+
305
+ .camera-btn {
306
+ padding: 12px 25px;
307
+ font-family: 'Orbitron', sans-serif;
308
+ font-weight: 700;
309
+ border: 2px solid var(--neon-blue);
310
+ background: transparent;
311
+ color: var(--neon-blue);
312
+ border-radius: 8px;
313
+ cursor: pointer;
314
+ margin: 5px;
315
+ font-size: 0.8rem;
316
+ }
317
+
318
+ .camera-btn.active { background: var(--neon-blue); color: var(--dark-bg); }
319
+
320
+ /* Network Analyzer */
321
+ .network-info { margin-bottom: 15px; }
322
+ .network-row { display: flex; justify-content: space-between; padding: 10px; background: rgba(0,0,0,0.3); border-radius: 6px; margin-bottom: 8px; }
323
+ .network-label { font-size: 0.8rem; color: var(--text-dim); }
324
+ .network-value { font-size: 0.85rem; color: var(--neon-blue); }
325
+
326
+ .connection-quality {
327
+ display: flex;
328
+ align-items: center;
329
+ gap: 10px;
330
+ padding: 15px;
331
+ background: rgba(0,255,65,0.1);
332
+ border-radius: 8px;
333
+ margin-bottom: 15px;
334
+ }
335
+
336
+ .quality-bar { flex: 1; height: 8px; background: #333; border-radius: 4px; overflow: hidden; }
337
+ .quality-fill { height: 100%; background: var(--neon-green); transition: width 0.5s; }
338
+
339
+ /* Malware Signatures */
340
+ .malware-list { max-height: 300px; overflow-y: auto; }
341
+ .malware-item {
342
+ display: flex;
343
+ align-items: center;
344
+ padding: 12px;
345
+ background: rgba(0,0,0,0.3);
346
+ border-radius: 8px;
347
+ margin-bottom: 8px;
348
+ border-left: 3px solid var(--neon-green);
349
+ }
350
+
351
+ .malware-item.detected { border-left-color: var(--neon-red); background: rgba(255,0,64,0.1); }
352
+ .malware-icon { font-size: 1.5rem; margin-right: 12px; }
353
+ .malware-info { flex: 1; }
354
+ .malware-name { font-weight: bold; font-size: 0.85rem; }
355
+ .malware-detail { font-size: 0.7rem; color: var(--text-dim); }
356
+ .malware-status { font-size: 0.7rem; padding: 4px 10px; border-radius: 20px; }
357
+ .malware-status.clean { background: rgba(0,255,65,0.2); color: var(--neon-green); }
358
+ .malware-status.infected { background: rgba(255,0,64,0.2); color: var(--neon-red); }
359
+
360
+ /* Permission Panel */
361
+ .permission-list { max-height: 250px; overflow-y: auto; }
362
+ .permission-item { display: flex; justify-content: space-between; align-items: center; padding: 10px; border-bottom: 1px solid #222; }
363
+ .permission-name { font-size: 0.85rem; }
364
+ .permission-apps { font-size: 0.65rem; color: var(--text-dim); }
365
+ .permission-status { font-size: 0.7rem; padding: 4px 10px; border-radius: 20px; }
366
+ .permission-status.granted { background: rgba(0,255,65,0.2); color: var(--neon-green); }
367
+ .permission-status.none { background: rgba(255,0,64,0.1); color: var(--text-dim); }
368
+
369
+ /* Notification Toggle */
370
+ .notification-toggle { display: flex; align-items: center; justify-content: space-between; background: var(--panel-bg); border: 1px solid #333; border-radius: 10px; padding: 12px; margin-bottom: 15px; }
371
+ .toggle-label { font-size: 0.85rem; }
372
+ .toggle-switch { width: 45px; height: 24px; background: #333; border-radius: 12px; position: relative; cursor: pointer; }
373
+ .toggle-switch.active { background: var(--neon-green); box-shadow: 0 0 15px var(--neon-green); }
374
+ .toggle-switch::after { content: ''; position: absolute; width: 20px; height: 20px; background: white; border-radius: 50%; top: 2px; left: 2px; transition: transform 0.3s; }
375
+ .toggle-switch.active::after { transform: translateX(21px); }
376
+
377
+ /* Bottom Nav */
378
+ .bottom-nav {
379
+ position: fixed;
380
+ bottom: 0;
381
+ left: 0;
382
+ right: 0;
383
+ display: flex;
384
+ background: rgba(17,17,17,0.95);
385
+ backdrop-filter: blur(10px);
386
+ border-top: 1px solid #333;
387
+ padding: 10px 5px;
388
+ padding-bottom: calc(10px + env(safe-area-inset-bottom));
389
+ z-index: 100;
390
+ }
391
+
392
+ .nav-btn { flex: 1; text-align: center; padding: 6px; font-size: 0.6rem; color: var(--text-dim); cursor: pointer; border-radius: 6px; transition: all 0.3s; }
393
+ .nav-btn.active { color: var(--neon-blue); background: rgba(0,212,255,0.1); }
394
+ .nav-btn svg { width: 20px; height: 20px; margin-bottom: 2px; display: block; margin: 0 auto 2px; }
395
+
396
+ /* Toast */
397
+ .toast {
398
+ position: fixed;
399
+ top: 15px;
400
+ left: 50%;
401
+ transform: translateX(-50%) translateY(-150%);
402
+ background: var(--panel-bg);
403
+ border: 2px solid var(--neon-blue);
404
+ padding: 12px 20px;
405
+ border-radius: 10px;
406
+ z-index: 1000;
407
+ transition: transform 0.4s;
408
+ box-shadow: 0 0 25px rgba(0,212,255,0.4);
409
+ max-width: 90%;
410
+ text-align: center;
411
+ font-size: 0.85rem;
412
+ }
413
+
414
+ .toast.show { transform: translateX(-50%) translateY(0); }
415
+ .toast.danger { border-color: var(--neon-red); box-shadow: 0 0 25px rgba(255,0,64,0.4); }
416
+
417
+ /* Red Pill Mode */
418
+ .red-pill-active .logo { color: var(--neon-red); text-shadow: 0 0 20px var(--neon-red); }
419
+ .red-pill-active .header { border-color: var(--neon-red); }
420
+ .red-pill-active .scan-btn { background: linear-gradient(135deg, var(--neon-red), #ff6600); }
421
+ .red-pill-active .threat-item { border-color: var(--neon-red) !important; background: rgba(255,0,64,0.1) !important; }
422
+ .red-pill-active .log-title { color: var(--neon-red); }
423
+ .red-pill-active .matrix-quote { color: var(--neon-red); text-shadow: 0 0 10px var(--neon-red); border-color: rgba(255,0,64,0.2); }
424
+
425
+ .glitch { animation: glitchEffect 0.3s ease; }
426
+ @keyframes glitchEffect { 0%, 100% { transform: translate(0); } 25% { transform: translate(-5px, 3px); } 50% { transform: translate(5px, -3px); } 75% { transform: translate(-3px, 5px); } }
427
+ </style>
428
+ </head>
429
+ <body>
430
+ <div class="matrix-bg"></div>
431
+
432
+ <div class="app" id="app">
433
+ <!-- Header -->
434
+ <div class="header">
435
+ <div class="logo" id="logo">NEO</div>
436
+ <div class="tagline" id="tagline">πŸ›‘οΈ Your Phone's Personal Security Guard</div>
437
+ </div>
438
+
439
+ <!-- Mode Toggle -->
440
+ <div class="mode-toggle">
441
+ <button class="mode-btn blue active" onclick="setMode('blue')">πŸ”΅ Blue</button>
442
+ <button class="mode-btn red" onclick="setMode('red')">πŸ”΄ Red</button>
443
+ </div>
444
+
445
+ <!-- Status Grid -->
446
+ <div class="status-grid">
447
+ <div class="status-card">
448
+ <div class="status-label">Security</div>
449
+ <div class="status-value secure" id="securityScore">8.2</div>
450
+ </div>
451
+ <div class="status-card">
452
+ <div class="status-label">Threats</div>
453
+ <div class="status-value warning" id="threatCount">3</div>
454
+ </div>
455
+ <div class="status-card">
456
+ <div class="status-label">Guard</div>
457
+ <div class="status-value secure" id="guardStatus">ACTIVE</div>
458
+ </div>
459
+ </div>
460
+
461
+ <!-- Feature Buttons -->
462
+ <div class="feature-btns">
463
+ <div class="feature-btn" id="btnCamera" onclick="showPanel('camera')">
464
+ <span class="feature-btn-icon">πŸ“·</span>
465
+ <span class="feature-btn-label">Camera Scan</span>
466
+ </div>
467
+ <div class="feature-btn" id="btnNetwork" onclick="showPanel('network')">
468
+ <span class="feature-btn-icon">🌐</span>
469
+ <span class="feature-btn-label">Network</span>
470
+ </div>
471
+ <div class="feature-btn" id="btnMalware" onclick="showPanel('malware')">
472
+ <span class="feature-btn-icon">πŸ‘Ύ</span>
473
+ <span class="feature-btn-label">Malware</span>
474
+ </div>
475
+ </div>
476
+
477
+ <!-- Notification Toggle -->
478
+ <div class="notification-toggle">
479
+ <span class="toggle-label">πŸ”” Real-time Alerts</span>
480
+ <div class="toggle-switch" id="notifToggle" onclick="toggleNotifications()"></div>
481
+ </div>
482
+
483
+ <!-- Scan Button -->
484
+ <button class="scan-btn" id="scanBtn" onclick="runFullScan()">πŸ” Full Security Patrol</button>
485
+
486
+ <!-- Progress -->
487
+ <div class="progress-container" id="scanProgress">
488
+ <div class="progress-bar"><div class="progress-fill" id="progressFill"></div></div>
489
+ <div class="progress-text" id="progressText">Initializing...</div>
490
+ </div>
491
+
492
+ <!-- Main Panel (Monitor) -->
493
+ <div class="panel active" id="panelMonitor">
494
+ <div class="panel-header">
495
+ <div class="panel-title">πŸ“‘ Real-time Monitor</div>
496
+ <div style="display: flex; align-items: center; gap: 6px; font-size: 0.7rem; color: var(--neon-green);">
497
+ <div style="width: 8px; height: 8px; background: var(--neon-green); border-radius: 50%; animation: scanPulse 1s infinite;"></div>
498
+ LIVE
499
+ </div>
500
+ </div>
501
+ <div class="monitor-grid">
502
+ <div class="monitor-stat"><span class="monitor-stat-label">CPU</span><span class="monitor-stat-value" id="cpuUsage">12%</span></div>
503
+ <div class="monitor-stat"><span class="monitor-stat-label">Memory</span><span class="monitor-stat-value" id="memUsage">67%</span></div>
504
+ <div class="monitor-stat"><span class="monitor-stat-label">Network</span><span class="monitor-stat-value" id="netCalls">4/min</span></div>
505
+ <div class="monitor-stat"><span class="monitor-stat-label">Active Apps</span><span class="monitor-stat-value" id="activeApps">3</span></div>
506
+ </div>
507
+ </div>
508
+
509
+ <!-- Camera Scanner Panel -->
510
+ <div class="panel" id="panelCamera">
511
+ <div class="panel-header">
512
+ <div class="panel-title">πŸ“· App Scanner</div>
513
+ </div>
514
+ <div class="camera-scanner">
515
+ <div class="camera-preview" id="cameraPreview">
516
+ <video id="videoElement" autoplay playsinline style="display: none;"></video>
517
+ <div style="display: flex; align-items: center; justify-content: center; height: 100%; color: var(--text-dim);">
518
+ <div style="text-align: center;">
519
+ <div style="font-size: 3rem; margin-bottom: 10px;">πŸ“·</div>
520
+ <div>Camera inactive</div>
521
+ </div>
522
+ </div>
523
+ <div class="scan-overlay" id="scanOverlay" style="display: none;">
524
+ <div class="scan-line"></div>
525
+ </div>
526
+ </div>
527
+ <div>
528
+ <button class="camera-btn" id="startCameraBtn" onclick="startCamera()">πŸ“· Start Camera</button>
529
+ <button class="camera-btn" id="captureBtn" onclick="captureScan()" style="display: none;">🎯 Scan Apps</button>
530
+ <button class="camera-btn" id="stopCameraBtn" onclick="stopCamera()" style="display: none;">⏹️ Stop</button>
531
+ </div>
532
+ <div id="scanResults" style="margin-top: 15px;"></div>
533
+ </div>
534
+ </div>
535
+
536
+ <!-- Network Analyzer Panel -->
537
+ <div class="panel" id="panelNetwork">
538
+ <div class="panel-header">
539
+ <div class="panel-title">🌐 Network Analyzer</div>
540
+ <button onclick="refreshNetwork()" style="background: none; border: none; color: var(--neon-blue); cursor: pointer;">πŸ”„</button>
541
+ </div>
542
+ <div class="connection-quality" id="connectionQuality">
543
+ <span style="font-size: 1.5rem;">πŸ“Ά</span>
544
+ <div style="flex: 1;">
545
+ <div style="font-size: 0.85rem; margin-bottom: 5px;" id="connType">WiFi - Unknown</div>
546
+ <div class="quality-bar"><div class="quality-fill" id="qualityFill" style="width: 75%;"></div></div>
547
+ </div>
548
+ <span style="font-size: 0.85rem; color: var(--neon-green);" id="connSpeed">Good</span>
549
+ </div>
550
+ <div class="network-info">
551
+ <div class="network-row"><span class="network-label">Connection Type</span><span class="network-value" id="netType">WiFi</span></div>
552
+ <div class="network-row"><span class="network-label">IP Address</span><span class="network-value" id="ipAddr">192.168.1.x</span></div>
553
+ <div class="network-row"><span class="network-label">DNS Server</span><span class="network-value" id="dnsServer">8.8.8.8</span></div>
554
+ <div class="network-row"><span class="network-label">Signal Strength</span><span class="network-value" id="signalStr">-65 dBm</span></div>
555
+ <div class="network-row"><span class="network-label">Encryption</span><span class="network-value" id="encryption">WPA2</span></div>
556
+ <div class="network-row"><span class="network-label">Latency</span><span class="network-value" id="latency">24ms</span></div>
557
+ </div>
558
+ <div style="margin-top: 15px;">
559
+ <div style="font-family: 'Orbitron', sans-serif; font-size: 0.8rem; color: var(--neon-blue); margin-bottom: 10px;">πŸ” Recent Connections</div>
560
+ <div id="connectionList">
561
+ <div class="network-row"><span class="network-label">google.com</span><span class="network-value" style="color: var(--neon-green);">βœ“ Secure</span></div>
562
+ <div class="network-row"><span class="network-label">facebook.com</span><span class="network-value" style="color: var(--neon-green);">βœ“ Secure</span></div>
563
+ <div class="network-row"><span class="network-label">api.weather.com</span><span class="network-value" style="color: var(--neon-yellow);">⚠ HTTP</span></div>
564
+ </div>
565
+ </div>
566
+ </div>
567
+
568
+ <!-- Malware Scanner Panel -->
569
+ <div class="panel" id="panelMalware">
570
+ <div class="panel-header">
571
+ <div class="panel-title">πŸ‘Ύ Malware Signatures</div>
572
+ <button onclick="runMalwareScan()" style="background: none; border: none; color: var(--neon-blue); cursor: pointer;">πŸ”„</button>
573
+ </div>
574
+ <div class="malware-list" id="malwareList">
575
+ <!-- Populated by JS -->
576
+ </div>
577
+ </div>
578
+
579
+ <!-- Matrix Quote -->
580
+ <div class="matrix-quote" id="matrixQuote">"I've got eyes on it."</div>
581
+
582
+ <!-- Stats Grid -->
583
+ <div class="stats-grid">
584
+ <div class="stat-card" onclick="showPanel('permissions')">
585
+ <div class="stat-value" style="color: var(--neon-blue)" id="permissionCount">12</div>
586
+ <div class="stat-label">πŸ” Perms</div>
587
+ </div>
588
+ <div class="stat-card">
589
+ <div class="stat-value" style="color: var(--neon-green)" id="secureCount">8</div>
590
+ <div class="stat-label">βœ“ Secure</div>
591
+ </div>
592
+ <div class="stat-card">
593
+ <div class="stat-value" style="color: var(--neon-yellow)" id="warningCount">2</div>
594
+ <div class="stat-label">⚠️ Warn</div>
595
+ </div>
596
+ <div class="stat-card">
597
+ <div class="stat-value" style="color: var(--neon-red)" id="trackersDetected">14</div>
598
+ <div class="stat-label">πŸ‘οΈ Track</div>
599
+ </div>
600
+ </div>
601
+
602
+ <!-- Permissions Panel -->
603
+ <div class="panel" id="panelPermissions" style="display: none;">
604
+ <div class="panel-header">
605
+ <div class="panel-title">πŸ“± Permission Audit</div>
606
+ </div>
607
+ <div class="permission-list" id="permissionList"></div>
608
+ </div>
609
+
610
+ <!-- Patrol Log -->
611
+ <div class="patrol-log">
612
+ <div class="log-header">
613
+ <div class="log-title">🎯 PATROL LOG</div>
614
+ <div class="log-count" id="logCount">3 found</div>
615
+ </div>
616
+ <div id="threatList"></div>
617
+ </div>
618
+
619
+ <!-- Bottom Nav -->
620
+ <div class="bottom-nav">
621
+ <div class="nav-btn active" onclick="navTo('scan', this)">
622
+ <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>
623
+ Scan
624
+ </div>
625
+ <div class="nav-btn" onclick="navTo('camera', this)">
626
+ <svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 15.2c1.77 0 3.2-1.43 3.2-3.2 0-1.77-1.43-3.2-3.2-3.2-1.77 0-3.2 1.43-3.2 3.2 0 1.77 1.43 3.2 3.2 3.2zm9-9.8h-3.2l-1.9-2H8.1l-1.9 2H3c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V7.4c0-1.1-.9-2-2-2zm-12 12c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
627
+ Camera
628
+ </div>
629
+ <div class="nav-btn" onclick="navTo('network', this)">
630
+ <svg viewBox="0 0 24 24" fill="currentColor"><path d="M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z"/></svg>
631
+ Network
632
+ </div>
633
+ <div class="nav-btn" onclick="navTo('settings', this)">
634
+ <svg viewBox="0 0 24 24" fill="currentColor"><path d="M19.14 12.94c.04-.31.06-.63.06-.94 0-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/></svg>
635
+ Settings
636
+ </div>
637
+ </div>
638
+ </div>
639
+
640
+ <!-- Toast -->
641
+ <div class="toast" id="toast"></div>
642
+
643
+ <script>
644
+ // ==================== STATE ====================
645
+ let currentMode = 'blue';
646
+ let isScanning = false;
647
+ let notificationsEnabled = false;
648
+ let cameraStream = null;
649
+
650
+ // ==================== DATA ====================
651
+ const quotes = {
652
+ blue: ["I've got eyes on it.", "The guard never sleeps.", "Your phone is secure. For now.", "Nothing suspicious.", "I've got your back."],
653
+ red: ["You wanted the truth. Here it is.", "The truth is in the code.", "There's no hiding.", "I see the code. Do you?", "The Red Pill keeps you alive."]
654
+ };
655
+
656
+ const threats = {
657
+ blue: [
658
+ { level: 'critical', title: '⚠️ Outdated Banking App', desc: 'Your banking app hasn\'t been updated in 6+ months. Known vulnerabilities exist.', fix: 'Open Play Store β†’ UPDATE immediately.' },
659
+ { level: 'high', title: '⚠️ Open WiFi Connected', desc: 'Connected to unsecured network. Data could be intercepted.', fix: 'Settings β†’ Disconnect. Use cellular or VPN.' },
660
+ { level: 'medium', title: '⚠️ Excessive Permissions', desc: 'Flashlight app has camera + contacts. Doesn\'t need either.', fix: 'Settings β†’ Apps β†’ Permissions β†’ Deny.' }
661
+ ],
662
+ red: [
663
+ { level: 'critical', title: 'πŸ”΄ 14 TRACKERS DETECTED', desc: 'Weather app has 14 trackers. Facebook, Google, Amazon auctioning your location in REAL TIME.', fix: 'UNINSTALL NOW.' },
664
+ { level: 'critical', title: 'πŸ”΄ CLIPBOARD SNIFFER', desc: 'Wallpaper app reads your clipboard. Passwords, OTPs, codes - everything sent out.', fix: 'Settings β†’ Uninstall. Clear clipboard NOW.' },
665
+ { level: 'high', title: 'πŸ”΄ BACKGROUND EXECUTION', desc: '3 apps running silently. Polling external servers every 30 seconds.', fix: 'Settings β†’ Force Stop suspicious apps.' },
666
+ { level: 'high', title: 'πŸ”΄ DATA EXPORT: 2,847 points', desc: 'Location tracked 156 times. Usage analyzed by 7 companies in 24 hours.', fix: 'Limit background data. Install firewall.' }
667
+ ]
668
+ };
669
+
670
+ const malwareSignatures = [
671
+ { name: 'Joker Malware', risk: 'high', desc: 'Billing fraud - subscribes to premium services', detected: false },
672
+ { name: 'Cheetah Mobile SDK', risk: 'medium', desc: 'Aggressive advertising + data collection', detected: true },
673
+ { name: 'Triout Spyware', risk: 'critical', desc: 'Records calls, intercepts SMS, steals data', detected: false },
674
+ { name: 'PreAMo Malware', risk: 'high', desc: 'Clicks ads in background, drains battery', detected: true },
675
+ { name: 'Agent Smith', risk: 'critical', desc: 'Injects malicious code into legitimate apps', detected: false },
676
+ { name: 'Xhelper', risk: 'critical', desc: 'Reinstalls itself after uninstall', detected: false },
677
+ { name: 'Dr. Web', risk: 'medium', desc: 'Adware bundled with apps', detected: true },
678
+ { name: 'CopyCat', risk: 'critical', desc: 'Rootkit - gains full device control', detected: false }
679
+ ];
680
+
681
+ const permissions = [
682
+ { name: 'Camera', granted: true, apps: 'Camera, Instagram, TikTok' },
683
+ { name: 'Microphone', granted: true, apps: 'WhatsApp, Instagram, Snapchat' },
684
+ { name: 'Location', granted: true, apps: 'Maps, Weather, 8 other apps' },
685
+ { name: 'Contacts', granted: true, apps: 'WhatsApp, Telegram' },
686
+ { name: 'Storage', granted: true, apps: 'Gallery, File Manager, Many apps' },
687
+ { name: 'Phone', granted: true, apps: 'WhatsApp, Dialer' },
688
+ { name: 'SMS', granted: false, apps: 'None - Good!' },
689
+ { name: 'Calendar', granted: true, apps: 'Google, Outlook, Slack' }
690
+ ];
691
+
692
+ // ==================== INIT ====================
693
+ document.addEventListener('DOMContentLoaded', () => {
694
+ renderThreats();
695
+ renderPermissions();
696
+ renderMalware();
697
+ startMonitor();
698
+ updateNetworkInfo();
699
+ });
700
+
701
+ // ==================== MODE ====================
702
+ function setMode(mode) {
703
+ currentMode = mode;
704
+ document.querySelectorAll('.mode-btn').forEach(b => b.classList.remove('active'));
705
+ document.querySelector(`.mode-btn.${mode}`).classList.add('active');
706
+
707
+ const app = document.getElementById('app');
708
+ const logo = document.getElementById('logo');
709
+ const tagline = document.getElementById('tagline');
710
+
711
+ if (mode === 'red') {
712
+ app.classList.add('red-pill-active');
713
+ logo.style.color = 'var(--neon-red)';
714
+ tagline.textContent = 'πŸ”΄ TRUTH REVEALED';
715
+ } else {
716
+ app.classList.remove('red-pill-active');
717
+ logo.style.color = 'var(--neon-blue)';
718
+ tagline.textContent = 'πŸ›‘οΈ Your Phone\'s Security Guard';
719
+ }
720
+
721
+ document.getElementById('matrixQuote').textContent = `"${quotes[mode][Math.floor(Math.random() * quotes[mode].length)]}"`;
722
+ updateStats();
723
+ renderThreats();
724
+ }
725
+
726
+ function updateStats() {
727
+ if (currentMode === 'red') {
728
+ document.getElementById('securityScore').textContent = '3.8';
729
+ document.getElementById('securityScore').className = 'status-value danger';
730
+ document.getElementById('threatCount').textContent = '4';
731
+ document.getElementById('threatCount').className = 'status-value danger';
732
+ document.getElementById('guardStatus').textContent = 'ON ALERT';
733
+ document.getElementById('guardStatus').className = 'status-value warning';
734
+ document.getElementById('permissionCount').textContent = '47';
735
+ document.getElementById('trackersDetected').textContent = '127';
736
+ } else {
737
+ document.getElementById('securityScore').textContent = '8.2';
738
+ document.getElementById('securityScore').className = 'status-value secure';
739
+ document.getElementById('threatCount').textContent = '3';
740
+ document.getElementById('threatCount').className = 'status-value warning';
741
+ document.getElementById('guardStatus').textContent = 'ACTIVE';
742
+ document.getElementById('guardStatus').className = 'status-value secure';
743
+ document.getElementById('permissionCount').textContent = '12';
744
+ document.getElementById('trackersDetected').textContent = '14';
745
+ }
746
+ }
747
+
748
+ // ==================== PANELS ====================
749
+ function showPanel(panelId) {
750
+ // Update feature buttons
751
+ document.querySelectorAll('.feature-btn').forEach(b => b.classList.remove('active'));
752
+ document.getElementById(`btn${panelId.charAt(0).toUpperCase() + panelId.slice(1)}`)?.classList.add('active');
753
+
754
+ // Hide all panels
755
+ document.querySelectorAll('.panel').forEach(p => {
756
+ if (p.id !== 'panelPermissions') p.style.display = 'none';
757
+ });
758
+
759
+ // Show selected panel
760
+ const panel = document.getElementById(`panel${panelId.charAt(0).toUpperCase() + panelId.slice(1)}`);
761
+ if (panel) panel.style.display = 'block';
762
+
763
+ showToast(`πŸ“‘ ${panelId.charAt(0).toUpperCase() + panelId.slice(1)} panel opened`);
764
+ }
765
+
766
+ // ==================== CAMERA SCANNER ====================
767
+ async function startCamera() {
768
+ try {
769
+ cameraStream = await navigator.mediaDevices.getUserMedia({
770
+ video: { facingMode: 'environment' },
771
+ audio: false
772
+ });
773
+
774
+ const video = document.getElementById('videoElement');
775
+ video.srcObject = cameraStream;
776
+ video.style.display = 'block';
777
+
778
+ document.getElementById('cameraPreview').querySelector('div').style.display = 'none';
779
+ document.getElementById('scanOverlay').style.display = 'block';
780
+ document.getElementById('startCameraBtn').style.display = 'none';
781
+ document.getElementById('captureBtn').style.display = 'inline-block';
782
+ document.getElementById('stopCameraBtn').style.display = 'inline-block';
783
+
784
+ showToast('πŸ“· Camera active - point at apps to scan');
785
+
786
+ // Add scanning animation
787
+ video.style.animation = 'scanPulse 2s infinite';
788
+
789
+ } catch (err) {
790
+ showToast('⚠️ Camera access denied');
791
+ console.error(err);
792
+ }
793
+ }
794
+
795
+ function stopCamera() {
796
+ if (cameraStream) {
797
+ cameraStream.getTracks().forEach(track => track.stop());
798
+ cameraStream = null;
799
+ }
800
+
801
+ const video = document.getElementById('videoElement');
802
+ video.style.display = 'none';
803
+ document.getElementById('cameraPreview').querySelector('div').style.display = 'flex';
804
+ document.getElementById('scanOverlay').style.display = 'none';
805
+ document.getElementById('startCameraBtn').style.display = 'inline-block';
806
+ document.getElementById('captureBtn').style.display = 'none';
807
+ document.getElementById('stopCameraBtn').style.display = 'none';
808
+
809
+ showToast('πŸ“· Camera stopped');
810
+ }
811
+
812
+ function captureScan() {
813
+ // Simulate app scanning
814
+ document.getElementById('scanOverlay').classList.add('glitch');
815
+
816
+ setTimeout(() => {
817
+ document.getElementById('scanOverlay').classList.remove('glitch');
818
+
819
+ // Show results
820
+ const results = `
821
+ <div style="margin-top: 15px; padding: 12px; background: rgba(255,0,64,0.1); border-radius: 8px; border-left: 3px solid var(--neon-red);">
822
+ <div style="font-weight: bold; color: var(--neon-red);">⚠️ 2 SUSPICIOUS APPS DETECTED</div>
823
+ <div style="font-size: 0.75rem; color: var(--text-dim); margin-top: 8px;">
824
+ β€’ "Flashlight Pro" - Requests 12 permissions, not in official store<br>
825
+ β€’ "Free VPN" - No valid developer certificate
826
+ </div>
827
+ </div>
828
+ `;
829
+ document.getElementById('scanResults').innerHTML = results;
830
+
831
+ if (notificationsEnabled) sendNotification('πŸ‘Ύ APP THREAT DETECTED', '2 suspicious apps found');
832
+ showToast('⚠️ 2 app threats detected', true);
833
+
834
+ }, 1000);
835
+ }
836
+
837
+ // ==================== NETWORK ANALYZER ====================
838
+ function updateNetworkInfo() {
839
+ // Simulated network data
840
+ const netTypes = ['WiFi', 'Cellular 5G', 'Cellular 4G'];
841
+ const type = netTypes[Math.floor(Math.random() * netTypes.length)];
842
+ const quality = Math.floor(Math.random() * 30) + 70;
843
+
844
+ document.getElementById('netType').textContent = type;
845
+ document.getElementById('connType').textContent = `${type} - Unknown Network`;
846
+ document.getElementById('qualityFill').style.width = `${quality}%`;
847
+ document.getElementById('connSpeed').textContent = quality > 80 ? 'Excellent' : quality > 60 ? 'Good' : 'Fair';
848
+ document.getElementById('ipAddr').textContent = `192.168.1.${Math.floor(Math.random() * 255)}`;
849
+ document.getElementById('signalStr').textContent = `${-Math.floor(Math.random() * 40) - 40} dBm`;
850
+ document.getElementById('latency').textContent = `${Math.floor(Math.random() * 30) + 10}ms`;
851
+
852
+ const encryption = type === 'WiFi' ? (Math.random() > 0.3 ? 'WPA3' : 'WPA2') : 'N/A';
853
+ document.getElementById('encryption').textContent = encryption;
854
+ }
855
+
856
+ function refreshNetwork() {
857
+ updateNetworkInfo();
858
+ showToast('🌐 Network info refreshed');
859
+ }
860
+
861
+ // ==================== MALWARE SCANNER ====================
862
+ function renderMalware() {
863
+ const list = document.getElementById('malwareList');
864
+ list.innerHTML = malwareSignatures.map(m => `
865
+ <div class="malware-item ${m.detected ? 'detected' : ''}">
866
+ <span class="malware-icon">${m.detected ? 'πŸ‘Ύ' : 'βœ“'}</span>
867
+ <div class="malware-info">
868
+ <div class="malware-name">${m.name}</div>
869
+ <div class="malware-detail">${m.desc}</div>
870
+ </div>
871
+ <span class="malware-status ${m.detected ? 'infected' : 'clean'}">${m.detected ? 'DETECTED' : 'CLEAN'}</span>
872
+ </div>
873
+ `).join('');
874
+ }
875
+
876
+ function runMalwareScan() {
877
+ const progress = document.getElementById('scanProgress');
878
+ progress.classList.add('active');
879
+ const fill = document.getElementById('progressFill');
880
+ const text = document.getElementById('progressText');
881
+
882
+ let width = 0;
883
+ const interval = setInterval(() => {
884
+ width += 10;
885
+ fill.style.width = `${width}%`;
886
+ text.textContent = `Scanning signatures... ${width}%`;
887
+
888
+ if (width >= 100) {
889
+ clearInterval(interval);
890
+ progress.classList.remove('active');
891
+
892
+ const detected = malwareSignatures.filter(m => m.detected).length;
893
+ showToast(`πŸ‘Ύ Scan complete: ${detected} threats detected`, detected > 0);
894
+
895
+ if (notificationsEnabled && detected > 0) {
896
+ sendNotification('πŸ‘Ύ MALWARE DETECTED', `${detected} threats found on your device`);
897
+ }
898
+ }
899
+ }, 200);
900
+ }
901
+
902
+ // ==================== SCAN ====================
903
+ async function runFullScan() {
904
+ if (isScanning) return;
905
+ isScanning = true;
906
+
907
+ const btn = document.getElementById('scanBtn');
908
+ btn.classList.add('scanning');
909
+ btn.textContent = 'πŸ”„ SCANNING...';
910
+
911
+ const progress = document.getElementById('scanProgress');
912
+ progress.classList.add('active');
913
+ const fill = document.getElementById('progressFill');
914
+ const text = document.getElementById('progressText');
915
+
916
+ const steps = ['Scanning apps...', 'Checking permissions...', 'Analyzing network...', 'Detecting trackers...', 'Searching vulnerabilities...', 'Compiling report...'];
917
+
918
+ for (let i = 0; i < steps.length; i++) {
919
+ text.textContent = steps[i];
920
+ fill.style.width = `${((i + 1) / steps.length) * 100}%`;
921
+ await new Promise(r => setTimeout(r, 500));
922
+ }
923
+
924
+ document.getElementById('logo').classList.add('glitch');
925
+ setTimeout(() => document.getElementById('logo').classList.remove('glitch'), 300);
926
+
927
+ progress.classList.remove('active');
928
+ btn.classList.remove('scanning');
929
+ btn.textContent = 'πŸ” Full Security Patrol';
930
+ isScanning = false;
931
+
932
+ showToast(currentMode === 'red' ? 'πŸ”΄ DEEP SCAN COMPLETE' : 'πŸ”΅ SCAN COMPLETE', currentMode === 'red');
933
+
934
+ if (notificationsEnabled) {
935
+ sendNotification('πŸ›‘οΈ SCAN COMPLETE', currentMode === 'red ? '4 critical threats found' : '3 issues found');
936
+ }
937
+
938
+ updateStats();
939
+ renderThreats();
940
+ }
941
+
942
+ // ==================== NOTIFICATIONS ====================
943
+ function toggleNotifications() {
944
+ const toggle = document.getElementById('notifToggle');
945
+ notificationsEnabled = !notificationsEnabled;
946
+ toggle.classList.toggle('active', notificationsEnabled);
947
+
948
+ if (notificationsEnabled && 'Notification' in window && Notification.permission === 'default') {
949
+ Notification.requestPermission().then(p => {
950
+ showToast(p === 'granted' ? 'πŸ”” Alerts enabled' : '⚠️ Permission denied');
951
+ });
952
+ } else {
953
+ showToast(notificationsEnabled ? 'πŸ”” Alerts enabled' : 'πŸ”• Alerts disabled');
954
+ }
955
+ }
956
+
957
+ function sendNotification(title, body) {
958
+ if ('Notification' in window && Notification.permission === 'granted') {
959
+ new Notification(title, { body, icon: 'πŸ›‘οΈ', tag: 'neo-security' });
960
+ }
961
+ }
962
+
963
+ // ==================== HELPERS ====================
964
+ function renderThreats() {
965
+ const list = document.getElementById('threatList');
966
+ const current = threats[currentMode];
967
+ document.getElementById('logCount').textContent = `${current.length} found`;
968
+ list.innerHTML = current.map(t => `
969
+ <div class="threat-item ${t.level}">
970
+ <div class="threat-header">
971
+ <div class="threat-title">${t.title}</div>
972
+ <div class="threat-level ${t.level}">${t.level}</div>
973
+ </div>
974
+ <div class="threat-desc">${t.desc}</div>
975
+ <div class="threat-fix">πŸ’‘ ${t.fix}</div>
976
+ </div>
977
+ `).join('');
978
+ }
979
+
980
+ function renderPermissions() {
981
+ const list = document.getElementById('permissionList');
982
+ list.innerHTML = permissions.map(p => `
983
+ <div class="permission-item">
984
+ <div>
985
+ <div class="permission-name">${p.name}</div>
986
+ <div class="permission-apps">${p.apps}</div>
987
+ </div>
988
+ <div class="permission-status ${p.granted ? 'granted' : 'none'}">${p.granted ? 'Granted' : 'None'}</div>
989
+ </div>
990
+ `).join('');
991
+ }
992
+
993
+ function startMonitor() {
994
+ setInterval(() => {
995
+ document.getElementById('cpuUsage').textContent = `${Math.floor(Math.random() * 15) + 8}%`;
996
+ document.getElementById('memUsage').textContent = `${Math.floor(Math.random() * 20) + 60}%`;
997
+ document.getElementById('netCalls').textContent = `${Math.floor(Math.random() * 8) + 2}/min`;
998
+ document.getElementById('activeApps').textContent = Math.floor(Math.random() * 3) + 2;
999
+
1000
+ if (currentMode === 'red' && Math.random() < 0.02) {
1001
+ showToast('⚠️ Unusual network activity...', true);
1002
+ }
1003
+ }, 3000);
1004
+ }
1005
+
1006
+ function showToast(msg, isDanger = false) {
1007
+ const t = document.getElementById('toast');
1008
+ t.textContent = msg;
1009
+ t.classList.toggle('danger', isDanger);
1010
+ t.classList.add('show');
1011
+ setTimeout(() => t.classList.remove('show'), 3000);
1012
+ }
1013
+
1014
+ function navTo(section, btn) {
1015
+ document.querySelectorAll('.nav-btn').forEach(b => b.classList.remove('active'));
1016
+ btn.classList.add('active');
1017
+
1018
+ if (section === 'camera') showPanel('camera');
1019
+ else if (section === 'network') showPanel('network');
1020
+ else if (section === 'settings') showPanel('permissions');
1021
+ else showToast('πŸ“‘ Scan tab');
1022
+ }
1023
+ </script>
1024
+ </body>
1025
+ </html>