infamous-test 1.0.0
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/.claude/settings.local.json +11 -0
- package/baremux/index.js +2 -0
- package/baremux/index.mjs +2 -0
- package/baremux/worker.js +136 -0
- package/index.html +1117 -0
- package/libcurl/index.cjs +6471 -0
- package/libcurl/index.js +6471 -0
- package/libcurl/index.mjs +6452 -0
- package/package.json +17 -0
- package/start.html +53 -0
- package/uv/sw.js +45 -0
- package/uv/uv.bundle.js +8 -0
- package/uv/uv.client.js +5 -0
- package/uv/uv.config.js +27 -0
- package/uv/uv.handler.js +2 -0
- package/uv/uv.sw.js +48 -0
package/index.html
ADDED
|
@@ -0,0 +1,1117 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width">
|
|
7
|
+
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK0SURBVEjHvZZNaBNBFMf/s5tsNklNk5I0NmJra7VaFRGLiBcRvCh48qIg9OBB8KIeBDyIZ8GTHgQRPIh4EKoIIoKCWpQWpKhUW8XYNqGpTZo0X7vZ3dnxsEmaNtlEqv7hsTPvzfzezLz3ZoH/LAKg8HT8E8ePx8vVc1qtgAJOXMpKQ2OdyDQm+YQ3LY3HSuJEAR//Ck60gAJCJOpBvL7j+PbZIk8EIJVDXr2A+wC6rOPQmEQPV0MqLzk1HjlnAsz/bwDPAXgLcGxeAIxNXADJdYC+KHhJKv+eFRMGDwHuJXC8v0Z8Uq1g6uNoLJavqNQHeFYGHq4FvLLJz1UBYGxiDSChgJT0AuoOARwPIv7cTHnFX/Fg7B6O9gEmn5yLn2lmUKt1/Hh8eA2AawFKANwFsPE/AKwDmH5W0Y37AO1lT7iMU7dOnxvHq5tDnYB5TDk2DngJMPlfADBH9ydG3EWAmqJrrU/Pwo2BDDZ7dLjtSPsAjpQANP0LgKlppwrASwCt/wLAFoB7E3xt7DzA8/8IoBwQqpKCzWYcADhcBGEaYHqtzQDeAhxZCaDpQb++r4UjFGMXw/eLxvMhALgM8B6AOsD/DYAS/W67sPH0EADJfgG4O3A6VQ+QKDVhdUwB6JdyDwC0LQCk7N/D8fEOAD5aNQYARitJOQqQCQDr/xMAIYD0AvI7AC4CnPkPAL4C0g2Z9wxAvxwAwQVEKE8YGqsH0ALQAkDiPwFQB9hSArAZNPpfACrJ1bwigPEvgHAtwL1VAlgJsO8ngDoAQ+UAXwFuA+jeegHNAqxfBcAmAP1VIBsA9v4HAEHAVoD2FQBY+S8AMRC9AQBYfj0AF/4CgCaAjQCm/gJAC0DH/+wI7gCw8C8ArATwexVIDKB/z0IAk/8BwHqAuQD+AnT8BeC9AKkAAAAASUVORK5CYII=">
|
|
8
|
+
<title>infamous</title>
|
|
9
|
+
|
|
10
|
+
<!-- Tailwind CSS -->
|
|
11
|
+
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
|
|
12
|
+
|
|
13
|
+
<!-- Font Awesome from CDN -->
|
|
14
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
15
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/remixicon@4.0.0/fonts/remixicon.css">
|
|
16
|
+
|
|
17
|
+
<!-- Eruda for mobile dev tools -->
|
|
18
|
+
<script src="https://cdn.jsdelivr.net/npm/eruda@3.4.3/eruda.min.js"></script>
|
|
19
|
+
|
|
20
|
+
<meta name="title" content="Infamous">
|
|
21
|
+
<meta name="description" content="A state of the art unblocked games website. Clean, customizable, and powerful.">
|
|
22
|
+
<meta name="robots" content="index, nofollow">
|
|
23
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
24
|
+
<meta name="language" content="English">
|
|
25
|
+
<meta name="author" content="Infamous Team">
|
|
26
|
+
|
|
27
|
+
<!-- Base path configuration for unpkg -->
|
|
28
|
+
<script>
|
|
29
|
+
const INFAMOUS_BASE = (function() {
|
|
30
|
+
const path = window.location.pathname;
|
|
31
|
+
const match = path.match(/^(\/[^\/]+@[^\/]+\/|\/[^\/]+\/)/);
|
|
32
|
+
return match ? match[1] : '/';
|
|
33
|
+
})();
|
|
34
|
+
window.INFAMOUS_BASE = INFAMOUS_BASE;
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<!-- Embedded CSS: colors.css (default theme) -->
|
|
38
|
+
<style id="theme-default">
|
|
39
|
+
:root {
|
|
40
|
+
--bg: #220f17;
|
|
41
|
+
--bg-2: #3f1e2b;
|
|
42
|
+
--bg-3: #57293c;
|
|
43
|
+
--bg-4: #85415d8c;
|
|
44
|
+
--bg-5: #1a0b11;
|
|
45
|
+
--border: #ebd5ddc7;
|
|
46
|
+
--border-2: #ebd5dd70;
|
|
47
|
+
--border-3: #ebd5dd30;
|
|
48
|
+
--border-4: #ebd5dd1a;
|
|
49
|
+
--text: #c0c0c0;
|
|
50
|
+
--bright-text: #ffffff;
|
|
51
|
+
--accent: #e2588d;
|
|
52
|
+
--accent-2: #c44ac4;
|
|
53
|
+
}
|
|
54
|
+
#reset-theme { display: none !important; }
|
|
55
|
+
</style>
|
|
56
|
+
|
|
57
|
+
<!-- Theme CSS variables (all themes embedded) -->
|
|
58
|
+
<style id="theme-styles">
|
|
59
|
+
/* void */
|
|
60
|
+
[data-theme="void"] {
|
|
61
|
+
--bg: #0c0c0c; --bg-2: #131313; --bg-3: #272727; --bg-4: #5252528c; --bg-5: #000000;
|
|
62
|
+
--border: #ebe3d5c7; --border-2: #ebe3d570; --border-3: #e0e0e030; --border-4: #b4b4b41a;
|
|
63
|
+
--text: #c2c2c2; --bright-text: #ffffff; --accent: #ffffff; --accent-2: #adadad;
|
|
64
|
+
}
|
|
65
|
+
/* ocean */
|
|
66
|
+
[data-theme="ocean"] {
|
|
67
|
+
--bg: #0a1828; --bg-2: #1a2f42; --bg-3: #2a4562; --bg-4: #3d5f7f8c; --bg-5: #050f18;
|
|
68
|
+
--border: #d0e8f2c7; --border-2: #d0e8f270; --border-3: #d0e8f230; --border-4: #d0e8f21a;
|
|
69
|
+
--text: #b8cfe0; --bright-text: #ffffff; --accent: #4fc3f7; --accent-2: #3a6ddb;
|
|
70
|
+
}
|
|
71
|
+
/* forest */
|
|
72
|
+
[data-theme="forest"] {
|
|
73
|
+
--bg: #0f2215; --bg-2: #1e3f29; --bg-3: #29573c; --bg-4: #41855d8c; --bg-5: #0b1a11;
|
|
74
|
+
--border: #d5ebd8c7; --border-2: #d5ebd870; --border-3: #d5ebd830; --border-4: #d5ebd81a;
|
|
75
|
+
--text: #b8c9bc; --bright-text: #ffffff; --accent: #58e282; --accent-2: #4ac48b;
|
|
76
|
+
}
|
|
77
|
+
/* ember */
|
|
78
|
+
[data-theme="ember"] {
|
|
79
|
+
--bg: #220f0f; --bg-2: #3f1e1e; --bg-3: #572929; --bg-4: #85414f8c; --bg-5: #1a0b0b;
|
|
80
|
+
--border: #ebd5d5c7; --border-2: #ebd5d570; --border-3: #ebd5d530; --border-4: #ebd5d51a;
|
|
81
|
+
--text: #c9b8b8; --bright-text: #ffffff; --accent: #e25858; --accent-2: #c4674a;
|
|
82
|
+
}
|
|
83
|
+
/* midnight */
|
|
84
|
+
[data-theme="midnight"] {
|
|
85
|
+
--bg: #0d0d1a; --bg-2: #1a1a2f; --bg-3: #252542; --bg-4: #3a3a5f8c; --bg-5: #080810;
|
|
86
|
+
--border: #d8d8e8c7; --border-2: #d8d8e870; --border-3: #d8d8e830; --border-4: #d8d8e81a;
|
|
87
|
+
--text: #b8b8d0; --bright-text: #ffffff; --accent: #7a7aff; --accent-2: #9f66e0;
|
|
88
|
+
}
|
|
89
|
+
/* dunes */
|
|
90
|
+
[data-theme="dunes"] {
|
|
91
|
+
--bg: #221a0f; --bg-2: #3f311e; --bg-3: #574429; --bg-4: #856a418c; --bg-5: #1a140b;
|
|
92
|
+
--border: #ebe3d5c7; --border-2: #ebe3d570; --border-3: #ebe3d530; --border-4: #ebe3d51a;
|
|
93
|
+
--text: #c9c0b8; --bright-text: #ffffff; --accent: #e2a058; --accent-2: #c47b4a;
|
|
94
|
+
}
|
|
95
|
+
/* lavendar */
|
|
96
|
+
[data-theme="lavendar"] {
|
|
97
|
+
--bg: #1a0f22; --bg-2: #2f1e3f; --bg-3: #3d2957; --bg-4: #5f41858c; --bg-5: #140b1a;
|
|
98
|
+
--border: #e3d5ebc7; --border-2: #e3d5eb70; --border-3: #e3d5eb30; --border-4: #e3d5eb1a;
|
|
99
|
+
--text: #c0b8c9; --bright-text: #ffffff; --accent: #a558e2; --accent-2: #7f4ac4;
|
|
100
|
+
}
|
|
101
|
+
/* coral */
|
|
102
|
+
[data-theme="coral"] {
|
|
103
|
+
--bg: #22120f; --bg-2: #3f241e; --bg-3: #573329; --bg-4: #85534f8c; --bg-5: #1a0e0b;
|
|
104
|
+
--border: #ebe0d5c7; --border-2: #ebe0d570; --border-3: #ebe0d530; --border-4: #ebe0d51a;
|
|
105
|
+
--text: #c9beb8; --bright-text: #ffffff; --accent: #e27858; --accent-2: #c4634a;
|
|
106
|
+
}
|
|
107
|
+
/* golden */
|
|
108
|
+
[data-theme="golden"] {
|
|
109
|
+
--bg: #22150f; --bg-2: #3f281e; --bg-3: #573829; --bg-4: #85594f8c; --bg-5: #1a100b;
|
|
110
|
+
--border: #ebe6d5c7; --border-2: #ebe6d570; --border-3: #ebe6d530; --border-4: #ebe6d51a;
|
|
111
|
+
--text: #c9c2b8; --bright-text: #ffffff; --accent: #e2b458; --accent-2: #c49c4a;
|
|
112
|
+
}
|
|
113
|
+
/* lime */
|
|
114
|
+
[data-theme="lime"] {
|
|
115
|
+
--bg: #181c0f; --bg-2: #2d331e; --bg-3: #3f4829; --bg-4: #5e6c418c; --bg-5: #12150b;
|
|
116
|
+
--border: #e3e8d5c7; --border-2: #e3e8d570; --border-3: #e3e8d530; --border-4: #e3e8d51a;
|
|
117
|
+
--text: #c0c5b8; --bright-text: #ffffff; --accent: #a5e258; --accent-2: #8ec44a;
|
|
118
|
+
}
|
|
119
|
+
/* magenta */
|
|
120
|
+
[data-theme="magenta"] {
|
|
121
|
+
--bg: #220f1e; --bg-2: #3f1e37; --bg-3: #57294b; --bg-4: #85417a8c; --bg-5: #1a0b16;
|
|
122
|
+
--border: #ebd5e6c7; --border-2: #ebd5e670; --border-3: #ebd5e630; --border-4: #ebd5e61a;
|
|
123
|
+
--text: #c0b8c4; --bright-text: #ffffff; --accent: #e258d2; --accent-2: #c44ab8;
|
|
124
|
+
}
|
|
125
|
+
/* neon */
|
|
126
|
+
[data-theme="neon"] {
|
|
127
|
+
--bg: #1a1a1a; --bg-2: #2e2e2e; --bg-3: #424242; --bg-4: #5a5a5a8c; --bg-5: #121212;
|
|
128
|
+
--border: #e0e0e0c7; --border-2: #e0e0e070; --border-3: #e0e0e030; --border-4: #e0e0e01a;
|
|
129
|
+
--text: #c0c0c0; --bright-text: #ffffff; --accent: #00e5ff; --accent-2: #00c7e0;
|
|
130
|
+
}
|
|
131
|
+
/* royal blue */
|
|
132
|
+
[data-theme="royal blue"] {
|
|
133
|
+
--bg: #0f1622; --bg-2: #1e273f; --bg-3: #293757; --bg-4: #415085; --bg-5: #0b111a;
|
|
134
|
+
--border: #d5dcebc7; --border-2: #d5dceb70; --border-3: #d5dceb30; --border-4: #d5dceb1a;
|
|
135
|
+
--text: #b8bfc9; --bright-text: #ffffff; --accent: #587ae2; --accent-2: #4a66c4;
|
|
136
|
+
}
|
|
137
|
+
/* sea */
|
|
138
|
+
[data-theme="sea"] {
|
|
139
|
+
--bg: #0f1a22; --bg-2: #1e2f3f; --bg-3: #294257; --bg-4: #415d858c; --bg-5: #0b1419;
|
|
140
|
+
--border: #d5dfebc7; --border-2: #d5dfeb70; --border-3: #d5dfeb30; --border-4: #d5dfeb1a;
|
|
141
|
+
--text: #b8c3c9; --bright-text: #ffffff; --accent: #58c8e2; --accent-2: #4aadc4;
|
|
142
|
+
}
|
|
143
|
+
/* violet */
|
|
144
|
+
[data-theme="violet"] {
|
|
145
|
+
--bg: #1f0f22; --bg-2: #381e3f; --bg-3: #4d2957; --bg-4: #6e41858c; --bg-5: #170b1a;
|
|
146
|
+
--border: #e8d5ebc7; --border-2: #e8d5eb70; --border-3: #e8d5eb30; --border-4: #e8d5eb1a;
|
|
147
|
+
--text: #c4b8c9; --bright-text: #ffffff; --accent: #d258e2; --accent-2: #b84ac4;
|
|
148
|
+
}
|
|
149
|
+
/* mint */
|
|
150
|
+
[data-theme="mint"] {
|
|
151
|
+
--bg: #0f221c; --bg-2: #1e3f35; --bg-3: #29574a; --bg-4: #41856f8c; --bg-5: #0b1a15;
|
|
152
|
+
--border: #d5ebe3c7; --border-2: #d5ebe370; --border-3: #d5ebe330; --border-4: #d5ebe31a;
|
|
153
|
+
--text: #b8c9c3; --bright-text: #ffffff; --accent: #58e2b4; --accent-2: #4ac0c4;
|
|
154
|
+
}
|
|
155
|
+
</style>
|
|
156
|
+
|
|
157
|
+
<!-- Main index.css embedded -->
|
|
158
|
+
<style>
|
|
159
|
+
html, body { margin: 0; width: 100%; height: 100%; color: var(--text); background-color: var(--bg-5); }
|
|
160
|
+
.grid { background: linear-gradient(to right, rgba(255, 255, 255, 0.021) 1px, transparent 1px), linear-gradient(to bottom, rgba(255, 255, 255, 0.022) 1px, transparent 1px); mask-image: radial-gradient(white 10%, transparent); position: fixed; width: 100%; height: 100vh; left: 50%; top: 50%; transform: translate(-50%, -50%); background-size: 20px 20px; }
|
|
161
|
+
nav { background: color-mix(in srgb, var(--bg) 25%, transparent 75%); backdrop-filter: blur(10px); border: 1px solid var(--border-4); z-index: 5; border-radius: 20px; width: fit-content; margin-top: 10px; height: 50px; opacity: 1; position: fixed; left: 50%; padding-left: 3px; padding-right: 3px; transform: translateX(-50%); overflow: hidden; pointer-events: none; transition: 0.35s; }
|
|
162
|
+
nav ul { list-style-type: none; margin: 0; padding: 0; overflow: hidden; background: transparent; display: flex; justify-content: center; transition: 0.2s; }
|
|
163
|
+
nav ul li { margin: 2px; background: none; border: 0px solid rgba(255, 255, 255, 0.171); border-radius: 15px; width: 40px; aspect-ratio: 1; margin-top: 4px; height: 40px; transition: 0.15s; pointer-events: all; }
|
|
164
|
+
nav ul li.divider { width: 3px; background: var(--bg-2); pointer-events: none; height: 25px; position: relative; top: 50%; transform: translateY(25%); }
|
|
165
|
+
nav ul li:hover { background: color-mix(in srgb, var(--bg-3) 60%, transparent 40%); cursor: pointer; }
|
|
166
|
+
nav ul li.divider:hover { pointer-events: none; }
|
|
167
|
+
nav ul li a { color: white; text-decoration: none; display: flex; align-items: center; cursor: pointer; }
|
|
168
|
+
nav ul li a i { position: relative; left: 50%; transform: translate(-50%, 11%); font-size: 22px; cursor: pointer; }
|
|
169
|
+
#contentFrame { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; border: none; z-index: 1; }
|
|
170
|
+
#homeContent { position: fixed; text-align: center; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1; }
|
|
171
|
+
.home-gradient { background: linear-gradient(to bottom right, var(--accent), var(--accent-2)); background-clip: text; color: transparent; }
|
|
172
|
+
#homesearch { background: transparent; height: 50px; padding: 10px 20px; width: 355px; border-radius: 20px; color: white; font-size: 14px; font-family: Arial; transition: 0.2s; border: none; }
|
|
173
|
+
#homesearch:focus { outline: none; }
|
|
174
|
+
.searchathome { background: color-mix(in srgb, rgba(255 255 255 0.2) 25%, transparent 75%); border: 2px solid transparent; box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); border-radius: 20px; transition: 0.15s; text-wrap: none; width: max-content; }
|
|
175
|
+
.searchathome i { margin-right: -3%; margin-left: 2%; }
|
|
176
|
+
.searchathome:has(#homesearch:focus) { background: color-mix(in srgb, var(--bg-2) 50%, transparent 50%); }
|
|
177
|
+
.hcontainer { display: flex; flex-direction: row; }
|
|
178
|
+
.settings-container, .chat-container { background: color-mix(in srgb, var(--bg) 30%, transparent 70%); backdrop-filter: blur(10px); border: 2px solid transparent; box-shadow: 0 0 0 0.5px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); border-radius: 25px; color: var(--text); width: 625px; height: 50vh; position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 50; transition: 0.25s; padding: 2px; transform-origin: center center; filter: drop-shadow(0 0 15px var(--bg-5)); }
|
|
179
|
+
.version-tag { position: absolute; bottom: 15px; left: 17.5px; font-size: 14px; }
|
|
180
|
+
.settings-sidebar { width: 25%; padding: 2px; position: relative; left: 0; margin: 4px; top: 0; }
|
|
181
|
+
.settings-section { padding: 10px; background: transparent; border-radius: 15px; cursor: pointer; transition: 0.2s; margin: 2px; }
|
|
182
|
+
.settings-section:hover { background: var(--bg-2); }
|
|
183
|
+
.vflex { display: flex; flex-direction: column; }
|
|
184
|
+
.settings-section i { margin-right: 6px; }
|
|
185
|
+
.settings-content-container { width: 67%; position: absolute; right: 0; top: 4%; margin: 4px; margin-left: 18px; left: 26%; height: 45vh; overflow-y: auto; padding-right: 12px; }
|
|
186
|
+
::-webkit-scrollbar { width: 5px; background: var(--bg-2); border-radius: 34897px; transition: 0.5s; }
|
|
187
|
+
::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 2349876px; }
|
|
188
|
+
.settings-content-container h2 { font-size: 24px; margin-bottom: 7px; font-weight: 550; }
|
|
189
|
+
.settings-content-container p { color: var(--text); font-size: 14px; font-weight: 350; margin-bottom: 7px; }
|
|
190
|
+
.settings-page { display: none; }
|
|
191
|
+
.settings-page.settings-active { display: block; }
|
|
192
|
+
p a { text-decoration: none; position: relative; color: var(--bright-text); text-underline-offset: 2px; text-decoration-thickness: 1px; transition: 0.2s; }
|
|
193
|
+
.settings-hidden { transform: translate(-50%, -50%) scale(.9); opacity: 0; pointer-events: none; transform-origin: center center; }
|
|
194
|
+
.settings-shown { transform: translate(-50%, -50%) scale(1); opacity: 1; pointer-events: all; transform-origin: center center; }
|
|
195
|
+
.blurOverlay { z-index: 1; width: 100%; height: 100vh; position: fixed; top: 0; left: 0; backdrop-filter: blur(3px) brightness(0.75); }
|
|
196
|
+
.browser-container { background: var(--bg-5); width: 100%; height: 100vh; position: fixed; top: 0; left: 0; z-index: 6; transition: 0.2s; opacity: 0; pointer-events: none; }
|
|
197
|
+
.browser-frame { width: 99.25%; height: 88.85vh; position: fixed; top: 100px; left: 50%; transform: translateX(-50%); border-top-left-radius: 15px; border-top-right-radius: 15px; border: 1px var(--bg-4) solid; display: none; z-index: 1000; opacity: 0; pointer-events: none; }
|
|
198
|
+
.browser-frame.active { display: block; opacity: 1; pointer-events: all; }
|
|
199
|
+
.browser-controls { height: 200px; position: fixed; width: 100%; left: 0; }
|
|
200
|
+
.tabs { height: 100px; margin-bottom: -45px; width: 100%; margin-left: 5px; margin-right: 5px; top: 0; left: 0; display: flex; }
|
|
201
|
+
.browser-buttons { height: 100px; width: 100%; flex: 1; justify-content: center; display: inline-block; position: fixed; left: 50%; transform: translateX(-50%); }
|
|
202
|
+
.browser-buttons button { margin-right: 2px; margin-left: 2px; height: 35px; width: 35px; aspect-ratio: 1; padding: 0px; margin-top: 2px; font-size: 15px; border-radius: 50%; transition: 0.2s; cursor: pointer; background: var(--bg-2); border: none; color: var(--text); }
|
|
203
|
+
.browser-buttons button:hover { background: var(--bg-3); }
|
|
204
|
+
.browser-buttons input { background: var(--bg); border-radius: 15px; height: 40px; padding: 5px 20px; width: 90%; transition: 0.2s; margin-left: 10px; margin-right: 10px; color: var(--text); font-family: arial; outline: none; font-size: 14px; border: none; }
|
|
205
|
+
.browser-buttons input:focus { background: var(--bg-2); outline: none; }
|
|
206
|
+
.tab { background: var(--bg); width: 200px; padding: 10px 20px; border-radius: 15px; margin: 5px; transition: 0.2s; height: 43px; cursor: default; }
|
|
207
|
+
.tab span { overflow: hidden; width: 80%; margin-right: -50px; mask-image: linear-gradient(to right, black 70%, transparent 100%); }
|
|
208
|
+
.tab:hover { background: var(--bg-2); }
|
|
209
|
+
.tab.active { background: var(--bg-3); }
|
|
210
|
+
.tab img { width: 24px; height: 24px; margin-right: 5px; margin-left: -5px; }
|
|
211
|
+
.tab .close-btn { font-size: 20px; position: relative; top: 10%; right: -30%; cursor: pointer; transition: 0.2s; }
|
|
212
|
+
.tab .close-btn:hover { color: var(--accent); }
|
|
213
|
+
.newtab { background: var(--bg-2); height: 35px; width: 35px; border-radius: 50%; margin-top: 9px; transition: 0.2s; cursor: pointer; border: none; color: var(--text); }
|
|
214
|
+
.newtab:hover { background: var(--bg-3); }
|
|
215
|
+
.apps-wrapper, .games-wrapper { position: fixed; height: 70vh; width: 1000px; padding: 15px; backdrop-filter: blur(10px); background: color-mix(in srgb, var(--bg) 30%, transparent 70%); border: 2px solid transparent; box-shadow: 0 0 0 .5px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); border-radius: 25px; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 6; transition: 0.2s; transform-origin: center center; }
|
|
216
|
+
.partners-wrapper { position: fixed; height: 60vh; width: 500px; padding: 15px; backdrop-filter: blur(10px); background: color-mix(in srgb, var(--bg) 30%, transparent 70%); border: 2px solid transparent; box-shadow: 0 0 0 .5px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); border-radius: 25px; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 6; transition: 0.2s; transform-origin: center center; }
|
|
217
|
+
.apps-container, .games-container { width: 975px; }
|
|
218
|
+
.app { background: var(--bg-2); border-radius: 25px; height: 175px; width: 175px; margin: 8px; padding: 0; overflow: hidden; transition: 0.2s; position: relative; cursor: pointer; margin-bottom: 3px; transition: 0.3s; }
|
|
219
|
+
.app .bg-img { background-size: cover !important; position: relative !important; background-repeat: no-repeat !important; left: 0 !important; top: 0 !important; width: 100%; height: 100%; z-index: 0; background-position: center; transition: 0.3s; }
|
|
220
|
+
.app .app-title-cont { z-index: 31; transition: 0.2s; position: absolute; left: 15px; bottom: -15px; opacity: 0; }
|
|
221
|
+
.app .app-title-cont h2 { font-weight: bold; color: white; }
|
|
222
|
+
.app:hover .app-title-cont { bottom: 15px; opacity: 1; }
|
|
223
|
+
.app:hover .bg-img { filter: brightness(0.5) blur(3px); }
|
|
224
|
+
.app:hover { scale: 1.05; }
|
|
225
|
+
.app.partner-square { height: 150px; width: 150px; }
|
|
226
|
+
button.button { padding: 8px 16px; backdrop-filter: blur(10px); background: color-mix(in srgb, var(--bg-2) 30%, transparent 70%); border: 2px solid transparent; box-shadow: 0 0 0 .5px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); border: none; border-radius: 15px; color: var(--text); cursor: pointer; transition: 0.2s; margin: 3px; }
|
|
227
|
+
button.button:hover { background: var(--bg-3); }
|
|
228
|
+
#vanta-fog-container { position: fixed; z-index: 0; opacity: 0.3; left: 0; top: 0; width: 100vw; height: 100vh; }
|
|
229
|
+
.browser-loading { background: var(--bg); height: 3px; width: 200px; position: relative; transform: translate(-50%, -50%); left: 50%; top: 55%; border-radius: 100px; }
|
|
230
|
+
.browser-loading::after { content: ""; position: absolute; height: 100%; background: var(--accent); left: 0; border-radius: 100px; bottom: 0; width: 100%; animation: browser-loading-lol .75s infinite ease; }
|
|
231
|
+
@keyframes browser-loading-lol { 0% { transform-origin: left; transform: scaleX(0); } 50% { transform-origin: left; transform: scaleX(1); } 50.01% { transform-origin: right; transform: scaleX(1); } 100% { transform-origin: right; transform: scaleX(0); } }
|
|
232
|
+
@keyframes rotationlmao { 0% { rotate: 0deg; } 100% { rotate: 360deg; } }
|
|
233
|
+
.switch { --switch-width: 66px; --switch-height: 34px; --switch-bg: var(--bg-2); --switch-checked-bg: var(--accent); --switch-offset: calc((var(--switch-height) - var(--circle-diameter)) / 2); --switch-transition: all .3s cubic-bezier(0.27, 0.2, 0.25, 1.51); --circle-diameter: 24px; --circle-bg: #fff; --circle-shadow: 1px 1px 2px rgba(146, 146, 146, 0.45); --circle-checked-shadow: -1px 1px 2px rgba(163, 163, 163, 0.45); --circle-transition: var(--switch-transition); --icon-transition: all .2s cubic-bezier(0.27, 0.2, 0.25, 1.51); --icon-cross-color: var(--switch-bg); --icon-cross-size: 6px; --icon-checkmark-color: var(--switch-checked-bg); --icon-checkmark-size: 10px; --effect-width: calc(var(--circle-diameter) / 2); --effect-height: calc(var(--effect-width) / 2 - 1px); --effect-bg: var(--circle-bg); --effect-border-radius: 1px; --effect-transition: all .2s ease-in-out; }
|
|
234
|
+
.switch input { display: none; }
|
|
235
|
+
.switch { display: inline-block; user-select: none; }
|
|
236
|
+
.switch svg { transition: var(--icon-transition); position: absolute; height: auto; }
|
|
237
|
+
.switch .checkmark { width: var(--icon-checkmark-size); color: var(--icon-checkmark-color); transform: scale(0); }
|
|
238
|
+
.switch .cross { width: var(--icon-cross-size); color: var(--icon-cross-color); }
|
|
239
|
+
.slider { box-sizing: border-box; width: var(--switch-width); height: var(--switch-height); background: var(--switch-bg); border-radius: 999px; display: flex; align-items: center; position: relative; transition: var(--switch-transition); cursor: pointer; }
|
|
240
|
+
.circle { width: var(--circle-diameter); height: var(--circle-diameter); background: var(--circle-bg); border-radius: inherit; box-shadow: var(--circle-shadow); display: flex; align-items: center; justify-content: center; transition: var(--circle-transition); z-index: 1; position: absolute; left: var(--switch-offset); }
|
|
241
|
+
.slider::before { content: ""; position: absolute; width: var(--effect-width); height: var(--effect-height); left: calc(var(--switch-offset) + (var(--effect-width) / 2)); background: var(--effect-bg); border-radius: var(--effect-border-radius); transition: var(--effect-transition); }
|
|
242
|
+
.switch input:checked+.slider { background: var(--switch-checked-bg); }
|
|
243
|
+
.switch input:checked+.slider .checkmark { transform: scale(1); }
|
|
244
|
+
.switch input:checked+.slider .cross { transform: scale(0); }
|
|
245
|
+
.switch input:checked+.slider::before { left: calc(100% - var(--effect-width) - (var(--effect-width) / 0) - var(--switch-offset)); }
|
|
246
|
+
.switch input:checked+.slider .circle { left: calc(100% - var(--circle-diameter) - var(--switch-offset)); box-shadow: var(--circle-checked-shadow); }
|
|
247
|
+
#reset-theme { background: red; font-size: 40px; color: white; border-radius: 25px; padding: 10px; position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 329486238475324869; cursor: pointer; }
|
|
248
|
+
#gohomeblock { height: 50px; width: 50px; background: color-mix(in srgb, var(--bg) 55%, transparent 45%); position: absolute; right: 15px; top: 15px; font-size: 20px; border-radius: 15px; transition: 0.2s; z-index: 9324768; cursor: pointer; border: 2px solid transparent; display: none; box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.15), 0 16px 32px rgba(0, 0, 0, 0.12); }
|
|
249
|
+
#gohomeblock:hover { scale: 1.05; }
|
|
250
|
+
.online-users { position: absolute; left: 50%; bottom: 5px; font-size: 15px; transform: translateX(-50%); opacity: .45; }
|
|
251
|
+
.wispInput { height: 50px; padding: 25px 15px; color: var(--text); background: color-mix(in srgb, var(--bg-2) 50%, transparent 50%); border-radius: 15px; text-align: left !important; width: 300px; margin-right: 5px; outline: none; transition: 0.2s; border: none; }
|
|
252
|
+
.wispInput:focus { background: color-mix(in srgb, var(--bg-2) 90%, transparent 10%); }
|
|
253
|
+
.custom-wisp-input { display: none; margin-top: 10px; }
|
|
254
|
+
.custom-wisp-input.show { display: block; }
|
|
255
|
+
</style>
|
|
256
|
+
|
|
257
|
+
<!-- Toast CSS -->
|
|
258
|
+
<style>
|
|
259
|
+
.toast-container { position: fixed; bottom: -20px; transform: translateY(96vh); right: 20px; z-index: 2147483647; width: 300px; height: fit-content; }
|
|
260
|
+
.toast { position: absolute; bottom: 0; right: 0; width: calc(100% - 10px); padding: 13px 10px; margin: 5px; border-radius: 13px; font-size: 13px; color: white; font-weight: 350; border: 1.5px solid var(--border-4); transition: transform 0.3s ease, opacity 0.3s ease; display: flex; align-items: center; overflow: hidden; transform-origin: bottom center; scale: 1; }
|
|
261
|
+
.toast.is-hiding { transform: translateY(20px) !important; opacity: 0 !important; transition-timing-function: ease-in; }
|
|
262
|
+
.toast.success, .toast.error, .toast.info { background: linear-gradient(to bottom, color-mix(in srgb, var(--bg-5) 60%, transparent), color-mix(in srgb, var(--bg-5) 60%, transparent)); backdrop-filter: blur(5px); }
|
|
263
|
+
.toast-content { display: flex; align-items: center; flex-grow: 1; }
|
|
264
|
+
.toast i { font-size: 15px; margin-right: 8px; }
|
|
265
|
+
</style>
|
|
266
|
+
|
|
267
|
+
<!-- Dropdown CSS -->
|
|
268
|
+
<style>
|
|
269
|
+
.transport-selector, .search-engine-selector, .backend-selector, .decoy-selector, .cloak-link-selector, .wisp-selector, .theme-selector, .store-selector { position: relative; width: 98%; max-width: 300px; margin-bottom: 15px; }
|
|
270
|
+
.transport-selected, .search-engine-selected, .backend-selected, .decoy-selected, .cloak-link-selected, .wisp-selected, .theme-selected, .store-selected { background-color: color-mix(in srgb, var(--bg) 30%, transparent 70%); border: 2px solid var(--bg-2); color: #e0e0e0; padding: 10px; border-radius: 15px; cursor: pointer; display: flex; justify-content: space-between; align-items: center; transition: all 0.1s ease; }
|
|
271
|
+
.transport-selected:hover, .search-engine-selected:hover, .backend-selected:hover, .decoy-selected:hover, .cloak-link-selected:hover, .wisp-selected:hover, .theme-selected:hover, .store-selected:hover { background-color: var(--bg-3); }
|
|
272
|
+
.transport-selected::after, .search-engine-selected::after, .backend-selected::after, .decoy-selected::after, .cloak-link-selected::after, .wisp-selected::after, .theme-selected::after, .store-selected::after { content: "\f107"; font-family: "Font Awesome 6 Free"; font-weight: 900; font-size: 0.8em; transition: all 0.3s ease; }
|
|
273
|
+
.transport-selected.transport-arrow-active::after, .search-engine-selected.search-engine-arrow-active::after, .backend-selected.backend-arrow-active::after, .decoy-selected.decoy-arrow-active::after, .cloak-link-selected.cloak-link-arrow-active::after, .wisp-selected.wisp-arrow-active::after, .theme-selected.theme-arrow-active::after, .store-selected.store-arrow-active::after { transform: rotate(180deg); }
|
|
274
|
+
.transport-options, .search-engine-options, .backend-options, .decoy-options, .cloak-link-options, .wisp-options, .theme-options, .store-options { position: absolute; top: 100%; margin-top: 5px; left: 0; right: 0; color: #9b9b9b; background-color: color-mix(in srgb, var(--bg) 90%, transparent 10%); backdrop-filter: blur(20px); border: 2px solid var(--bg-2); border-radius: 15px; max-height: 0; text-align: left; overflow-x: hidden; overflow-y: auto; transition: all 0.3s ease; opacity: 0; z-index: 10; padding: 3px 0; }
|
|
275
|
+
.transport-options.transport-show, .search-engine-options.search-engine-show, .backend-options.backend-show, .decoy-options.decoy-show, .cloak-link-options.cloak-link-show, .wisp-options.wisp-show, .theme-options.theme-show, .store-options.store-show { max-height: 400px; opacity: 1; }
|
|
276
|
+
.transport-options div, .search-engine-options div, .backend-options div, .decoy-options div, .cloak-link-options div, .wisp-options div, .theme-options div, .store-options div { padding: 8px; border-radius: 10px; cursor: pointer; width: 98%; margin: 0 auto; transition: all 0.1s ease; }
|
|
277
|
+
.transport-options div:hover, .search-engine-options div:hover, .backend-options div:hover, .decoy-options div:hover, .cloak-link-options div:hover, .wisp-options div:hover, .theme-options div:hover, .store-options div:hover { background-color: var(--bg-3); color: var(--text); }
|
|
278
|
+
</style>
|
|
279
|
+
</head>
|
|
280
|
+
|
|
281
|
+
<body>
|
|
282
|
+
<button id="gohomeblock" onclick="navTo('home?launch=1')">
|
|
283
|
+
<i class="ri-home-4-line"></i>
|
|
284
|
+
</button>
|
|
285
|
+
<nav>
|
|
286
|
+
<ul>
|
|
287
|
+
<li style="width: 40px;">
|
|
288
|
+
<a onclick="navTo('home?launch=1')" style="margin-top: 7.5px; margin-left: 10px;" href="#" data-page="home">
|
|
289
|
+
<div class="hcontainer">
|
|
290
|
+
<span style="font-size: 20px; margin-top: -2px;">🔥</span>
|
|
291
|
+
</div>
|
|
292
|
+
</a>
|
|
293
|
+
</li>
|
|
294
|
+
<li class="divider"></li>
|
|
295
|
+
<li><a onclick="toggleGames()" href="#" data-page="games"><i class="ri-gamepad-line"></i></a></li>
|
|
296
|
+
<li><a onclick="toggleApps()" href="#" data-page="apps"><i class="ri-apps-line"></i></a></li>
|
|
297
|
+
<li><a onclick="showToast('info', 'Use the proxy to access streaming sites!', 'ri-information-line')" href="#" data-page="movies"><i class="ri-video-line"></i></a></li>
|
|
298
|
+
<li class="divider"></li>
|
|
299
|
+
<li><a onclick="toggleSettings()" href="#" data-page="dc"><i class="ri-settings-3-line"></i></a></li>
|
|
300
|
+
<li><a target="_blank" href="https://discord.gg/hUYzETaQ9U" data-page="settings"><i class="ri-discord-fill"></i></a></li>
|
|
301
|
+
</ul>
|
|
302
|
+
</nav>
|
|
303
|
+
|
|
304
|
+
<div id="homeContent">
|
|
305
|
+
<h1 class="text-7xl font-medium home-gradient">infamous</h1>
|
|
306
|
+
<p id="splash" class="text-medium font-light text-white/50">loading...</p>
|
|
307
|
+
<br>
|
|
308
|
+
<div class="searchathome">
|
|
309
|
+
<i class="ri-search-line"></i>
|
|
310
|
+
<input id="homesearch" disabled autocomplete="off" style="margin-right: -3%;" type="text" placeholder="search not ready yet!" />
|
|
311
|
+
<i style="margin-right: 1%; animation: rotationlmao .45s linear infinite forwards; transition: 0.2s;" class="ri-loader-4-line"></i>
|
|
312
|
+
</div>
|
|
313
|
+
<br><br>
|
|
314
|
+
<span class="online-users"><b id="user-count">0</b> users online</span>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div class="toast-container fixed right-4 top-4 w-1/4"></div>
|
|
318
|
+
<div class="toast-container"></div>
|
|
319
|
+
|
|
320
|
+
<iframe id="contentFrame"></iframe>
|
|
321
|
+
|
|
322
|
+
<div class="settings-container settings-hidden">
|
|
323
|
+
<div class="container">
|
|
324
|
+
<div class="settings-sidebar vflex">
|
|
325
|
+
<div class="settings-section" style="background: var(--bg-3);" onclick="switchSettingsPage('general')" data-target="general">
|
|
326
|
+
<i class="ri-settings-3-line"></i> General
|
|
327
|
+
</div>
|
|
328
|
+
<div class="settings-section" onclick="switchSettingsPage('gaming')" data-target="gaming">
|
|
329
|
+
<i class="ri-gamepad-line"></i> Gaming
|
|
330
|
+
</div>
|
|
331
|
+
<div class="settings-section" onclick="switchSettingsPage('proxy')" data-target="proxy">
|
|
332
|
+
<i class="ri-global-line"></i> Proxy
|
|
333
|
+
</div>
|
|
334
|
+
<div class="settings-section" onclick="switchSettingsPage('info')" data-target="info">
|
|
335
|
+
<i class="ri-information-line"></i> Info
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
<div class="settings-content-container">
|
|
339
|
+
<div id="settings-general" class="settings-page settings-active">
|
|
340
|
+
<h2>Theme</h2>
|
|
341
|
+
<p>The color scheme used across the whole site.</p>
|
|
342
|
+
<div class="theme-selector">
|
|
343
|
+
<div class="theme-selected"></div>
|
|
344
|
+
<div class="theme-options"></div>
|
|
345
|
+
</div>
|
|
346
|
+
<h2>Fog</h2>
|
|
347
|
+
<p>Enable or disable Vanta fog background effect.</p>
|
|
348
|
+
<label class="switch">
|
|
349
|
+
<input id="pjs-toggle" checked="" onchange="updatePJS()" type="checkbox">
|
|
350
|
+
<div class="slider"><div class="circle"><svg class="cross" viewBox="0 0 365.696 365.696" height="6" width="6" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M243.188 182.86 356.32 69.726c12.5-12.5 12.5-32.766 0-45.247L341.238 9.398c-12.504-12.503-32.77-12.503-45.25 0L182.86 122.528 69.727 9.374c-12.5-12.5-32.766-12.5-45.247 0L9.375 24.457c-12.5 12.504-12.5 32.77 0 45.25l113.152 113.152L9.398 295.99c-12.503 12.503-12.503 32.769 0 45.25L24.48 356.32c12.5 12.5 32.766 12.5 45.247 0l113.132-113.132L295.99 356.32c12.503 12.5 32.769 12.5 45.25 0l15.081-15.082c12.5-12.504 12.5-32.77 0-45.25zm0 0"></path></svg><svg class="checkmark" viewBox="0 0 24 24" height="10" width="10" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M9.707 19.121a.997.997 0 0 1-1.414 0l-5.646-5.647a1.5 1.5 0 0 1 0-2.121l.707-.707a1.5 1.5 0 0 1 2.121 0L9 14.171l9.525-9.525a1.5 1.5 0 0 1 2.121 0l.707.707a1.5 1.5 0 0 1 0 2.121z"></path></svg></div></div>
|
|
351
|
+
</label>
|
|
352
|
+
</div>
|
|
353
|
+
<div id="settings-gaming" class="settings-page">
|
|
354
|
+
<h2>Game Library</h2>
|
|
355
|
+
<p>Select which game library to use.</p>
|
|
356
|
+
<div class="store-selector">
|
|
357
|
+
<div class="store-selected"></div>
|
|
358
|
+
<div class="store-options"></div>
|
|
359
|
+
</div>
|
|
360
|
+
<h2>Note</h2>
|
|
361
|
+
<p>Use the proxy to access game sites like Poki, CrazyGames, or CoolMathGames!</p>
|
|
362
|
+
</div>
|
|
363
|
+
<div id="settings-proxy" class="settings-page">
|
|
364
|
+
<h2>Wisp Server</h2>
|
|
365
|
+
<p>Select a wisp server for the proxy connection.</p>
|
|
366
|
+
<div class="wisp-selector">
|
|
367
|
+
<div class="wisp-selected"></div>
|
|
368
|
+
<div class="wisp-options"></div>
|
|
369
|
+
</div>
|
|
370
|
+
<div id="custom-wisp-container" class="custom-wisp-input">
|
|
371
|
+
<p>Enter custom wisp URL:</p>
|
|
372
|
+
<div class="hcontainer">
|
|
373
|
+
<input class="wispInput" id="customWispInput" type="text" placeholder="wss://domain.tld/wisp/">
|
|
374
|
+
<button class="button" onclick="setCustomWisp()">Set</button>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
<br>
|
|
378
|
+
<h2>Backend</h2>
|
|
379
|
+
<p>Ultraviolet is the recommended proxy backend.</p>
|
|
380
|
+
<div class="backend-selector">
|
|
381
|
+
<div class="backend-selected"></div>
|
|
382
|
+
<div class="backend-options"></div>
|
|
383
|
+
</div>
|
|
384
|
+
<h2>Search Engine</h2>
|
|
385
|
+
<p>Search engine for the proxy browser.</p>
|
|
386
|
+
<div class="search-engine-selector">
|
|
387
|
+
<div class="search-engine-selected"></div>
|
|
388
|
+
<div class="search-engine-options"></div>
|
|
389
|
+
</div>
|
|
390
|
+
</div>
|
|
391
|
+
<div id="settings-info" class="settings-page">
|
|
392
|
+
<h2>Credits</h2>
|
|
393
|
+
<p>
|
|
394
|
+
<b>TitaniumNetwork</b> - Ultraviolet <br>
|
|
395
|
+
<b>Mercury Workshop</b> - Libcurl and Scramjet <br>
|
|
396
|
+
<b>Infamous Team</b> - Development <br>
|
|
397
|
+
</p>
|
|
398
|
+
<h2>Infamous</h2>
|
|
399
|
+
<p>A state of the art unblocked games website. Clean, customizable, and powerful.</p>
|
|
400
|
+
</div>
|
|
401
|
+
</div>
|
|
402
|
+
<p class="version-tag">infamous <a href="#" target="_blank">unpkg v1.0.0</a></p>
|
|
403
|
+
</div>
|
|
404
|
+
</div>
|
|
405
|
+
|
|
406
|
+
<div class="browser-container">
|
|
407
|
+
<div class="browser-controls">
|
|
408
|
+
<div class="tabs">
|
|
409
|
+
<button class="newtab" onclick="newTab()"><i class="ri-add-line"></i></button>
|
|
410
|
+
</div>
|
|
411
|
+
<div class="browser-buttons">
|
|
412
|
+
<div class="hcontainer">
|
|
413
|
+
<button onclick="b()"><i class="ri-arrow-left-s-line"></i></button>
|
|
414
|
+
<button onclick="f()"><i class="ri-arrow-right-s-line"></i></button>
|
|
415
|
+
<button onclick="r()"><i class="ri-refresh-line"></i></button>
|
|
416
|
+
<input type="text" id="searchbar" placeholder="search anything...">
|
|
417
|
+
<button onclick="full()"><i class="ri-fullscreen-line"></i></button>
|
|
418
|
+
<button onclick="launchEruda()"><i class="ri-code-line"></i></button>
|
|
419
|
+
<button onclick="hideBrowser()"><i class="ri-home-4-line"></i></button>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
</div>
|
|
423
|
+
<div class="browser-loading"></div>
|
|
424
|
+
</div>
|
|
425
|
+
|
|
426
|
+
<div id="vanta-fog-container"></div>
|
|
427
|
+
|
|
428
|
+
<div class="apps-wrapper settings-hidden">
|
|
429
|
+
<input onkeyup="searchApps(this.value)" type="text" placeholder="search through the apps..." id="apps-search" class="h-fit p-4 px-5 w-[975px] bg-[var(--bg-2)] border-none absolute left-1/2 translate-x-[-50%] rounded-2xl transition-all focus:bg-[var(--bg-3)] focus:outline-none">
|
|
430
|
+
<br><br><br>
|
|
431
|
+
<div class="apps-container h-[83%] overflow-y-scroll w-[475px] flex flex-wrap w-7/8 absolute left-1/2 translate-x-[-50%] justify-center"></div>
|
|
432
|
+
</div>
|
|
433
|
+
|
|
434
|
+
<div class="games-wrapper settings-hidden">
|
|
435
|
+
<input onkeyup="searchApps(this.value)" type="text" placeholder="search through the games..." id="games-search" class="h-fit p-4 px-5 w-[975px] bg-[var(--bg-2)] border-none absolute left-1/2 translate-x-[-50%] rounded-2xl transition-all focus:bg-[var(--bg-3)] focus:outline-none">
|
|
436
|
+
<br><br><br>
|
|
437
|
+
<div class="games-container h-[83%] overflow-y-scroll w-[475px] flex flex-wrap w-7/8 absolute left-1/2 translate-x-[-50%] justify-center"></div>
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<div class="partners-wrapper settings-hidden">
|
|
441
|
+
<br>
|
|
442
|
+
<h1 style="text-align: center; font-size: 35px; color: var(--bright-text); font-weight: 500;">Partners</h1>
|
|
443
|
+
<br>
|
|
444
|
+
<div class="partner-container h-[83%] overflow-y-scroll w-[475px] flex flex-wrap w-7/8 absolute left-1/2 translate-x-[-50%] justify-center"></div>
|
|
445
|
+
</div>
|
|
446
|
+
|
|
447
|
+
<button id="reset-theme" onclick="resetTheme()">CLICK HERE TO RESET YOUR THEME!</button>
|
|
448
|
+
<infamousattr version="s1.0.0-unpkg"></infamousattr>
|
|
449
|
+
|
|
450
|
+
<!-- Three.js and Vanta -->
|
|
451
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r134/three.min.js"></script>
|
|
452
|
+
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.fog.min.js"></script>
|
|
453
|
+
|
|
454
|
+
<!-- UV Bundle and Config -->
|
|
455
|
+
<script src="uv/uv.bundle.js"></script>
|
|
456
|
+
<script src="uv/uv.config.js"></script>
|
|
457
|
+
<script src="baremux/index.js"></script>
|
|
458
|
+
|
|
459
|
+
<!-- Embedded JavaScript -->
|
|
460
|
+
<script>
|
|
461
|
+
// Toast system
|
|
462
|
+
document.addEventListener("DOMContentLoaded", function () {
|
|
463
|
+
let toastContainer = document.querySelector(".toast-container");
|
|
464
|
+
if (!toastContainer) {
|
|
465
|
+
toastContainer = document.createElement("div");
|
|
466
|
+
toastContainer.className = "toast-container";
|
|
467
|
+
document.body.appendChild(toastContainer);
|
|
468
|
+
}
|
|
469
|
+
const activeToasts = new Map();
|
|
470
|
+
let hoverTimeout;
|
|
471
|
+
toastContainer.addEventListener("mouseenter", () => {
|
|
472
|
+
clearTimeout(hoverTimeout);
|
|
473
|
+
activeToasts.forEach((controller) => controller.pause());
|
|
474
|
+
updateToastPositions(true);
|
|
475
|
+
});
|
|
476
|
+
toastContainer.addEventListener("mouseleave", () => {
|
|
477
|
+
hoverTimeout = setTimeout(() => {
|
|
478
|
+
activeToasts.forEach((controller) => controller.start());
|
|
479
|
+
updateToastPositions(false);
|
|
480
|
+
}, 100);
|
|
481
|
+
});
|
|
482
|
+
const updateToastPositions = (isHovered = false) => {
|
|
483
|
+
const toasts = Array.from(toastContainer.querySelectorAll(".toast:not(.is-hiding)"));
|
|
484
|
+
const visibleStackedCount = 5;
|
|
485
|
+
toasts.forEach((toast, index) => {
|
|
486
|
+
toast.style.zIndex = toasts.length - index;
|
|
487
|
+
if (isHovered) {
|
|
488
|
+
const toastHeight = toast.offsetHeight + 10;
|
|
489
|
+
toast.style.transform = `translateY(-${index * toastHeight}px) scale(1)`;
|
|
490
|
+
toast.style.opacity = "1";
|
|
491
|
+
} else {
|
|
492
|
+
if (index < visibleStackedCount) {
|
|
493
|
+
const scale = 1 - index * 0.05;
|
|
494
|
+
const translateY = index * -12;
|
|
495
|
+
toast.style.transform = `translateY(${translateY}px) scale(${scale})`;
|
|
496
|
+
toast.style.opacity = "1";
|
|
497
|
+
} else {
|
|
498
|
+
const lastVisibleIndex = visibleStackedCount - 1;
|
|
499
|
+
const scale = 1 - lastVisibleIndex * 0.05;
|
|
500
|
+
const translateY = lastVisibleIndex * -12;
|
|
501
|
+
toast.style.transform = `translateY(${translateY}px) scale(${scale})`;
|
|
502
|
+
toast.style.opacity = "0";
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
};
|
|
507
|
+
window.showToast = function (type, message, iconName) {
|
|
508
|
+
const maxToasts = 5;
|
|
509
|
+
const currentToasts = toastContainer.querySelectorAll(".toast:not(.is-hiding)");
|
|
510
|
+
if (currentToasts.length >= maxToasts) {
|
|
511
|
+
const oldestToast = currentToasts[currentToasts.length - 1];
|
|
512
|
+
hideToast(oldestToast);
|
|
513
|
+
}
|
|
514
|
+
const toast = document.createElement("div");
|
|
515
|
+
toast.className = `toast ${type}`;
|
|
516
|
+
toast.style.opacity = "0";
|
|
517
|
+
toast.style.transform = "translateY(100%)";
|
|
518
|
+
const iconClass = iconName || "ri-information-line";
|
|
519
|
+
const content = document.createElement("div");
|
|
520
|
+
content.className = "toast-content";
|
|
521
|
+
content.innerHTML = `<i class="${iconClass}"></i><span>${message}</span>`;
|
|
522
|
+
toast.appendChild(content);
|
|
523
|
+
const controller = {
|
|
524
|
+
id: null, remaining: 6000, startTime: null,
|
|
525
|
+
pause: function () { if (this.id) { clearTimeout(this.id); this.id = null; this.remaining -= Date.now() - this.startTime; } },
|
|
526
|
+
start: function () { if (this.id || this.remaining <= 0) return; this.startTime = Date.now(); this.id = setTimeout(() => hideToast(toast), this.remaining); },
|
|
527
|
+
clear: function () { clearTimeout(this.id); },
|
|
528
|
+
};
|
|
529
|
+
activeToasts.set(toast, controller);
|
|
530
|
+
toastContainer.prepend(toast);
|
|
531
|
+
setTimeout(() => { updateToastPositions(toastContainer.matches(":hover")); }, 0);
|
|
532
|
+
controller.start();
|
|
533
|
+
};
|
|
534
|
+
function hideToast(toast) {
|
|
535
|
+
if (!toast || !toast.parentNode || toast.classList.contains("is-hiding")) return;
|
|
536
|
+
if (activeToasts.has(toast)) { activeToasts.get(toast).clear(); activeToasts.delete(toast); }
|
|
537
|
+
toast.style.zIndex = "-1";
|
|
538
|
+
toast.classList.add("is-hiding");
|
|
539
|
+
toast.addEventListener("transitionend", () => { toast.remove(); }, { once: true });
|
|
540
|
+
updateToastPositions(toastContainer.matches(":hover"));
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
</script>
|
|
544
|
+
|
|
545
|
+
<script>
|
|
546
|
+
// Splash texts
|
|
547
|
+
const splashes = ["wsp", "unpkg edition!", "make sure to give us a dislike", "#InfamousTeam", "loading failed: please punch your chromebook", "have fun", "ily <3", "Hi guys welcome back to another video", "67", "valoq is watching you", "stay infamous"];
|
|
548
|
+
const randomSplash = splashes[Math.floor(Math.random() * splashes.length)];
|
|
549
|
+
document.getElementById("splash").innerHTML = randomSplash;
|
|
550
|
+
</script>
|
|
551
|
+
|
|
552
|
+
<script>
|
|
553
|
+
// Theme system
|
|
554
|
+
const savedTheme = localStorage.getItem('infamous_theme') || 'default';
|
|
555
|
+
if (savedTheme !== 'default') {
|
|
556
|
+
document.documentElement.setAttribute('data-theme', savedTheme);
|
|
557
|
+
}
|
|
558
|
+
</script>
|
|
559
|
+
|
|
560
|
+
<script>
|
|
561
|
+
// Wisp servers list
|
|
562
|
+
const wispServers = [
|
|
563
|
+
{ name: "Infamous", url: "wss://wisp-server-167340080388.us-central1.run.app/" },
|
|
564
|
+
{ name: "Alu 1", url: "wss://aluu.xyz/wisp/" },
|
|
565
|
+
{ name: "Alu 2", url: "wss://freemathhw.xyz/wisp/" },
|
|
566
|
+
{ name: "Alu 3", url: "wss://canvaslogin.org/wisp/" },
|
|
567
|
+
{ name: "Alu 4", url: "wss://tnlnda.xyz/wisp/" },
|
|
568
|
+
{ name: "Incognito 1", url: "wss://incog.works/wisp/" },
|
|
569
|
+
{ name: "Incognito 2", url: "wss://math.mathpuns.lol/wisp/" },
|
|
570
|
+
{ name: "Incognito 3", url: "wss://math.americahistory.online/wisp/" },
|
|
571
|
+
{ name: "Incognito 4", url: "wss://english.geniuslecture.club/wisp/" },
|
|
572
|
+
{ name: "Definitely Science 1", url: "wss://definitelyscience.com/wisp/" },
|
|
573
|
+
{ name: "Definitely Science 2", url: "wss://onlinegames.ro/wisp/" },
|
|
574
|
+
{ name: "Definitely Science 3", url: "wss://mages.io/wisp/" },
|
|
575
|
+
{ name: "Definitely Science 4", url: "wss://lichology.com/wisp/" },
|
|
576
|
+
{ name: "Anura 1", url: "wss://anura.pro/" },
|
|
577
|
+
{ name: "Anura 2", url: "wss://adoptmy.baby/" },
|
|
578
|
+
{ name: "Anura 3", url: "wss://wallstjournal.click/" },
|
|
579
|
+
{ name: "Anura 4", url: "wss://mexicoon.top/" },
|
|
580
|
+
{ name: "Anura 5", url: "wss://onlineosdev.nl/" },
|
|
581
|
+
{ name: "Anura 6", url: "wss://swordartii.online/" },
|
|
582
|
+
{ name: "Phantom", url: "wss://phantom.lol/wisp/" },
|
|
583
|
+
{ name: "Mercury", url: "wss://wisp.mercurywork.shop/" },
|
|
584
|
+
{ name: "Terbium 1", url: "wss://quantumchemistry.club/wisp/" },
|
|
585
|
+
{ name: "Terbium 2", url: "wss://explorechemistry.online/wisp/" },
|
|
586
|
+
{ name: "Terbium 3", url: "wss://webmath.help/wisp/" },
|
|
587
|
+
{ name: "Radius 1", url: "wss://radiusproxy.app/wisp/" },
|
|
588
|
+
{ name: "Radius 1 (Adblock)", url: "wss://radiusproxy.app/adblock/" },
|
|
589
|
+
{ name: "Radius 2", url: "wss://radiusowski.site/wisp/" },
|
|
590
|
+
{ name: "Radius 2 (Adblock)", url: "wss://radiusowski.site/adblock/" },
|
|
591
|
+
{ name: "Custom URL...", url: "custom" }
|
|
592
|
+
];
|
|
593
|
+
|
|
594
|
+
const DEFAULT_WISP = "wss://wisp-server-167340080388.us-central1.run.app/";
|
|
595
|
+
</script>
|
|
596
|
+
|
|
597
|
+
<script>
|
|
598
|
+
// Dropdown system
|
|
599
|
+
const appSettings = {
|
|
600
|
+
backend: localStorage.getItem("infamous_backend") || "Ultraviolet",
|
|
601
|
+
searchEngine: localStorage.getItem("infamous_searchEngine") || "DuckDuckGo",
|
|
602
|
+
theme: localStorage.getItem("infamous_theme") || "default",
|
|
603
|
+
store: localStorage.getItem("infamous_gameStore") || "Proxy Games",
|
|
604
|
+
wispServer: localStorage.getItem("infamous_wispServer") || "Infamous",
|
|
605
|
+
};
|
|
606
|
+
|
|
607
|
+
const searchEngineSelector = document.querySelector(".search-engine-selector");
|
|
608
|
+
const searchEngineSelected = searchEngineSelector?.querySelector(".search-engine-selected");
|
|
609
|
+
const searchEngineOptions = searchEngineSelector?.querySelector(".search-engine-options");
|
|
610
|
+
const backendSelector = document.querySelector(".backend-selector");
|
|
611
|
+
const backendSelected = backendSelector?.querySelector(".backend-selected");
|
|
612
|
+
const backendOptions = backendSelector?.querySelector(".backend-options");
|
|
613
|
+
const themeSelector = document.querySelector(".theme-selector");
|
|
614
|
+
const themeSelected = themeSelector?.querySelector(".theme-selected");
|
|
615
|
+
const themeOptions = themeSelector?.querySelector(".theme-options");
|
|
616
|
+
const storeSelector = document.querySelector(".store-selector");
|
|
617
|
+
const storeSelected = storeSelector?.querySelector(".store-selected");
|
|
618
|
+
const storeOptions = storeSelector?.querySelector(".store-options");
|
|
619
|
+
const wispSelector = document.querySelector(".wisp-selector");
|
|
620
|
+
const wispSelected = wispSelector?.querySelector(".wisp-selected");
|
|
621
|
+
const wispOptions = wispSelector?.querySelector(".wisp-options");
|
|
622
|
+
|
|
623
|
+
function closeAllSelectors() {
|
|
624
|
+
document.querySelectorAll(".backend-show, .search-engine-show, .theme-show, .store-show, .wisp-show").forEach((el) =>
|
|
625
|
+
el.classList.remove("backend-show", "search-engine-show", "theme-show", "store-show", "wisp-show"));
|
|
626
|
+
document.querySelectorAll(".backend-arrow-active, .search-engine-arrow-active, .theme-arrow-active, .store-arrow-active, .wisp-arrow-active").forEach((el) =>
|
|
627
|
+
el.classList.remove("backend-arrow-active", "search-engine-arrow-active", "theme-arrow-active", "store-arrow-active", "wisp-arrow-active"));
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
const allBackendOptions = ["Ultraviolet"];
|
|
631
|
+
const allSearchEngineOptions = ["DuckDuckGo", "Brave", "Google", "Bing"];
|
|
632
|
+
const allThemeOptions = ["default", "void", "ocean", "forest", "ember", "midnight", "dunes", "lavendar", "coral", "golden", "lime", "magenta", "neon", "royal blue", "sea", "violet", "mint"];
|
|
633
|
+
const allStoreOptions = ["Proxy Games"];
|
|
634
|
+
const allWispOptions = wispServers.map(s => s.name);
|
|
635
|
+
|
|
636
|
+
function createSelector(selectorType, selectedEl, optionsEl, allOptions, currentVal, storageKey, eventName, successMsg) {
|
|
637
|
+
if (!selectedEl || !optionsEl) return;
|
|
638
|
+
selectedEl.textContent = currentVal;
|
|
639
|
+
selectedEl.addEventListener("click", (e) => {
|
|
640
|
+
e.stopPropagation();
|
|
641
|
+
const wasOpen = optionsEl.classList.contains(`${selectorType}-show`);
|
|
642
|
+
closeAllSelectors();
|
|
643
|
+
if (!wasOpen) {
|
|
644
|
+
optionsEl.innerHTML = "";
|
|
645
|
+
allOptions.forEach((optionText) => {
|
|
646
|
+
if (optionText !== selectedEl.textContent) {
|
|
647
|
+
const div = document.createElement("div");
|
|
648
|
+
div.textContent = optionText;
|
|
649
|
+
div.addEventListener("click", function (e) {
|
|
650
|
+
e.stopPropagation();
|
|
651
|
+
const val = this.textContent;
|
|
652
|
+
selectedEl.textContent = val;
|
|
653
|
+
const storageVal = storageKey === "infamous_backend" ? val.toLowerCase() : val;
|
|
654
|
+
appSettings[storageKey] = storageVal;
|
|
655
|
+
localStorage.setItem(storageKey, storageVal);
|
|
656
|
+
closeAllSelectors();
|
|
657
|
+
if (eventName) document.dispatchEvent(new CustomEvent(eventName, { detail: storageVal }));
|
|
658
|
+
if (successMsg) showToast("success", successMsg, "ri-check-line");
|
|
659
|
+
});
|
|
660
|
+
optionsEl.appendChild(div);
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
optionsEl.classList.add(`${selectorType}-show`);
|
|
664
|
+
selectedEl.classList.add(`${selectorType}-arrow-active`);
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
createSelector("search-engine", searchEngineSelected, searchEngineOptions, allSearchEngineOptions, appSettings.searchEngine, "infamous_searchEngine", null, "Search Engine updated!");
|
|
670
|
+
createSelector("backend", backendSelected, backendOptions, allBackendOptions, appSettings.backend, "infamous_backend", "backendUpdated", "Backend updated!");
|
|
671
|
+
createSelector("theme", themeSelected, themeOptions, allThemeOptions, appSettings.theme, "infamous_theme", "themeUpdated", "Theme updated! Refresh to see changes.");
|
|
672
|
+
createSelector("store", storeSelected, storeOptions, allStoreOptions, appSettings.store, "infamous_gameStore", "storeUpdated", "Store updated!");
|
|
673
|
+
|
|
674
|
+
// Wisp selector with special handling
|
|
675
|
+
if (wispSelected && wispOptions) {
|
|
676
|
+
wispSelected.textContent = appSettings.wispServer;
|
|
677
|
+
wispSelected.addEventListener("click", (e) => {
|
|
678
|
+
e.stopPropagation();
|
|
679
|
+
const wasOpen = wispOptions.classList.contains("wisp-show");
|
|
680
|
+
closeAllSelectors();
|
|
681
|
+
if (!wasOpen) {
|
|
682
|
+
wispOptions.innerHTML = "";
|
|
683
|
+
allWispOptions.forEach((optionText) => {
|
|
684
|
+
if (optionText !== wispSelected.textContent) {
|
|
685
|
+
const div = document.createElement("div");
|
|
686
|
+
div.textContent = optionText;
|
|
687
|
+
div.addEventListener("click", function (e) {
|
|
688
|
+
e.stopPropagation();
|
|
689
|
+
const val = this.textContent;
|
|
690
|
+
wispSelected.textContent = val;
|
|
691
|
+
appSettings.wispServer = val;
|
|
692
|
+
localStorage.setItem("infamous_wispServer", val);
|
|
693
|
+
closeAllSelectors();
|
|
694
|
+
|
|
695
|
+
// Handle custom URL
|
|
696
|
+
const customContainer = document.getElementById("custom-wisp-container");
|
|
697
|
+
if (val === "Custom URL...") {
|
|
698
|
+
customContainer.classList.add("show");
|
|
699
|
+
} else {
|
|
700
|
+
customContainer.classList.remove("show");
|
|
701
|
+
const server = wispServers.find(s => s.name === val);
|
|
702
|
+
if (server && server.url !== "custom") {
|
|
703
|
+
localStorage.setItem("infamous_wispUrl", server.url);
|
|
704
|
+
showToast("success", "Wisp server updated! Refresh to apply.", "ri-check-line");
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
wispOptions.appendChild(div);
|
|
709
|
+
}
|
|
710
|
+
});
|
|
711
|
+
wispOptions.classList.add("wisp-show");
|
|
712
|
+
wispSelected.classList.add("wisp-arrow-active");
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
function setCustomWisp() {
|
|
718
|
+
const input = document.getElementById("customWispInput");
|
|
719
|
+
const url = input.value.trim();
|
|
720
|
+
if (!url) { showToast("error", "URL cannot be empty!", "ri-close-circle-line"); return; }
|
|
721
|
+
if (!url.endsWith("/")) { showToast("error", "URL must end with /", "ri-close-circle-line"); return; }
|
|
722
|
+
if (!url.startsWith("wss://") && !url.startsWith("ws://")) { showToast("error", "Must start with ws(s)://", "ri-close-circle-line"); return; }
|
|
723
|
+
localStorage.setItem("infamous_wispUrl", url);
|
|
724
|
+
showToast("success", "Custom wisp URL set! Refresh to apply.", "ri-check-line");
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
document.addEventListener("themeUpdated", (e) => {
|
|
728
|
+
const theme = e.detail ?? "default";
|
|
729
|
+
if (theme !== "default") {
|
|
730
|
+
document.documentElement.setAttribute('data-theme', theme);
|
|
731
|
+
} else {
|
|
732
|
+
document.documentElement.removeAttribute('data-theme');
|
|
733
|
+
}
|
|
734
|
+
});
|
|
735
|
+
</script>
|
|
736
|
+
|
|
737
|
+
<script>
|
|
738
|
+
// Browser functions
|
|
739
|
+
let aTab = 0;
|
|
740
|
+
let tabCounter = 1;
|
|
741
|
+
let bTabs = [];
|
|
742
|
+
const wispUrl = localStorage.getItem("infamous_wispUrl") || DEFAULT_WISP;
|
|
743
|
+
let searchE = "https://duckduckgo.com/search?q=";
|
|
744
|
+
const se = localStorage.getItem("infamous_searchEngine") || "DuckDuckGo";
|
|
745
|
+
if (se === "Bing") searchE = "https://bing.com/search?q=";
|
|
746
|
+
else if (se === "Google") searchE = "https://google.com/search?q=";
|
|
747
|
+
else if (se === "Brave") searchE = "https://search.brave.com/search?q=";
|
|
748
|
+
|
|
749
|
+
let connection;
|
|
750
|
+
(async () => {
|
|
751
|
+
try {
|
|
752
|
+
console.log("[Infamous] Initializing BareMux with base:", INFAMOUS_BASE);
|
|
753
|
+
console.log("[Infamous] Wisp URL:", wispUrl);
|
|
754
|
+
connection = new BareMux.BareMuxConnection(INFAMOUS_BASE + "baremux/worker.js");
|
|
755
|
+
await connection.setTransport(INFAMOUS_BASE + "libcurl/index.mjs", [{ wisp: wispUrl }]);
|
|
756
|
+
console.log("[Infamous] BareMux transport set successfully");
|
|
757
|
+
} catch(e) { console.error("[Infamous] BareMux init error:", e); }
|
|
758
|
+
})();
|
|
759
|
+
|
|
760
|
+
function newTab() {
|
|
761
|
+
const tabCont = document.querySelector(".tabs");
|
|
762
|
+
const nTab = { id: tabCounter++, title: "New Tab", url: "", history: [], historyIndex: -1 };
|
|
763
|
+
bTabs.push(nTab);
|
|
764
|
+
if (!tabCont) return;
|
|
765
|
+
const ntBtn = document.querySelector(".newtab");
|
|
766
|
+
const tabElement = document.createElement("div");
|
|
767
|
+
tabElement.classList.add("tab", "hcontainer");
|
|
768
|
+
tabElement.dataset.tabId = nTab.id;
|
|
769
|
+
tabElement.innerHTML = `<span>New Tab</span><i class="ri-close-line close-btn"></i>`;
|
|
770
|
+
tabElement.addEventListener("click", (e) => { if (!e.target.closest(".close-btn")) switchTab(nTab.id); });
|
|
771
|
+
tabElement.querySelector(".close-btn").addEventListener("click", (e) => { e.stopPropagation(); closeTab(nTab.id); });
|
|
772
|
+
tabCont.insertBefore(tabElement, ntBtn);
|
|
773
|
+
const tabFrame = document.createElement("iframe");
|
|
774
|
+
tabFrame.classList.add("viewframe", "browser-frame");
|
|
775
|
+
tabFrame.dataset.frameId = nTab.id;
|
|
776
|
+
tabFrame.setAttribute("allowfullscreen", "true");
|
|
777
|
+
tabFrame.srcdoc = '<html><body style="background:#1a0b11;color:white;display:flex;align-items:center;justify-content:center;height:100vh;font-family:sans-serif;"><h1>New Tab</h1></body></html>';
|
|
778
|
+
document.body.appendChild(tabFrame);
|
|
779
|
+
switchTab(nTab.id);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
function switchTab(tId) {
|
|
783
|
+
aTab = tId;
|
|
784
|
+
document.querySelectorAll(".tab").forEach((tab) => { tab.classList.toggle("active", parseInt(tab.dataset.tabId) === tId); });
|
|
785
|
+
document.querySelectorAll(".viewframe").forEach((frame) => { frame.classList.toggle("active", parseInt(frame.dataset.frameId) === tId); });
|
|
786
|
+
const cTab = bTabs.find((t) => t.id === tId);
|
|
787
|
+
if (cTab) { const input = document.getElementById("searchbar"); if (input) input.value = cTab.url; }
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
function closeTab(tId) {
|
|
791
|
+
if (bTabs.length === 1) { showToast("error", "Cannot close last tab!", "ri-close-circle-line"); return; }
|
|
792
|
+
const tIndex = bTabs.findIndex((t) => t.id === tId);
|
|
793
|
+
if (tIndex === -1) return;
|
|
794
|
+
bTabs.splice(tIndex, 1);
|
|
795
|
+
document.querySelector(`.tab[data-tab-id="${tId}"]`)?.remove();
|
|
796
|
+
document.querySelector(`.viewframe[data-frame-id="${tId}"]`)?.remove();
|
|
797
|
+
if (aTab === tId) { const newATab = bTabs[Math.max(0, tIndex - 1)]; if (newATab) switchTab(newATab.id); }
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
function nav(i) {
|
|
801
|
+
console.log("[Infamous] nav() called with input:", i);
|
|
802
|
+
if (!i.trim()) return;
|
|
803
|
+
let url = i.trim();
|
|
804
|
+
if (!url.includes(".") || url.includes(" ")) { url = searchE + encodeURIComponent(url); }
|
|
805
|
+
else { if (!url.startsWith("http://") && !url.startsWith("https://")) { url = "https://" + url; } }
|
|
806
|
+
console.log("[Infamous] Navigating to URL:", url);
|
|
807
|
+
const cTab = bTabs.find((t) => t.id === aTab);
|
|
808
|
+
if (!cTab) { console.error("[Infamous] No active tab found!"); return; }
|
|
809
|
+
cTab.history.push(url);
|
|
810
|
+
cTab.historyIndex++;
|
|
811
|
+
cTab.url = url;
|
|
812
|
+
console.log("[Infamous] __uv$config:", __uv$config);
|
|
813
|
+
let fUrl = __uv$config.prefix + __uv$config.encodeUrl(url);
|
|
814
|
+
console.log("[Infamous] Final proxied URL:", fUrl);
|
|
815
|
+
go(fUrl);
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
async function go(u) {
|
|
819
|
+
console.log("[Infamous] go() called with URL:", u);
|
|
820
|
+
try {
|
|
821
|
+
if (connection) {
|
|
822
|
+
const transport = await connection.getTransport();
|
|
823
|
+
console.log("[Infamous] Current transport:", transport);
|
|
824
|
+
if (!transport) {
|
|
825
|
+
console.log("[Infamous] Setting transport...");
|
|
826
|
+
await connection.setTransport(INFAMOUS_BASE + "libcurl/index.mjs", [{ wisp: wispUrl }]);
|
|
827
|
+
}
|
|
828
|
+
} else {
|
|
829
|
+
console.error("[Infamous] No connection object!");
|
|
830
|
+
}
|
|
831
|
+
} catch(e) {
|
|
832
|
+
console.error("[Infamous] Transport error:", e);
|
|
833
|
+
}
|
|
834
|
+
const cTab = bTabs.find((t) => t.id === aTab);
|
|
835
|
+
const viewframe = document.querySelector(`.viewframe[data-frame-id="${aTab}"]`);
|
|
836
|
+
if (!viewframe) { console.error("[Infamous] No viewframe found for tab:", aTab); return; }
|
|
837
|
+
const ubar = document.getElementById("searchbar");
|
|
838
|
+
const tabEl = document.querySelector(`.tab[data-tab-id="${aTab}"]`);
|
|
839
|
+
if (tabEl) { const titleEl = tabEl.querySelector("span"); if (titleEl) titleEl.textContent = "Loading..."; }
|
|
840
|
+
if (ubar && cTab) ubar.value = cTab.url;
|
|
841
|
+
try {
|
|
842
|
+
console.log("[Infamous] Setting viewframe.src to:", u);
|
|
843
|
+
viewframe.src = u;
|
|
844
|
+
viewframe.onload = () => {
|
|
845
|
+
console.log("[Infamous] Frame loaded");
|
|
846
|
+
try {
|
|
847
|
+
const title = viewframe.contentDocument?.title || (cTab ? new URL(cTab.url).hostname : "Tab");
|
|
848
|
+
if (tabEl) { const titleEl = tabEl.querySelector("span"); if (titleEl) titleEl.textContent = title; }
|
|
849
|
+
} catch (e) {
|
|
850
|
+
if (tabEl && cTab) { const titleEl = tabEl.querySelector("span"); if (titleEl) titleEl.textContent = new URL(cTab.url).hostname; }
|
|
851
|
+
}
|
|
852
|
+
};
|
|
853
|
+
} catch (e) { console.error("[Infamous] go() error:", e); showToast("error", "Error loading page", "ri-close-circle-line"); }
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
function b() { const cTab = bTabs.find((t) => t.id === aTab); if (!cTab || cTab.historyIndex <= 0) return; cTab.historyIndex--; const u = cTab.history[cTab.historyIndex]; cTab.url = u; go(__uv$config.prefix + __uv$config.encodeUrl(u)); }
|
|
857
|
+
function f() { const cTab = bTabs.find((t) => t.id === aTab); if (!cTab || cTab.historyIndex >= cTab.history.length - 1) return; cTab.historyIndex++; const u = cTab.history[cTab.historyIndex]; cTab.url = u; go(__uv$config.prefix + __uv$config.encodeUrl(u)); }
|
|
858
|
+
function r() { const viewframe = document.querySelector(`.viewframe[data-frame-id="${aTab}"]`); if (viewframe) viewframe.src = viewframe.src; }
|
|
859
|
+
function full() { const viewframe = document.querySelector(`.viewframe[data-frame-id="${aTab}"]`); viewframe?.requestFullscreen(); }
|
|
860
|
+
function hideBrowser() { const b = document.querySelector(".browser-container"); b.style.opacity = 0; b.style.pointerEvents = "none"; document.querySelectorAll(".viewframe").forEach((frame) => { frame.style.opacity = 0; frame.style.pointerEvents = "none"; }); }
|
|
861
|
+
function launchEruda() { showToast("info", "Launching Eruda...", "ri-information-line"); try { eruda.init(); showToast("success", "Eruda injected", "ri-check-line"); } catch (e) { showToast("error", "Failed to inject Eruda", "ri-close-circle-line"); } }
|
|
862
|
+
|
|
863
|
+
const inp = document.getElementById("searchbar");
|
|
864
|
+
inp?.addEventListener("keydown", e => { if (e.key === "Enter") nav(inp.value); });
|
|
865
|
+
</script>
|
|
866
|
+
|
|
867
|
+
<script>
|
|
868
|
+
// Apps data (for proxy)
|
|
869
|
+
const appsData = [
|
|
870
|
+
{ name: "Google", url: "https://google.com", img: "https://www.google.com/favicon.ico" },
|
|
871
|
+
{ name: "ChatGPT", url: "https://chatgpt.com", img: "https://chatgpt.com/favicon.ico" },
|
|
872
|
+
{ name: "Discord", url: "https://discord.com/app", img: "https://discord.com/assets/favicon.ico" },
|
|
873
|
+
{ name: "YouTube", url: "https://youtube.com", img: "https://www.youtube.com/favicon.ico" },
|
|
874
|
+
{ name: "Reddit", url: "https://reddit.com", img: "https://www.reddit.com/favicon.ico" },
|
|
875
|
+
{ name: "TikTok", url: "https://tiktok.com", img: "https://www.tiktok.com/favicon.ico" },
|
|
876
|
+
{ name: "Twitch", url: "https://twitch.tv", img: "https://twitch.tv/favicon.ico" },
|
|
877
|
+
{ name: "Spotify", url: "https://open.spotify.com", img: "https://open.spotify.com/favicon.ico" },
|
|
878
|
+
{ name: "Netflix", url: "https://netflix.com", img: "https://netflix.com/favicon.ico" },
|
|
879
|
+
{ name: "Twitter/X", url: "https://x.com", img: "https://abs.twimg.com/favicons/twitter.ico" },
|
|
880
|
+
{ name: "Poki", url: "https://poki.com", img: "https://poki.com/favicon.ico" },
|
|
881
|
+
{ name: "CrazyGames", url: "https://crazygames.com", img: "https://crazygames.com/favicon.ico" },
|
|
882
|
+
{ name: "CoolMathGames", url: "https://coolmathgames.com", img: "https://coolmathgames.com/favicon.ico" },
|
|
883
|
+
{ name: "now.gg", url: "https://now.gg", img: "https://now.gg/favicon.ico" },
|
|
884
|
+
{ name: "GeForce NOW", url: "https://play.geforcenow.com", img: "https://play.geforcenow.com/favicon.ico" },
|
|
885
|
+
];
|
|
886
|
+
|
|
887
|
+
const gamesData = [
|
|
888
|
+
{ name: "Poki Games", url: "https://poki.com", img: "https://poki.com/favicon.ico" },
|
|
889
|
+
{ name: "CrazyGames", url: "https://crazygames.com", img: "https://crazygames.com/favicon.ico" },
|
|
890
|
+
{ name: "CoolMathGames", url: "https://coolmathgames.com", img: "https://coolmathgames.com/favicon.ico" },
|
|
891
|
+
{ name: "io Games", url: "https://iogames.space", img: "https://iogames.space/favicon.ico" },
|
|
892
|
+
{ name: "Armor Games", url: "https://armorgames.com", img: "https://armorgames.com/favicon.ico" },
|
|
893
|
+
{ name: "Kongregate", url: "https://www.kongregate.com", img: "https://www.kongregate.com/favicon.ico" },
|
|
894
|
+
];
|
|
895
|
+
|
|
896
|
+
function loadApps() {
|
|
897
|
+
const container = document.querySelector(".apps-container");
|
|
898
|
+
if (!container) return;
|
|
899
|
+
container.innerHTML = '';
|
|
900
|
+
appsData.forEach(item => {
|
|
901
|
+
const el = document.createElement("div");
|
|
902
|
+
el.classList.add("app");
|
|
903
|
+
el.onclick = () => { toggleApps(); rSearch(item.url); };
|
|
904
|
+
el.innerHTML = `<div class="bg-img" style="background-image: url('${item.img}'); background-color: var(--bg-3);"></div><div class="app-title-cont"><h2 class="app-title-h2">${item.name}</h2></div>`;
|
|
905
|
+
container.appendChild(el);
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
function loadGames() {
|
|
910
|
+
const container = document.querySelector(".games-container");
|
|
911
|
+
if (!container) return;
|
|
912
|
+
container.innerHTML = '';
|
|
913
|
+
gamesData.forEach(item => {
|
|
914
|
+
const el = document.createElement("div");
|
|
915
|
+
el.classList.add("app");
|
|
916
|
+
el.onclick = () => { toggleGames(); rSearch(item.url); };
|
|
917
|
+
el.innerHTML = `<div class="bg-img" style="background-image: url('${item.img}'); background-color: var(--bg-3);"></div><div class="app-title-cont"><h2 class="app-title-h2">${item.name}</h2></div>`;
|
|
918
|
+
container.appendChild(el);
|
|
919
|
+
});
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
document.addEventListener("DOMContentLoaded", () => { loadApps(); loadGames(); });
|
|
923
|
+
</script>
|
|
924
|
+
|
|
925
|
+
<script>
|
|
926
|
+
// Settings and UI
|
|
927
|
+
const settingsHolder = document.querySelector(".settings-container");
|
|
928
|
+
const appsHolder = document.querySelector(".apps-wrapper");
|
|
929
|
+
const gamesHolder = document.querySelector(".games-wrapper");
|
|
930
|
+
const partnersHolder = document.querySelector(".partners-wrapper");
|
|
931
|
+
|
|
932
|
+
function switchSettingsPage(target) {
|
|
933
|
+
document.querySelectorAll(".settings-page").forEach(page => page?.classList.remove("settings-active"));
|
|
934
|
+
document.querySelector(`#settings-${target}`)?.classList.add("settings-active");
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
function toggleSettings() {
|
|
938
|
+
if (settingsHolder.classList.contains("settings-hidden")) {
|
|
939
|
+
[appsHolder, gamesHolder, partnersHolder].forEach(h => { if (h?.classList.contains("settings-shown")) h.classList.replace("settings-shown", "settings-hidden"); });
|
|
940
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
941
|
+
const overlay = document.createElement("div");
|
|
942
|
+
overlay.classList.add("blurOverlay");
|
|
943
|
+
overlay.onclick = toggleSettings;
|
|
944
|
+
document.body.appendChild(overlay);
|
|
945
|
+
settingsHolder.classList.replace("settings-hidden", "settings-shown");
|
|
946
|
+
} else {
|
|
947
|
+
settingsHolder.classList.replace("settings-shown", "settings-hidden");
|
|
948
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
function toggleApps() {
|
|
953
|
+
if (appsHolder.classList.contains("settings-hidden")) {
|
|
954
|
+
[settingsHolder, gamesHolder, partnersHolder].forEach(h => { if (h?.classList.contains("settings-shown")) h.classList.replace("settings-shown", "settings-hidden"); });
|
|
955
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
956
|
+
const overlay = document.createElement("div");
|
|
957
|
+
overlay.classList.add("blurOverlay");
|
|
958
|
+
overlay.onclick = toggleApps;
|
|
959
|
+
document.body.appendChild(overlay);
|
|
960
|
+
appsHolder.classList.replace("settings-hidden", "settings-shown");
|
|
961
|
+
} else {
|
|
962
|
+
appsHolder.classList.replace("settings-shown", "settings-hidden");
|
|
963
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
function toggleGames() {
|
|
968
|
+
if (gamesHolder.classList.contains("settings-hidden")) {
|
|
969
|
+
[settingsHolder, appsHolder, partnersHolder].forEach(h => { if (h?.classList.contains("settings-shown")) h.classList.replace("settings-shown", "settings-hidden"); });
|
|
970
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
971
|
+
const overlay = document.createElement("div");
|
|
972
|
+
overlay.classList.add("blurOverlay");
|
|
973
|
+
overlay.onclick = toggleGames;
|
|
974
|
+
document.body.appendChild(overlay);
|
|
975
|
+
gamesHolder.classList.replace("settings-hidden", "settings-shown");
|
|
976
|
+
} else {
|
|
977
|
+
gamesHolder.classList.replace("settings-shown", "settings-hidden");
|
|
978
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
function togglePartners() {
|
|
983
|
+
if (partnersHolder.classList.contains("settings-hidden")) {
|
|
984
|
+
[settingsHolder, appsHolder, gamesHolder].forEach(h => { if (h?.classList.contains("settings-shown")) h.classList.replace("settings-shown", "settings-hidden"); });
|
|
985
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
986
|
+
const overlay = document.createElement("div");
|
|
987
|
+
overlay.classList.add("blurOverlay");
|
|
988
|
+
overlay.onclick = togglePartners;
|
|
989
|
+
document.body.appendChild(overlay);
|
|
990
|
+
partnersHolder.classList.replace("settings-hidden", "settings-shown");
|
|
991
|
+
} else {
|
|
992
|
+
partnersHolder.classList.replace("settings-shown", "settings-hidden");
|
|
993
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
function searchApps(term) {
|
|
998
|
+
document.querySelectorAll(".app").forEach((app) => {
|
|
999
|
+
const title = app.querySelector("h2")?.textContent?.toLowerCase() || "";
|
|
1000
|
+
app.style.display = title.includes(term.toLowerCase()) ? "block" : "none";
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
function rSearch(input) {
|
|
1005
|
+
[appsHolder, gamesHolder].forEach(h => { if (h?.classList.contains("settings-shown")) h.classList.replace("settings-shown", "settings-hidden"); });
|
|
1006
|
+
document.querySelectorAll(".blurOverlay").forEach(e => e.remove());
|
|
1007
|
+
let url = input;
|
|
1008
|
+
if (!url.includes(".") || url.includes(" ")) { /* keep as is */ }
|
|
1009
|
+
else if (!url.startsWith("http://") && !url.startsWith("https://")) { url = "https://" + url; }
|
|
1010
|
+
const b = document.querySelector(".browser-container");
|
|
1011
|
+
b.style.opacity = 1;
|
|
1012
|
+
b.style.pointerEvents = "all";
|
|
1013
|
+
document.querySelectorAll(".viewframe").forEach(frame => { frame.style.opacity = 1; frame.style.pointerEvents = "all"; });
|
|
1014
|
+
newTab();
|
|
1015
|
+
nav(url);
|
|
1016
|
+
switchTab(aTab);
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
function navTo(l) {
|
|
1020
|
+
if (l.includes("home")) {
|
|
1021
|
+
document.querySelector("nav").style.display = "block";
|
|
1022
|
+
setTimeout(() => { document.querySelector("nav").style.opacity = "1"; }, 3);
|
|
1023
|
+
document.getElementById("homeContent").style.display = "block";
|
|
1024
|
+
document.getElementById("gohomeblock").style.display = "none";
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
</script>
|
|
1028
|
+
|
|
1029
|
+
<script>
|
|
1030
|
+
// Service worker registration
|
|
1031
|
+
async function registerSW() {
|
|
1032
|
+
if ("serviceWorker" in navigator) {
|
|
1033
|
+
try {
|
|
1034
|
+
await navigator.serviceWorker.register(INFAMOUS_BASE + "uv/sw.js");
|
|
1035
|
+
console.log("UV service worker registered");
|
|
1036
|
+
setTimeout(() => {
|
|
1037
|
+
showToast("success", "Ultraviolet ready!", "ri-check-line");
|
|
1038
|
+
document.querySelector(".ri-loader-4-line").style.opacity = 0;
|
|
1039
|
+
document.getElementById("homesearch").disabled = false;
|
|
1040
|
+
document.getElementById("homesearch").placeholder = "search anything...";
|
|
1041
|
+
}, 500);
|
|
1042
|
+
} catch (e) {
|
|
1043
|
+
console.error("SW registration failed:", e);
|
|
1044
|
+
showToast("error", "Service worker failed - proxy may not work", "ri-close-circle-line");
|
|
1045
|
+
document.querySelector(".ri-loader-4-line").style.opacity = 0;
|
|
1046
|
+
document.getElementById("homesearch").disabled = false;
|
|
1047
|
+
document.getElementById("homesearch").placeholder = "search (proxy may be limited)...";
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
window.addEventListener("load", registerSW);
|
|
1052
|
+
</script>
|
|
1053
|
+
|
|
1054
|
+
<script>
|
|
1055
|
+
// Home search
|
|
1056
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
1057
|
+
const homesearch = document.getElementById("homesearch");
|
|
1058
|
+
homesearch?.addEventListener("keydown", (e) => {
|
|
1059
|
+
if (e.key === "Enter") rSearch(homesearch.value.trim());
|
|
1060
|
+
});
|
|
1061
|
+
});
|
|
1062
|
+
</script>
|
|
1063
|
+
|
|
1064
|
+
<script>
|
|
1065
|
+
// Vanta fog
|
|
1066
|
+
const pjstoggle = document.getElementById("pjs-toggle");
|
|
1067
|
+
const pjsIsOn = localStorage.getItem("infamous_particlesOn") ?? "yes";
|
|
1068
|
+
|
|
1069
|
+
function updatePJS() {
|
|
1070
|
+
if (pjstoggle.checked) {
|
|
1071
|
+
localStorage.setItem("infamous_particlesOn", "yes");
|
|
1072
|
+
initVanta();
|
|
1073
|
+
showToast("success", "Fog enabled!", "ri-check-line");
|
|
1074
|
+
} else {
|
|
1075
|
+
localStorage.setItem("infamous_particlesOn", "no");
|
|
1076
|
+
document.getElementById("vanta-fog-container")?.remove();
|
|
1077
|
+
showToast("success", "Fog disabled!", "ri-check-line");
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
if (pjsIsOn === "yes") { pjstoggle.checked = true; } else { pjstoggle.checked = false; }
|
|
1082
|
+
|
|
1083
|
+
function cssVar(name) { return getComputedStyle(document.documentElement).getPropertyValue(name).trim(); }
|
|
1084
|
+
function hexToNumber(hex) { return parseInt(hex.replace("#", ""), 16); }
|
|
1085
|
+
|
|
1086
|
+
function initVanta() {
|
|
1087
|
+
if (typeof VANTA !== 'undefined' && pjsIsOn === "yes") {
|
|
1088
|
+
VANTA.FOG({
|
|
1089
|
+
el: "#vanta-fog-container",
|
|
1090
|
+
mouseControls: true,
|
|
1091
|
+
touchControls: true,
|
|
1092
|
+
gyroControls: false,
|
|
1093
|
+
minHeight: 200.00,
|
|
1094
|
+
minWidth: 200.00,
|
|
1095
|
+
highlightColor: hexToNumber(cssVar("--accent") || "#e2588d"),
|
|
1096
|
+
midtoneColor: hexToNumber(cssVar("--bg-2") || "#3f1e2b"),
|
|
1097
|
+
lowlightColor: hexToNumber(cssVar("--bg-5") || "#1a0b11"),
|
|
1098
|
+
baseColor: hexToNumber(cssVar("--bg") || "#220f17"),
|
|
1099
|
+
blurFactor: 0.90,
|
|
1100
|
+
speed: 1
|
|
1101
|
+
});
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
window.addEventListener("load", initVanta);
|
|
1106
|
+
</script>
|
|
1107
|
+
|
|
1108
|
+
<script>
|
|
1109
|
+
// Reset theme
|
|
1110
|
+
function resetTheme() {
|
|
1111
|
+
localStorage.setItem("infamous_theme", "default");
|
|
1112
|
+
document.documentElement.removeAttribute('data-theme');
|
|
1113
|
+
window.location.reload();
|
|
1114
|
+
}
|
|
1115
|
+
</script>
|
|
1116
|
+
</body>
|
|
1117
|
+
</html>
|