reaper-arcade-hub 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/styles.css +99 -9
- package/index.html +256 -73
- package/js/app.js +245 -0
- package/js/firebase-client.js +76 -2
- package/js/security-shield.js +39 -0
- package/js/visuals.js +171 -14
- package/main/css/styles.css +99 -9
- package/main/index.html +256 -73
- package/main/js/app.js +245 -0
- package/main/js/firebase-client.js +76 -2
- package/main/js/security-shield.js +39 -0
- package/main/js/visuals.js +171 -14
- package/package.json +1 -1
- package/verify/css/styles.css +99 -9
- package/verify/js/firebase-client.js +76 -2
- package/verify/js/security-shield.js +39 -0
- package/verify/js/visuals.js +171 -14
package/css/styles.css
CHANGED
|
@@ -452,20 +452,37 @@ body {
|
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
.game-card {
|
|
455
|
-
background:
|
|
456
|
-
border:
|
|
455
|
+
background: linear-gradient(145deg, rgba(8, 18, 36, 0.95) 0%, rgba(4, 10, 22, 0.98) 100%);
|
|
456
|
+
border: 1.5px solid var(--blue-border);
|
|
457
457
|
border-radius: var(--radius-md);
|
|
458
458
|
overflow: hidden;
|
|
459
459
|
cursor: pointer;
|
|
460
|
-
transition:
|
|
460
|
+
transition: transform 0.15s cubic-bezier(0.2, 0, 0.2, 1), box-shadow 0.25s ease, border-color 0.25s ease;
|
|
461
461
|
display: flex;
|
|
462
462
|
flex-direction: column;
|
|
463
|
+
position: relative;
|
|
464
|
+
transform-style: preserve-3d;
|
|
465
|
+
will-change: transform;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.game-card::after {
|
|
469
|
+
content: '';
|
|
470
|
+
position: absolute;
|
|
471
|
+
inset: 0;
|
|
472
|
+
background: radial-gradient(circle at var(--mouse-x, 50%) var(--mouse-y, 50%), rgba(0, 210, 255, 0.25) 0%, transparent 65%);
|
|
473
|
+
opacity: 0;
|
|
474
|
+
transition: opacity 0.3s ease;
|
|
475
|
+
pointer-events: none;
|
|
476
|
+
mix-blend-mode: screen;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.game-card:hover::after {
|
|
480
|
+
opacity: 1;
|
|
463
481
|
}
|
|
464
482
|
|
|
465
483
|
.game-card:hover {
|
|
466
|
-
transform: translateY(-4px);
|
|
467
484
|
border-color: var(--blue-bright);
|
|
468
|
-
box-shadow: 0
|
|
485
|
+
box-shadow: 0 16px 36px rgba(0, 0, 0, 0.8), 0 0 25px rgba(0, 136, 255, 0.45);
|
|
469
486
|
}
|
|
470
487
|
|
|
471
488
|
.game-thumb-container {
|
|
@@ -971,10 +988,83 @@ body {
|
|
|
971
988
|
border: 1px solid var(--blue-bright);
|
|
972
989
|
color: #fff;
|
|
973
990
|
padding: 0.65rem 1.4rem;
|
|
974
|
-
border-radius:
|
|
975
|
-
font-size: 0.
|
|
991
|
+
border-radius: 24px;
|
|
992
|
+
font-size: 0.85rem;
|
|
976
993
|
font-weight: 700;
|
|
977
|
-
box-shadow: 0
|
|
978
|
-
z-index:
|
|
994
|
+
box-shadow: 0 0 25px var(--blue-glow);
|
|
995
|
+
z-index: 99999;
|
|
979
996
|
display: none;
|
|
997
|
+
animation: toastPop 0.3s ease;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/* Fluid Tab Slide & Fade */
|
|
1001
|
+
.tab-section {
|
|
1002
|
+
animation: tabSlideFade 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
@keyframes tabSlideFade {
|
|
1006
|
+
from {
|
|
1007
|
+
opacity: 0;
|
|
1008
|
+
transform: translateY(10px) scale(0.99);
|
|
1009
|
+
}
|
|
1010
|
+
to {
|
|
1011
|
+
opacity: 1;
|
|
1012
|
+
transform: translateY(0) scale(1);
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
/* Recently Played Carousel Grid */
|
|
1017
|
+
.recent-bar-container {
|
|
1018
|
+
width: 100%;
|
|
1019
|
+
max-width: 680px;
|
|
1020
|
+
margin-bottom: 1.5rem;
|
|
1021
|
+
background: rgba(4, 12, 24, 0.85);
|
|
1022
|
+
border: 1.5px solid var(--blue-border);
|
|
1023
|
+
border-radius: var(--radius-md);
|
|
1024
|
+
padding: 0.85rem 1.15rem;
|
|
1025
|
+
box-shadow: 0 0 20px rgba(0, 136, 255, 0.15);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.recent-grid {
|
|
1029
|
+
display: grid;
|
|
1030
|
+
grid-template-columns: repeat(auto-fill, minmax(95px, 1fr));
|
|
1031
|
+
gap: 0.65rem;
|
|
1032
|
+
margin-top: 0.65rem;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
.recent-card {
|
|
1036
|
+
background: #020712;
|
|
1037
|
+
border: 1px solid var(--blue-border);
|
|
1038
|
+
border-radius: 6px;
|
|
1039
|
+
padding: 0.4rem;
|
|
1040
|
+
text-align: center;
|
|
1041
|
+
cursor: pointer;
|
|
1042
|
+
transition: all 0.2s cubic-bezier(0.2, 0, 0.2, 1);
|
|
1043
|
+
display: flex;
|
|
1044
|
+
flex-direction: column;
|
|
1045
|
+
align-items: center;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
.recent-card:hover {
|
|
1049
|
+
border-color: var(--blue-bright);
|
|
1050
|
+
transform: translateY(-3px) scale(1.04);
|
|
1051
|
+
box-shadow: 0 6px 18px rgba(0, 136, 255, 0.45);
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
.recent-card-img {
|
|
1055
|
+
width: 100%;
|
|
1056
|
+
aspect-ratio: 16/10;
|
|
1057
|
+
object-fit: cover;
|
|
1058
|
+
border-radius: 4px;
|
|
1059
|
+
margin-bottom: 0.3rem;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
.recent-card-name {
|
|
1063
|
+
font-size: 0.68rem;
|
|
1064
|
+
font-weight: 700;
|
|
1065
|
+
color: #fff;
|
|
1066
|
+
white-space: nowrap;
|
|
1067
|
+
overflow: hidden;
|
|
1068
|
+
text-overflow: ellipsis;
|
|
1069
|
+
width: 100%;
|
|
980
1070
|
}
|
package/index.html
CHANGED
|
@@ -94,6 +94,11 @@
|
|
|
94
94
|
<!-- Starfield Space Canvas -->
|
|
95
95
|
<canvas id="bg-canvas"></canvas>
|
|
96
96
|
|
|
97
|
+
<!-- Global Live Broadcast Alert Banner -->
|
|
98
|
+
<div id="global-broadcast-banner" style="display: none; background: linear-gradient(90deg, #ff0055, #ff8800); color: #fff; padding: 0.55rem 1rem; text-align: center; font-weight: 800; font-size: 0.85rem; letter-spacing: 0.05em; z-index: 99990; position: sticky; top: 0; box-shadow: 0 4px 15px rgba(255, 0, 85, 0.5);">
|
|
99
|
+
<span id="global-broadcast-text">🚨 SYSTEM ALERT</span>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
97
102
|
<!-- App Header -->
|
|
98
103
|
<header class="app-header">
|
|
99
104
|
<div class="nav-container">
|
|
@@ -106,12 +111,19 @@
|
|
|
106
111
|
<button class="nav-tab-btn active" data-tab="home" onclick="app.switchTab('home')">Home</button>
|
|
107
112
|
<button class="nav-tab-btn" data-tab="games" onclick="app.switchTab('games')">Games (788)</button>
|
|
108
113
|
<button class="nav-tab-btn" data-tab="leaderboard" onclick="app.switchTab('leaderboard')">Leaderboard</button>
|
|
109
|
-
<button class="nav-tab-btn" data-tab="shield" style="color: #00d2ff;" onclick="app.switchTab('shield')">🛡️ Shield</button>
|
|
110
114
|
<button class="nav-tab-btn" id="nav-tab-mod" style="display: none; color: #00ffaa;" data-tab="mod" onclick="app.switchTab('mod')">Mod</button>
|
|
111
115
|
<button class="nav-tab-btn" id="nav-tab-admin" style="display: none; color: #ffd700;" data-tab="admin" onclick="app.switchTab('admin')">Admin</button>
|
|
112
116
|
</nav>
|
|
113
117
|
|
|
114
118
|
<div class="header-right">
|
|
119
|
+
<button class="btn-stealth" id="btn-sfx-toggle" onclick="app.toggleSoundFX()" title="Toggle Sci-Fi SFX">
|
|
120
|
+
🔊 SFX
|
|
121
|
+
</button>
|
|
122
|
+
|
|
123
|
+
<button class="btn-stealth" onclick="if(window.reaperShield) window.reaperShield.togglePanicDisguise()" title="Emergency Panic Cloak (Hotkey: ~)">
|
|
124
|
+
🚨 Panic (~)
|
|
125
|
+
</button>
|
|
126
|
+
|
|
115
127
|
<button class="btn-stealth" onclick="app.openUpdateLogsModal()" title="View update logs">
|
|
116
128
|
Updates
|
|
117
129
|
</button>
|
|
@@ -124,6 +136,10 @@
|
|
|
124
136
|
<span class="bind-username" id="header-username-display">Reaper</span>
|
|
125
137
|
<span class="bind-rank rank-pill rank-member" id="header-rank-badge">MEMBER</span>
|
|
126
138
|
</div>
|
|
139
|
+
|
|
140
|
+
<button class="btn-stealth" id="btn-settings-toggle" onclick="app.openSettingsModal()" style="border-color: var(--blue-bright); color: #00d2ff; font-weight: 800;" title="Settings & Security Shield">
|
|
141
|
+
⚙️ Settings
|
|
142
|
+
</button>
|
|
127
143
|
</div>
|
|
128
144
|
</div>
|
|
129
145
|
</header>
|
|
@@ -140,7 +156,16 @@
|
|
|
140
156
|
<section id="section-home" class="tab-section">
|
|
141
157
|
<div class="opium-home-container">
|
|
142
158
|
<h1 class="opium-logo-title">reaper</h1>
|
|
143
|
-
<div class="opium-subtitle">788 High-Speed Unblocked Games & Live Leaderboard</div>
|
|
159
|
+
<div class="opium-subtitle">788 High-Speed Unblocked Games & Live Leaderboard</div>
|
|
160
|
+
|
|
161
|
+
<!-- Recently Played Bar -->
|
|
162
|
+
<div id="recent-games-container" class="recent-bar-container" style="display: none;">
|
|
163
|
+
<div style="display: flex; justify-content: space-between; align-items: center;">
|
|
164
|
+
<span style="font-size: 0.78rem; font-weight: 800; color: #00d2ff; letter-spacing: 0.05em; text-transform: uppercase;">⚡ RECENTLY PLAYED</span>
|
|
165
|
+
<button onclick="app.clearRecentlyPlayed()" class="btn-stealth" style="font-size: 0.68rem; padding: 0.2rem 0.5rem;">CLEAR</button>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="recent-grid" id="recent-games-grid"></div>
|
|
168
|
+
</div>
|
|
144
169
|
|
|
145
170
|
<!-- Pill Search Bar -->
|
|
146
171
|
<div class="opium-search-wrapper">
|
|
@@ -148,14 +173,20 @@
|
|
|
148
173
|
<input type="text" id="opium-search-input" class="opium-search-input" placeholder="Search 780+ games or topics..." autocomplete="off" onkeydown="if(event.key==='Enter') app.handleOpiumSearch()">
|
|
149
174
|
</div>
|
|
150
175
|
|
|
151
|
-
<!-- Quick Navigation Tiles -->
|
|
152
|
-
<div style="display: flex; gap: 0.85rem; flex-wrap: wrap; justify-content: center; max-width:
|
|
176
|
+
<!-- Quick Navigation Tiles & Save Manager -->
|
|
177
|
+
<div style="display: flex; gap: 0.85rem; flex-wrap: wrap; justify-content: center; max-width: 650px; margin-bottom: 1.25rem;">
|
|
153
178
|
<button class="btn-primary" style="padding: 0.75rem 1.4rem; font-size: 0.88rem;" onclick="app.switchTab('games')">
|
|
154
179
|
BROWSE 788 GAMES
|
|
155
180
|
</button>
|
|
156
181
|
<button class="btn-stealth" style="padding: 0.75rem 1.4rem; font-size: 0.88rem;" onclick="app.switchTab('leaderboard')">
|
|
157
182
|
PLAYTIME LEADERBOARD
|
|
158
183
|
</button>
|
|
184
|
+
<button class="btn-stealth" style="padding: 0.75rem 1.4rem; font-size: 0.88rem; color: #00ffaa; border-color: rgba(0,255,170,0.3);" onclick="app.exportSaveData()" title="Backup your game saves">
|
|
185
|
+
💾 BACKUP SAVES
|
|
186
|
+
</button>
|
|
187
|
+
<button class="btn-stealth" style="padding: 0.75rem 1.4rem; font-size: 0.88rem; color: #ffd700; border-color: rgba(255,215,0,0.3);" onclick="app.importSaveData()" title="Restore game save data">
|
|
188
|
+
📥 RESTORE SAVES
|
|
189
|
+
</button>
|
|
159
190
|
</div>
|
|
160
191
|
</div>
|
|
161
192
|
</section>
|
|
@@ -214,62 +245,6 @@
|
|
|
214
245
|
</div>
|
|
215
246
|
</section>
|
|
216
247
|
|
|
217
|
-
<!-- ========================================== -->
|
|
218
|
-
<!-- TAB: BROWSER EXTENSION SHIELD & FIREWALL -->
|
|
219
|
-
<!-- ========================================== -->
|
|
220
|
-
<section id="section-shield" class="tab-section" style="display: none;">
|
|
221
|
-
<div class="leaderboard-container">
|
|
222
|
-
<div class="leaderboard-header" style="border-color: #00d2ff;">
|
|
223
|
-
<div>
|
|
224
|
-
<h2 style="font-size: 1.6rem; color: #00d2ff; margin-bottom: 0.25rem; font-family: var(--font-heading);">
|
|
225
|
-
🛡️ BROWSER EXTENSION FIREWALL & SPY DEFENDER
|
|
226
|
-
</h2>
|
|
227
|
-
<p style="color: var(--text-sub); font-size: 0.85rem;">
|
|
228
|
-
Live extension detection engine. Scans, cuts, and isolates all school surveillance hooks and DOM sniffers.
|
|
229
|
-
</p>
|
|
230
|
-
</div>
|
|
231
|
-
<div style="text-align: right;">
|
|
232
|
-
<button class="btn-primary" onclick="app.purgeAllExtensionHooks()" style="background: #ff0055; border-color: #ff3377; padding: 0.6rem 1.2rem; font-size: 0.82rem;">
|
|
233
|
-
⚡ DISABLE & PURGE ALL HOOKS
|
|
234
|
-
</button>
|
|
235
|
-
</div>
|
|
236
|
-
</div>
|
|
237
|
-
|
|
238
|
-
<!-- Controls & Status Strip -->
|
|
239
|
-
<div style="display: flex; justify-content: space-between; align-items: center; background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px; margin-bottom: 1.5rem; flex-wrap: wrap; gap: 1rem;">
|
|
240
|
-
<div style="display: flex; gap: 1.5rem; align-items: center;">
|
|
241
|
-
<div>
|
|
242
|
-
<span style="font-size: 0.72rem; color: #88aacc; text-transform: uppercase; display: block;">SHIELD STATUS</span>
|
|
243
|
-
<strong style="color: #00ffaa; font-size: 0.95rem;">ACTIVE & ENFORCING</strong>
|
|
244
|
-
</div>
|
|
245
|
-
<div>
|
|
246
|
-
<span style="font-size: 0.72rem; color: #88aacc; text-transform: uppercase; display: block;">ISOLATION INTEGRITY</span>
|
|
247
|
-
<strong style="color: #00d2ff; font-size: 0.95rem;">100% SECURE</strong>
|
|
248
|
-
</div>
|
|
249
|
-
</div>
|
|
250
|
-
|
|
251
|
-
<div style="display: flex; gap: 1rem; align-items: center;">
|
|
252
|
-
<label style="display: flex; align-items: center; gap: 0.5rem; cursor: pointer; color: #fff; font-size: 0.82rem; font-weight: 700;">
|
|
253
|
-
<input type="checkbox" id="auto-shield-toggle" style="width: 20px; height: 20px; accent-color: #0088ff;" onchange="app.toggleAutoShield(this.checked)" checked>
|
|
254
|
-
AUTO-PURGE ON EVERY VISIT
|
|
255
|
-
</label>
|
|
256
|
-
<button class="btn-stealth" onclick="app.refreshExtensionScan()" style="padding: 0.4rem 0.85rem; font-size: 0.78rem;">
|
|
257
|
-
🔄 RESCAN BROWSER
|
|
258
|
-
</button>
|
|
259
|
-
</div>
|
|
260
|
-
</div>
|
|
261
|
-
|
|
262
|
-
<!-- Detected Extensions Matrix -->
|
|
263
|
-
<div style="font-size: 0.82rem; color: #88aacc; font-weight: 800; margin-bottom: 0.75rem; letter-spacing: 0.05em; text-transform: uppercase;">
|
|
264
|
-
DETECTED EXTENSIONS & SPY PROBES:
|
|
265
|
-
</div>
|
|
266
|
-
|
|
267
|
-
<div id="shield-extensions-list" style="display: flex; flex-direction: column; gap: 0.6rem;">
|
|
268
|
-
<!-- Extensions rendered dynamically -->
|
|
269
|
-
</div>
|
|
270
|
-
</div>
|
|
271
|
-
</section>
|
|
272
|
-
|
|
273
248
|
<!-- ========================================== -->
|
|
274
249
|
<!-- TAB 4: CHAT MOD TAB (MOD ONLY) -->
|
|
275
250
|
<!-- ========================================== -->
|
|
@@ -281,6 +256,15 @@
|
|
|
281
256
|
<span class="rank-pill rank-mod">CHAT MOD ACCESS</span>
|
|
282
257
|
</div>
|
|
283
258
|
|
|
259
|
+
<!-- Slow Mode Toggle for Mods -->
|
|
260
|
+
<div class="mod-section" style="display: flex; justify-content: space-between; align-items: center;">
|
|
261
|
+
<div>
|
|
262
|
+
<strong style="color: #fff; font-size: 0.92rem;">CHAT SLOW-MODE (5 SECONDS)</strong>
|
|
263
|
+
<p style="color: #88aacc; font-size: 0.78rem;">Enforces a 5-second cooldown between messages to prevent spamming.</p>
|
|
264
|
+
</div>
|
|
265
|
+
<input type="checkbox" id="mod-slowmode-toggle" style="width: 22px; height: 22px; cursor: pointer; accent-color: #00ffaa;" onchange="app.toggleSlowMode(this.checked)">
|
|
266
|
+
</div>
|
|
267
|
+
|
|
284
268
|
<!-- Timeout User Box -->
|
|
285
269
|
<div class="mod-section">
|
|
286
270
|
<h3 style="font-size: 0.95rem; color: #fff; margin-bottom: 0.35rem;">TIMEOUT / MUTE USER</h3>
|
|
@@ -296,7 +280,7 @@
|
|
|
296
280
|
<!-- Live Chat Logs with Quick Actions -->
|
|
297
281
|
<div class="mod-section">
|
|
298
282
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem;">
|
|
299
|
-
<h3 style="font-size: 0.95rem; color: #fff;">LIVE CHAT LOGS & MESSAGE PURGE</h3>
|
|
283
|
+
<h3 style="font-size: 0.95rem; color: #fff;">LIVE CHAT LOGS & MESSAGE PURGE</h3>
|
|
300
284
|
</div>
|
|
301
285
|
<p style="color: #88aacc; font-size: 0.8rem; margin-bottom: 0.75rem;">Click DEL to remove rulebreaking messages or TIMEOUT to mute the user.</p>
|
|
302
286
|
<div id="mod-chat-logs" style="max-height: 280px; overflow-y: auto; background: #040912; border: 1px solid var(--blue-border); border-radius: 4px;"></div>
|
|
@@ -318,26 +302,47 @@
|
|
|
318
302
|
</div>
|
|
319
303
|
</div>
|
|
320
304
|
|
|
321
|
-
<!--
|
|
305
|
+
<!-- Superpower: Global Live Broadcast Alert -->
|
|
306
|
+
<div class="admin-section" style="border-color: #ff0055; background: #18030c;">
|
|
307
|
+
<h3 style="font-size: 0.95rem; color: #ff3377; margin-bottom: 0.4rem;">👑 GLOBAL LIVE BROADCAST BANNER</h3>
|
|
308
|
+
<p style="color: #ff99bb; font-size: 0.8rem; margin-bottom: 0.75rem;">Display an instant sticky banner across all players' screens in real time.</p>
|
|
309
|
+
<div style="display: flex; gap: 0.5rem; flex-wrap: wrap;">
|
|
310
|
+
<input type="text" id="admin-broadcast-msg" class="red-chat-input" placeholder="Type global announcement message..." autocomplete="off" style="flex: 1; min-width: 250px;">
|
|
311
|
+
<button class="btn-primary" style="background: #ff0055; border-color: #ff3377;" onclick="app.sendGlobalAlert()">BROADCAST TO ALL PLAYERS</button>
|
|
312
|
+
<button class="btn-stealth" onclick="app.clearGlobalAlert()" style="color: #ff8888;">CLEAR BANNER</button>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
<!-- Superpower: Chat Slow-Mode Switch -->
|
|
317
|
+
<div class="admin-section" style="display: flex; justify-content: space-between; align-items: center;">
|
|
318
|
+
<div>
|
|
319
|
+
<strong style="color: #fff; font-size: 0.95rem;">CHAT SLOW-MODE (5-SECOND COOLDOWN)</strong>
|
|
320
|
+
<p style="color: #88aacc; font-size: 0.8rem;">Enforces a 5-second interval between chat messages for non-owner players.</p>
|
|
321
|
+
</div>
|
|
322
|
+
<input type="checkbox" id="admin-slowmode-toggle" style="width: 22px; height: 22px; cursor: pointer; accent-color: #00d2ff;" onchange="app.toggleSlowMode(this.checked)">
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
<!-- Connected Players Directory (With Promote/Demote/Kick/Ban) -->
|
|
322
326
|
<div class="admin-section">
|
|
323
|
-
<
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
<!-- Users rendered dynamically -->
|
|
327
|
+
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem;">
|
|
328
|
+
<h3 style="font-size: 0.95rem; color: #fff;">LIVE PLAYERS DIRECTORY & ROLES</h3>
|
|
329
|
+
<button onclick="app.renderAdminUsersDirectory()" class="btn-stealth" style="font-size: 0.75rem;">REFRESH LIST</button>
|
|
327
330
|
</div>
|
|
331
|
+
<p style="color: #88aacc; font-size: 0.8rem; margin-bottom: 0.65rem;">Manage connected users, promote to Chat Mod, de-rank, kick, or permanently ban.</p>
|
|
332
|
+
<div id="admin-users-directory" style="max-height: 200px; overflow-y: auto; display: flex; flex-direction: column; gap: 0.4rem;"></div>
|
|
328
333
|
</div>
|
|
329
334
|
|
|
330
|
-
<!-- Key Generator
|
|
335
|
+
<!-- Custom Access Key Generator -->
|
|
331
336
|
<div class="admin-section">
|
|
332
337
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem;">
|
|
333
|
-
<h3 style="font-size: 0.95rem; color: #fff;">KEY GENERATOR
|
|
334
|
-
<button onclick="app.clearAllKeys()" class="btn-stealth" style="color: #ff5555; border-color: #771111; font-size: 0.
|
|
338
|
+
<h3 style="font-size: 0.95rem; color: #fff;">CUSTOM ACCESS KEY GENERATOR</h3>
|
|
339
|
+
<button onclick="app.clearAllKeys()" class="btn-stealth" style="color: #ff5555; border-color: #771111; font-size: 0.75rem;">PURGE ALL KEYS</button>
|
|
335
340
|
</div>
|
|
336
|
-
<p style="color: #88aacc; font-size: 0.8rem; margin-bottom: 0.
|
|
341
|
+
<p style="color: #88aacc; font-size: 0.8rem; margin-bottom: 0.65rem;">Generate keys with custom durations (e.g. 3 Days, 5 Days, Lifetime) and usage limits.</p>
|
|
337
342
|
|
|
338
343
|
<!-- Custom Key Creation Input -->
|
|
339
344
|
<div style="display: flex; gap: 0.5rem; margin-bottom: 0.85rem; flex-wrap: wrap; align-items: center;">
|
|
340
|
-
<input type="text" id="admin-custom-key-input" class="red-chat-input" placeholder="Blank for REAPER-$$$ (or
|
|
345
|
+
<input type="text" id="admin-custom-key-input" class="red-chat-input" placeholder="Blank for REAPER-$$$ (or custom name)" autocomplete="off" style="max-width: 250px;">
|
|
341
346
|
|
|
342
347
|
<select id="admin-custom-key-rank" style="background: #040912; color: #fff; border: 1px solid var(--blue-border); border-radius: 6px; padding: 0.45rem 0.65rem; font-size: 0.8rem; font-weight: 700;">
|
|
343
348
|
<option value="member">Rank: Member</option>
|
|
@@ -366,7 +371,7 @@
|
|
|
366
371
|
<button class="btn-primary" style="padding: 0.5rem 1.15rem;" onclick="app.createCustomKey()">GENERATE KEY</button>
|
|
367
372
|
</div>
|
|
368
373
|
|
|
369
|
-
<div style="font-size: 0.78rem; color: #88aacc; margin-bottom: 0.3rem;">ACTIVE KEYS & REMAINING USES:</div>
|
|
374
|
+
<div style="font-size: 0.78rem; color: #88aacc; margin-bottom: 0.3rem;">ACTIVE KEYS & REMAINING USES:</div>
|
|
370
375
|
<div id="admin-keys-list" style="max-height: 180px; overflow-y: auto;"></div>
|
|
371
376
|
</div>
|
|
372
377
|
|
|
@@ -408,7 +413,7 @@
|
|
|
408
413
|
<div style="display: flex; justify-content: space-between; align-items: center;">
|
|
409
414
|
<div>
|
|
410
415
|
<strong style="color: #ffbb33; font-size: 0.95rem;">PAUSE / FREEZE ALL ACCESS KEYS</strong>
|
|
411
|
-
<p style="color: #ffe099; font-size: 0.8rem;">When paused, no new key logins can occur on the gateway. Key durations & remaining uses are frozen and preserved.</p>
|
|
416
|
+
<p style="color: #ffe099; font-size: 0.8rem;">When paused, no new key logins can occur on the gateway. Key durations & remaining uses are frozen and preserved.</p>
|
|
412
417
|
</div>
|
|
413
418
|
<input type="checkbox" id="admin-keys-locked-toggle" style="width: 24px; height: 24px; cursor: pointer; accent-color: #ffaa00;" onchange="app.toggleKeysLocked(this.checked)">
|
|
414
419
|
</div>
|
|
@@ -534,6 +539,184 @@
|
|
|
534
539
|
</div>
|
|
535
540
|
</div>
|
|
536
541
|
|
|
542
|
+
<!-- Emergency Google Classroom Panic Disguise Overlay -->
|
|
543
|
+
<div id="panic-disguise-overlay" style="position: fixed; inset: 0; width: 100vw; height: 100vh; background: #f8f9fa; color: #3c4043; font-family: 'Roboto', -apple-system, BlinkMacSystemFont, Arial, sans-serif; z-index: 999999; display: none; overflow-y: auto;">
|
|
544
|
+
<!-- Classroom Top Bar -->
|
|
545
|
+
<div style="height: 64px; background: #ffffff; border-bottom: 1px solid #dadce0; display: flex; align-items: center; justify-content: space-between; padding: 0 1.5rem;">
|
|
546
|
+
<div style="display: flex; align-items: center; gap: 1rem;">
|
|
547
|
+
<span style="font-size: 1.5rem; cursor: pointer; color: #5f6368;">☰</span>
|
|
548
|
+
<div style="display: flex; align-items: center; gap: 0.5rem;">
|
|
549
|
+
<img src="https://ssl.gstatic.com/classroom/favicon.png" width="24" height="24" alt="Google Classroom">
|
|
550
|
+
<span style="font-size: 1.25rem; font-weight: 500; color: #3c4043;">Google Classroom</span>
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
<div style="display: flex; align-items: center; gap: 1rem;">
|
|
554
|
+
<span style="font-size: 0.85rem; color: #5f6368;">Period 4 • Mathematics</span>
|
|
555
|
+
<button onclick="if(window.reaperShield) window.reaperShield.togglePanicDisguise()" style="background: #e8f0fe; border: 1px solid #d2e3fc; color: #1a73e8; border-radius: 4px; padding: 0.35rem 0.75rem; font-size: 0.75rem; font-weight: 600; cursor: pointer;">Exit Disguise (Press ~)</button>
|
|
556
|
+
<div style="width: 32px; height: 32px; border-radius: 50%; background: #1a73e8; color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;">S</div>
|
|
557
|
+
</div>
|
|
558
|
+
</div>
|
|
559
|
+
|
|
560
|
+
<!-- Classroom Stream -->
|
|
561
|
+
<div style="max-width: 1000px; margin: 2rem auto; padding: 0 1.5rem;">
|
|
562
|
+
<div style="height: 180px; background: linear-gradient(135deg, #1e8e3e, #137333); border-radius: 8px; padding: 1.5rem; color: #fff; display: flex; flex-direction: column; justify-content: flex-end; margin-bottom: 1.5rem; box-shadow: 0 1px 3px rgba(0,0,0,0.12);">
|
|
563
|
+
<h1 style="font-size: 1.8rem; margin: 0;">AP Calculus & Analytical Geometry</h1>
|
|
564
|
+
<p style="margin: 0.25rem 0 0 0; opacity: 0.9; font-size: 0.95rem;">Instructor: Dr. Harrison • Room 302</p>
|
|
565
|
+
</div>
|
|
566
|
+
|
|
567
|
+
<div style="display: grid; grid-template-columns: 240px 1fr; gap: 1.5rem;">
|
|
568
|
+
<div style="background: #fff; border: 1px solid #dadce0; border-radius: 8px; padding: 1rem; height: fit-content;">
|
|
569
|
+
<h3 style="font-size: 0.95rem; margin-bottom: 0.75rem;">Upcoming</h3>
|
|
570
|
+
<p style="font-size: 0.85rem; color: #5f6368; margin-bottom: 0.5rem;">Due Friday, 11:59 PM</p>
|
|
571
|
+
<a href="#" style="color: #1a73e8; font-size: 0.88rem; text-decoration: none;">Unit 4 Practice: Derivative Applications</a>
|
|
572
|
+
</div>
|
|
573
|
+
|
|
574
|
+
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
575
|
+
<div style="background: #fff; border: 1px solid #dadce0; border-radius: 8px; padding: 1.25rem;">
|
|
576
|
+
<div style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem;">
|
|
577
|
+
<div style="width: 36px; height: 36px; border-radius: 50%; background: #137333; color: #fff; display: flex; align-items: center; justify-content: center; font-weight: bold;">H</div>
|
|
578
|
+
<div>
|
|
579
|
+
<strong style="font-size: 0.9rem;">Dr. Harrison</strong>
|
|
580
|
+
<div style="font-size: 0.75rem; color: #5f6368;">Posted Yesterday at 8:45 AM</div>
|
|
581
|
+
</div>
|
|
582
|
+
</div>
|
|
583
|
+
<p style="font-size: 0.88rem; line-height: 1.5; color: #3c4043;">Please review Section 4.2 in the digital textbook before tomorrow's lecture. Completed problem sets 1-15 will be collected at the start of class.</p>
|
|
584
|
+
</div>
|
|
585
|
+
</div>
|
|
586
|
+
</div>
|
|
587
|
+
</div>
|
|
588
|
+
</div>
|
|
589
|
+
|
|
590
|
+
<!-- Settings & Security Suite Modal -->
|
|
591
|
+
<div id="settings-modal" style="position: fixed; inset: 0; background: rgba(0, 4, 10, 0.85); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); z-index: 99995; display: none; align-items: center; justify-content: center; padding: 1.5rem;">
|
|
592
|
+
<div style="background: linear-gradient(145deg, #061124 0%, #030814 100%); border: 1.5px solid var(--blue-border); border-radius: 14px; width: 100%; max-width: 850px; max-height: 90vh; display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 0 45px rgba(0, 136, 255, 0.35);">
|
|
593
|
+
|
|
594
|
+
<!-- Settings Header -->
|
|
595
|
+
<div style="padding: 1rem 1.4rem; border-bottom: 1px solid var(--blue-border); display: flex; justify-content: space-between; align-items: center; background: #020712;">
|
|
596
|
+
<div style="display: flex; align-items: center; gap: 0.6rem;">
|
|
597
|
+
<span style="font-size: 1.2rem;">⚙️</span>
|
|
598
|
+
<span style="font-family: var(--font-heading); font-weight: 800; font-size: 1.1rem; color: #fff;">SETTINGS & SECURITY SUITE</span>
|
|
599
|
+
</div>
|
|
600
|
+
<button onclick="app.closeSettingsModal()" class="btn-stealth" style="padding: 0.3rem 0.65rem; font-size: 0.9rem; font-weight: bold;">✕</button>
|
|
601
|
+
</div>
|
|
602
|
+
|
|
603
|
+
<!-- Settings Sub-Tabs -->
|
|
604
|
+
<div style="display: flex; border-bottom: 1px solid var(--blue-border); background: #030a18; padding: 0.5rem 1.4rem; gap: 0.5rem; overflow-x: auto;">
|
|
605
|
+
<button class="nav-tab-btn active" id="st-tab-btn-shield" onclick="app.switchSettingsTab('shield')" style="padding: 0.45rem 1rem; font-size: 0.82rem;">🛡️ Security Shield</button>
|
|
606
|
+
<button class="nav-tab-btn" id="st-tab-btn-prefs" onclick="app.switchSettingsTab('prefs')" style="padding: 0.45rem 1rem; font-size: 0.82rem;">⚡ Preferences & Audio</button>
|
|
607
|
+
<button class="nav-tab-btn" id="st-tab-btn-saves" onclick="app.switchSettingsTab('saves')" style="padding: 0.45rem 1rem; font-size: 0.82rem;">💾 Game Saves</button>
|
|
608
|
+
<button class="nav-tab-btn" id="st-tab-btn-identity" onclick="app.switchSettingsTab('identity')" style="padding: 0.45rem 1rem; font-size: 0.82rem;">🔑 Device & Rank</button>
|
|
609
|
+
</div>
|
|
610
|
+
|
|
611
|
+
<!-- Settings Content Body -->
|
|
612
|
+
<div style="padding: 1.4rem; overflow-y: auto; flex: 1;">
|
|
613
|
+
|
|
614
|
+
<!-- SUBTAB 1: SECURITY SHIELD -->
|
|
615
|
+
<div id="st-content-shield">
|
|
616
|
+
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.25rem; flex-wrap: wrap; gap: 1rem;">
|
|
617
|
+
<div>
|
|
618
|
+
<h3 style="font-size: 1.15rem; color: #00d2ff; font-family: var(--font-heading); margin-bottom: 0.2rem;">
|
|
619
|
+
🛡️ BROWSER EXTENSION FIREWALL & SPY DEFENDER
|
|
620
|
+
</h3>
|
|
621
|
+
<p style="color: var(--text-sub); font-size: 0.82rem;">
|
|
622
|
+
Scans, isolates, and terminates school surveillance hooks, screen snipers, and keyloggers.
|
|
623
|
+
</p>
|
|
624
|
+
</div>
|
|
625
|
+
<button class="btn-primary" onclick="app.purgeAllExtensionHooks()" style="background: #ff0055; border-color: #ff3377; padding: 0.6rem 1.2rem; font-size: 0.82rem;">
|
|
626
|
+
⚡ DISABLE & PURGE ALL HOOKS
|
|
627
|
+
</button>
|
|
628
|
+
</div>
|
|
629
|
+
|
|
630
|
+
<div style="display: flex; justify-content: space-between; align-items: center; background: #040e1e; border: 1px solid var(--blue-border); padding: 0.85rem 1.15rem; border-radius: 8px; margin-bottom: 1.25rem; flex-wrap: wrap; gap: 1rem;">
|
|
631
|
+
<div style="display: flex; gap: 1.5rem; align-items: center;">
|
|
632
|
+
<div>
|
|
633
|
+
<span style="font-size: 0.7rem; color: #88aacc; text-transform: uppercase; display: block;">SHIELD STATUS</span>
|
|
634
|
+
<strong style="color: #00ffaa; font-size: 0.92rem;">ACTIVE & ENFORCING</strong>
|
|
635
|
+
</div>
|
|
636
|
+
<div>
|
|
637
|
+
<span style="font-size: 0.7rem; color: #88aacc; text-transform: uppercase; display: block;">ISOLATION INTEGRITY</span>
|
|
638
|
+
<strong style="color: #00d2ff; font-size: 0.92rem;">100% SECURE</strong>
|
|
639
|
+
</div>
|
|
640
|
+
</div>
|
|
641
|
+
|
|
642
|
+
<div style="display: flex; gap: 1rem; align-items: center;">
|
|
643
|
+
<label style="display: flex; align-items: center; gap: 0.5rem; cursor: pointer; color: #fff; font-size: 0.8rem; font-weight: 700;">
|
|
644
|
+
<input type="checkbox" id="auto-shield-toggle" style="width: 18px; height: 18px; accent-color: #0088ff;" onchange="app.toggleAutoShield(this.checked)" checked>
|
|
645
|
+
AUTO-PURGE ON VISIT
|
|
646
|
+
</label>
|
|
647
|
+
<button class="btn-stealth" onclick="app.refreshExtensionScan()" style="padding: 0.35rem 0.75rem; font-size: 0.75rem;">
|
|
648
|
+
🔄 RESCAN BROWSER
|
|
649
|
+
</button>
|
|
650
|
+
</div>
|
|
651
|
+
</div>
|
|
652
|
+
|
|
653
|
+
<div style="font-size: 0.78rem; color: #88aacc; font-weight: 800; margin-bottom: 0.6rem; letter-spacing: 0.05em; text-transform: uppercase;">
|
|
654
|
+
DETECTED EXTENSIONS & SPY PROBES:
|
|
655
|
+
</div>
|
|
656
|
+
<div id="shield-extensions-list" style="display: flex; flex-direction: column; gap: 0.55rem;"></div>
|
|
657
|
+
</div>
|
|
658
|
+
|
|
659
|
+
<!-- SUBTAB 2: PREFERENCES & AUDIO -->
|
|
660
|
+
<div id="st-content-prefs" style="display: none;">
|
|
661
|
+
<div style="display: flex; flex-direction: column; gap: 1.2rem;">
|
|
662
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px; display: flex; justify-content: space-between; align-items: center;">
|
|
663
|
+
<div>
|
|
664
|
+
<strong style="color: #fff; font-size: 0.95rem;">🔊 Sci-Fi Synthesizer Sound FX</strong>
|
|
665
|
+
<p style="color: #88aacc; font-size: 0.8rem;">Play high-tech audio blips on card hover, tab clicks, and game launch.</p>
|
|
666
|
+
</div>
|
|
667
|
+
<button class="btn-primary" onclick="app.toggleSoundFX()" style="font-size: 0.82rem; padding: 0.5rem 1.2rem;">TOGGLE SFX</button>
|
|
668
|
+
</div>
|
|
669
|
+
|
|
670
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
671
|
+
<strong style="color: #00d2ff; font-size: 0.95rem;">🚨 Emergency Panic Cloak Hotkey</strong>
|
|
672
|
+
<p style="color: #88aacc; font-size: 0.8rem; margin-top: 0.35rem; line-height: 1.4;">
|
|
673
|
+
Press the <kbd style="background: #000; border: 1px solid var(--blue-bright); color: #00d2ff; padding: 0.15rem 0.45rem; border-radius: 4px; font-weight: bold;">~</kbd> (Tilde / Backquote) key at any moment to instantly disguise the site as <strong>Google Classroom</strong> with authentic assignments. Press <kbd style="background: #000; border: 1px solid var(--blue-bright); color: #00d2ff; padding: 0.15rem 0.45rem; border-radius: 4px; font-weight: bold;">~</kbd> again to exit disguise.
|
|
674
|
+
</p>
|
|
675
|
+
</div>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
|
|
679
|
+
<!-- SUBTAB 3: GAME SAVES -->
|
|
680
|
+
<div id="st-content-saves" style="display: none;">
|
|
681
|
+
<div style="display: flex; flex-direction: column; gap: 1.2rem;">
|
|
682
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
683
|
+
<strong style="color: #00ffaa; font-size: 0.95rem;">💾 Export & Backup Game Save Data</strong>
|
|
684
|
+
<p style="color: #88aacc; font-size: 0.8rem; margin: 0.4rem 0 0.85rem 0;">Download a single backup file containing all your local progress for Slope, Subway Surfers, BitLife, Retro Bowl, 1v1.LOL, and more.</p>
|
|
685
|
+
<button class="btn-primary" onclick="app.exportSaveData()" style="background: #00ffaa; color: #000; border-color: #00ffaa; font-size: 0.82rem;">💾 DOWNLOAD SAVE BACKUP</button>
|
|
686
|
+
</div>
|
|
687
|
+
|
|
688
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
689
|
+
<strong style="color: #ffd700; font-size: 0.95rem;">📥 Import & Restore Game Save Data</strong>
|
|
690
|
+
<p style="color: #88aacc; font-size: 0.8rem; margin: 0.4rem 0 0.85rem 0;">Upload a previously downloaded JSON save backup file to restore all your game saves instantly.</p>
|
|
691
|
+
<button class="btn-primary" onclick="app.importSaveData()" style="background: #ffd700; color: #000; border-color: #ffd700; font-size: 0.82rem;">📥 RESTORE SAVE BACKUP</button>
|
|
692
|
+
</div>
|
|
693
|
+
</div>
|
|
694
|
+
</div>
|
|
695
|
+
|
|
696
|
+
<!-- SUBTAB 4: IDENTITY & HWID -->
|
|
697
|
+
<div id="st-content-identity" style="display: none;">
|
|
698
|
+
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
699
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
700
|
+
<div style="font-size: 0.72rem; color: #88aacc; text-transform: uppercase; margin-bottom: 0.25rem;">CURRENT USERNAME</div>
|
|
701
|
+
<div id="st-display-username" style="font-size: 1.1rem; font-weight: 800; color: #fff;">-</div>
|
|
702
|
+
</div>
|
|
703
|
+
|
|
704
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
705
|
+
<div style="font-size: 0.72rem; color: #88aacc; text-transform: uppercase; margin-bottom: 0.25rem;">SECURITY ROLE / RANK</div>
|
|
706
|
+
<div id="st-display-rank" style="font-size: 1rem; font-weight: 800; color: #00d2ff;">MEMBER</div>
|
|
707
|
+
</div>
|
|
708
|
+
|
|
709
|
+
<div style="background: #040e1e; border: 1px solid var(--blue-border); padding: 1rem 1.25rem; border-radius: 8px;">
|
|
710
|
+
<div style="font-size: 0.72rem; color: #88aacc; text-transform: uppercase; margin-bottom: 0.25rem;">DEVICE HARDWARE ID (HWID HASH)</div>
|
|
711
|
+
<div id="st-display-hwid" style="font-family: var(--font-mono); font-size: 0.85rem; color: #88aacc;">-</div>
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
</div>
|
|
715
|
+
|
|
716
|
+
</div>
|
|
717
|
+
</div>
|
|
718
|
+
</div>
|
|
719
|
+
|
|
537
720
|
<!-- Toast -->
|
|
538
721
|
<div id="toast-box" class="toast-box"></div>
|
|
539
722
|
|