@arcade-v/arcade_v 0.1.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/.gitlab-ci.yml ADDED
@@ -0,0 +1,14 @@
1
+ # This file is a template, and might need editing before it works on your project.
2
+ # Full project: https://gitlab.com/pages/plain-html
3
+
4
+ image: busybox
5
+
6
+ pages:
7
+ stage: deploy
8
+ script:
9
+ - echo "The site will be deployed to $CI_PAGES_URL"
10
+ artifacts:
11
+ paths:
12
+ - public
13
+ rules:
14
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
package/README.md ADDED
@@ -0,0 +1,105 @@
1
+ <div align="center">
2
+ <a href="https://gitlab.com/arcade_v/arcade_v/" target="_blank">
3
+ <img src="https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/backgrounds/arcade_v_title.png"
4
+ alt="title"
5
+ </a>
6
+ </div>
7
+
8
+ **Arcade V** is a web-based collection of classic and modern browser games, designed to be easily hosted and customizable.
9
+
10
+ ## How to Use the Site
11
+ Click a couple of times, then enter the site’s entry code (**Z, M, G** by default) in order — not all at once — and the games should load.
12
+
13
+ ## Hosting the site
14
+
15
+ 1. Copy **any** of the HTML files from the `loadsite` folder.
16
+ - Each one has a different disguise but all should load the games once the entry code is entered.
17
+ 2. Locate this function in the code:
18
+
19
+ ```js
20
+ enableSecretLetterCode("Z", "M", "G");
21
+ 3. You can replace the letters in the function to change the entry code.
22
+ 4. Paste the code into any website builder with an HTML embed, such as:
23
+ - [Google Sites](https://sites.google.com)
24
+ - [Weebly](https://www.weebly.com/)
25
+ - [Tiiny.host](https://Tiiny.host)
26
+
27
+ ## Demo Links
28
+ It is **heavily recommended** you host your own with the previously mentioned instructions
29
+ - [https://sites.google.com/view/fractions-are-cool/home](https://sites.google.com/view/fractions-are-cool/home)
30
+ - [https://sites.google.com/view/parts-of-a-cell/home](https://sites.google.com/view/parts-of-a-cell/home)
31
+ - [https://sites.google.com/view/multiplication-tables-27/home](https://sites.google.com/view/multiplication-tables-27/home)
32
+ - [https://sites.google.com/view/the-water-cycle-abc/the-water-cycle](https://sites.google.com/view/the-water-cycle-abc/the-water-cycle)
33
+ - [https://sites.google.com/view/negative-numbers/negative-numbers](https://sites.google.com/view/negative-numbers/negative-numbers)
34
+ - [https://sites.google.com/view/interactive-geometry-quiz/interactive-geometry-quiz](https://sites.google.com/view/interactive-geometry-quiz/interactive-geometry-quiz)
35
+ - [https://sites.google.com/view/chemical-reactions-2025/chemical-reactions](https://sites.google.com/view/chemical-reactions-2025/chemical-reactions)
36
+
37
+ ## Credits
38
+ - [0014049](https://scratch.mit.edu/users/0014049/)
39
+ - [123CCODER](https://scratch.mit.edu/users/123CCODER/)
40
+ - [1dat_doodles](https://scratch.mit.edu/users/1dat_doodles/)
41
+ - [a456pur](https://github.com/a456pur)
42
+ - [Aaronhoffer](https://scratch.mit.edu/users/Aaronhoffer/)
43
+ - [Alphabetica](https://scratch.mit.edu/users/Alphabetica/)
44
+ - [nonygoose](https://penguinmod.com/profile?user=anonygoose)
45
+ - [ArnoHu](https://scratch.mit.edu/users/ArnoHu/)
46
+ - [Awesome-llama](https://scratch.mit.edu/users/Awesome-llama/)
47
+ - [Beagle_12](https://scratch.mit.edu/users/Beagle_12/)
48
+ - [Burnedpopcorn](https://github.com/burnedpopcorn)
49
+ - [c1tcher](https://github.com/waycrosspublicmedia)
50
+ - [Chipm0nk](https://scratch.mit.edu/users/Chipm0nk/)
51
+ - [ChuckSploder](https://scratch.mit.edu/users/ChuckSploder/)
52
+ - [cloter](https://scratch.mit.edu/users/cloter/)
53
+ - [Colinmacc](https://scratch.mit.edu/users/Colinmacc/)
54
+ - [Coltroc](https://scratch.mit.edu/users/Coltroc/)
55
+ - [Corbin](https://98cornbin.netlify.app/)
56
+ - [CrystalKeeper7](https://scratch.mit.edu/users/CrystalKeeper7/)
57
+ - [David_783576](https://scratch.mit.edu/users/David_783576/)
58
+ - [Demonic_Chicken](https://scratch.mit.edu/users/Demonic_Chicken/)
59
+ - [Dillyd](https://scratch.mit.edu/users/Dillyd/)
60
+ - [Dixiklo](https://scratch.mit.edu/users/Dixiklo/)
61
+ - [DomPizzie](https://github.com/DomPizzie)
62
+ - [Donsje_Partner](https://scratch.mit.edu/users/Donsje_Partner/)
63
+ - [Dragon Field](https://scratch.mit.edu/users/DragonField-/)
64
+ - [FieryChicken](https://scratch.mit.edu/users/FieryChicken/)
65
+ - [FreNZyFIRE](https://scratch.mit.edu/users/FreNZyFIRE/)
66
+ - [Fygar](https://scratch.mit.edu/users/Fygar/)
67
+ - [Genizy](https://github.com/genizy)
68
+ - [Ggenije](https://scratch.mit.edu/users/Ggenije/)
69
+ - [Gherwit](https://scratch.mit.edu/users/Gherwit/)
70
+ - [GonSanVi](https://scratch.mit.edu/users/GonSanVi/)
71
+ - [Griffpatch](https://scratch.mit.edu/users/Griffpatch/)
72
+ - [guiles](https://scratch.mit.edu/users/guiles/)
73
+ - [Hockeeypro18](https://scratch.mit.edu/users/Hockeeypro18/)
74
+ - [Irv77](https://github.com/irv77)
75
+ - [JloAu](https://scratch.mit.edu/users/JloAu/)
76
+ - [JYg3_](https://scratch.mit.edu/users/JYg3_/)
77
+ - [Kabez](https://scratch.mit.edu/users/Kabez/)
78
+ - [Katana_Gaming](https://scratch.mit.edu/users/Katana_Gaming/)
79
+ - [Kevin_eleven_1234](https://scratch.mit.edu/users/Kevin_eleven_1234/)
80
+ - [LogicEverybody](https://scratch.mit.edu/users/LogicEverybody/)
81
+ - [Man-o-valor](https://scratch.mit.edu/users/Man-o-valor/)
82
+ - [Mariokenta](https://scratch.mit.edu/users/Mariokenta/)
83
+ - [Multinia](https://scratch.mit.edu/users/Multinia/)
84
+ - [mvbit](https://penguinmod.com/profile?user=mvbit)
85
+ - [Njdavison](https://scratch.mit.edu/users/Njdavison/)
86
+ - [Pacmanfan1112](https://scratch.mit.edu/users/Pacmanfan1112/)
87
+ - [Platform_maker444](https://scratch.mit.edu/users/Platform_maker444/)
88
+ - [Polkmnq6](https://scratch.mit.edu/users/Polkmnq6/)
89
+ - [Pyroaura](https://scratch.mit.edu/users/Pyroaura/)
90
+ - [quadrupleslap](https://scratch.mit.edu/users/quadrupleslap/)
91
+ - [RADICALBLAST](https://scratch.mit.edu/users/RADICALBLAST/)
92
+ - [RokCoder](https://scratch.mit.edu/users/RokCoder/)
93
+ - [SlenTheOoof](https://scratch.mit.edu/users/SlenTheOoof/)
94
+ - [SolarCode](https://scratch.mit.edu/users/SolarCode/)
95
+ - [Super_Chicken_Llama](https://scratch.mit.edu/users/Super_Chicken_Llama/)
96
+ - [theChAOTiC](https://scratch.mit.edu/users/theChAOTiC/)
97
+ - [TheTrendyToad](https://scratch.mit.edu/users/TheTrendyToad/)
98
+ - [TimMcCool](https://scratch.mit.edu/users/TimMcCool/)
99
+ - [twoplayergames.org](https://twoplayergames.org)
100
+ - [UrkiMimi](https://penguinmod.com/profile?user=urkimimi)
101
+ - [VinCrafts](https://scratch.mit.edu/users/VinCrafts/)
102
+ - [Vino11](https://scratch.mit.edu/users/Vino11/)
103
+ - [Yoshihome](https://scratch.mit.edu/users/Yoshihome/)
104
+ - [YousefIbrahimismail](https://github.com/YousefIbrahimismail)
105
+ - [Zaire](https://scratch.mit.edu/users/-Zaire-/)
@@ -0,0 +1,218 @@
1
+ function changeFavicon(src) {
2
+ const oldLink = document.getElementById('dynamic-favicon');
3
+ if (oldLink && oldLink.parentNode === document.head) {
4
+ try {
5
+ document.head.removeChild(oldLink);
6
+ } catch (error) {
7
+ console.warn('Failed to remove old favicon:', error);
8
+ }
9
+ }
10
+
11
+ const link = document.createElement('link');
12
+ link.id = 'dynamic-favicon';
13
+ link.rel = 'icon';
14
+ link.href = src + '?v=' + new Date().getTime(); // prevent caching
15
+ document.head.appendChild(link);
16
+
17
+ localStorage.setItem('faviconSrc', src);
18
+ }
19
+
20
+ function changeTitle(title) {
21
+ document.title = title;
22
+ localStorage.setItem('pageTitle', title);
23
+ }
24
+
25
+ function cloakpage(title, src) {
26
+ changeTitle(title);
27
+ changeFavicon(src);
28
+ }
29
+
30
+ function changetheme(src) {
31
+ document.body.style.backgroundImage = `url('${src}')`;
32
+ const navbar = document.querySelector('.navbar');
33
+ if (navbar) {
34
+ navbar.style.backgroundImage = `url('${src}')`;
35
+ }
36
+ const dropdownContent = document.querySelector('.dropdown-content');
37
+ if (dropdownContent) {
38
+ dropdownContent.style.backgroundImage = `url('${src}')`;
39
+ }
40
+ localStorage.setItem('themeBg', src);
41
+ }
42
+
43
+ function changeFont(font) {
44
+ document.body.style.fontFamily = font;
45
+ localStorage.setItem('userFont', font);
46
+ document.querySelectorAll('select').forEach(select => {
47
+ select.style.fontFamily = font;
48
+ });
49
+ const searchBar = document.getElementById('searchBar');
50
+ if (searchBar) {
51
+ searchBar.style.fontFamily = font;
52
+ }
53
+ }
54
+
55
+ function changeTextColor(color) {
56
+ // Remove previous style block if it exists
57
+ const oldStyle = document.getElementById('normal-text-style');
58
+ if (oldStyle) oldStyle.remove();
59
+
60
+ // Create new style for normal text + pagination + paragraphs
61
+ const style = document.createElement('style');
62
+ style.id = 'normal-text-style';
63
+ style.innerHTML = `
64
+ body,
65
+ select,
66
+ li a:not(.active),
67
+ #searchBar:not(:focus),
68
+ .game-title,
69
+ p,
70
+ .pagination button {
71
+ color: ${color} !important;
72
+ }
73
+ `;
74
+ document.head.appendChild(style);
75
+
76
+ // Dynamically update outlines ONLY if they are not transparent or none
77
+ document.querySelectorAll('*').forEach(el => {
78
+ const computedStyle = window.getComputedStyle(el);
79
+ const outlineColor = computedStyle.outlineColor;
80
+ const outlineStyle = computedStyle.outlineStyle;
81
+
82
+ // Check if outline exists and is not transparent or "none"
83
+ if (
84
+ outlineStyle !== 'none' &&
85
+ outlineColor !== 'rgba(0, 0, 0, 0)' && // transparent
86
+ outlineColor !== 'transparent'
87
+ ) {
88
+ el.style.outlineColor = color;
89
+ }
90
+ });
91
+
92
+ // Save to localStorage for persistence
93
+ localStorage.setItem('textColor', color);
94
+ }
95
+
96
+
97
+
98
+ function changeSelectedTextColor(color) {
99
+ // Remove previous dynamic style if any
100
+ const oldStyle = document.getElementById('selected-text-style');
101
+ if (oldStyle) oldStyle.remove();
102
+
103
+ const style = document.createElement('style');
104
+ style.id = 'selected-text-style';
105
+ style.innerHTML = `
106
+ ::selection {
107
+ background: #333;
108
+ color: ${color};
109
+ }
110
+ `;
111
+ document.head.appendChild(style);
112
+ localStorage.setItem('selectedTextColor', color);
113
+ }
114
+ function changeFocusTextColor(color) {
115
+ const oldStyle = document.getElementById('focus-text-style');
116
+ if (oldStyle) oldStyle.remove();
117
+
118
+ const style = document.createElement('style');
119
+ style.id = 'focus-text-style';
120
+ style.innerHTML = `
121
+ input:focus,
122
+ select:focus,
123
+ textarea:focus {
124
+ color: ${color};
125
+ border-color: ${color};
126
+ }
127
+ `;
128
+ document.head.appendChild(style);
129
+ }
130
+ function changeActiveTextColor(color) {
131
+ // Remove old active text color style if any
132
+ const oldStyle = document.getElementById('active-text-style');
133
+ if (oldStyle) oldStyle.remove();
134
+
135
+ const style = document.createElement('style');
136
+ style.id = 'active-text-style';
137
+ style.innerHTML = `
138
+ li a.active {
139
+ color: ${color} !important;
140
+ }
141
+ `;
142
+ document.head.appendChild(style);
143
+ localStorage.setItem('activeTextColor', color);
144
+ }
145
+
146
+ function resetToDefault() {
147
+ // Clear localStorage
148
+ localStorage.removeItem('faviconSrc');
149
+ localStorage.removeItem('pageTitle');
150
+ localStorage.removeItem('themeBg');
151
+ localStorage.removeItem('userFont');
152
+ localStorage.removeItem('textColor');
153
+ localStorage.removeItem('selectedTextColor');
154
+ localStorage.removeItem('activeTextColor');
155
+
156
+ // Reset Favicon & Title
157
+ changeFavicon('https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/favicon/logo.png');
158
+ changeTitle('Arcade 4');
159
+
160
+ // Reset Theme
161
+ changetheme('https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/backgrounds/void_theme.png');
162
+
163
+ // Reset Font
164
+ changeFont('Pixelify Sans, sans-serif');
165
+
166
+ // Reset Normal Text Color
167
+ changeTextColor('#ffffff');
168
+ const picker1 = document.getElementById('textColorPicker1');
169
+ if (picker1) picker1.value = '#ffffff';
170
+
171
+ // Reset Selected/Focus/Active Text Color
172
+ changeSelectedTextColor('#7F00FF');
173
+ changeFocusTextColor('#7F00FF');
174
+ changeActiveTextColor('#7F00FF');
175
+ const picker2 = document.getElementById('textColorPicker2');
176
+ if (picker2) picker2.value = '#7F00FF';
177
+
178
+ // Reset dropdown selections
179
+ document.getElementById('cloakDropdown').selectedIndex = 0;
180
+ document.getElementById('backgroundDropdown').selectedIndex = 0;
181
+ document.getElementById('fontDropdown').selectedIndex = 0;
182
+ }
183
+
184
+
185
+
186
+ // On page load
187
+ const stylesheet = document.createElement("link");
188
+ stylesheet.rel = "stylesheet";
189
+ stylesheet.type = "text/css";
190
+ stylesheet.href = "https://fonts.googleapis.com/css2?family=Pixelify+Sans&family=Comic+Neue&family=Courier+Prime&family=Press+Start+2P&family=VT323&family=Orbitron:wght@400;700&family=Roboto:wght@400;700&family=Open+Sans:wght@400;700&family=Patrick+Hand&family=Russo+One&display=swap";
191
+ document.head.appendChild(stylesheet);
192
+ const savedTheme = localStorage.getItem('themeBg');
193
+ if (savedTheme) changetheme(savedTheme);
194
+
195
+ const savedTitle = localStorage.getItem('pageTitle');
196
+ if (savedTitle) document.title = savedTitle;
197
+
198
+ const savedFavicon = localStorage.getItem('faviconSrc');
199
+ if (savedFavicon) changeFavicon(savedFavicon);
200
+
201
+ const savedFont = localStorage.getItem('userFont');
202
+ if (savedFont) changeFont(savedFont);
203
+
204
+ const savedColor = localStorage.getItem('textColor');
205
+ if (savedColor) {
206
+ changeTextColor(savedColor);
207
+ const picker1 = document.getElementById('textColorPicker1');
208
+ if (picker1) picker1.value = savedColor;
209
+ }
210
+
211
+ const selectedTextColor = localStorage.getItem('selectedTextColor');
212
+ if (selectedTextColor) {
213
+ changeSelectedTextColor(selectedTextColor);
214
+ changeFocusTextColor(selectedTextColor);
215
+ changeActiveTextColor(selectedTextColor);
216
+ const picker2 = document.getElementById('textColorPicker2');
217
+ if (picker2) picker2.value = selectedTextColor;
218
+ }
@@ -0,0 +1,63 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+
7
+ <!-- Google Fonts -->
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap" rel="stylesheet">
11
+ <link href="https://fonts.googleapis.com/css?family=Pixelify+Sans" rel="stylesheet">
12
+ <link href="https://fonts.googleapis.com/css2?family=Pixelify+Sans&family=Comic+Neue&family=Courier+Prime&family=Press+Start+2P&family=VT323&family=Orbitron:wght@400;700&family=Roboto:wght@400;700&family=Open+Sans:wght@400;700&family=Patrick+Hand&family=Russo+One&display=swap" rel="stylesheet"/>
13
+
14
+ <style>
15
+ /* Hides the dropdown completely */
16
+ #categorySelect {
17
+ display: none;
18
+ }
19
+ </style>
20
+ </head>
21
+
22
+ <body data-json="https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4@f50fae4/navigation/games/apps.json">
23
+
24
+ <!-- Search -->
25
+ <div class="search-container">
26
+ <input type="text" id="searchBar" placeholder="Search games..." oninput="applyFilters()">
27
+ </div>
28
+
29
+ <label style="margin-left: 15px;">
30
+ <input type="checkbox" id="showFavorites" onchange="applyFilters()"> Show Favorites Only
31
+ </label>
32
+
33
+ <!-- Category + Favorites Filter -->
34
+ <div class="category-container">
35
+ <select id="categorySelect" onchange="applyFilters()">
36
+ <option value="All">All</option>
37
+ <option value="Popular">Popular</option>
38
+ <option value="New">New</option>
39
+ <option value="2D">2D</option>
40
+ <option value="3D">3D</option>
41
+ <option value="Flash">Flash</option>
42
+ <option value="Idle">Idle</option>
43
+ <option value="Mobile">Mobile</option>
44
+ <option value="Multi Player">Multi Player</option>
45
+ <option value="One Button">One Button</option>
46
+ <option value="Platformer">Platformer</option>
47
+ <option value="Puzzle">Puzzle</option>
48
+ <option value="Retro">Retro</option>
49
+ <option value="Rhythm">Rhythm</option>
50
+ <option value="Shooter">Shooter</option>
51
+ <option value="Sports">Sports</option>
52
+ <option value="Tower Defence">Tower Defence</option>
53
+ </select>
54
+ </div>
55
+
56
+ <!-- Game Cards -->
57
+ <div id="gameButtons" class="game-buttons-container"></div>
58
+
59
+ <!-- Pagination Controls -->
60
+ <div class="pagination" id="paginationControls"></div>
61
+
62
+ </body>
63
+ </html>
@@ -0,0 +1,125 @@
1
+ [
2
+ {
3
+ "title": "Request a Feature",
4
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/request.jpg",
5
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games@main/apps/request.html",
6
+ "category": [
7
+ "Uncategorized"
8
+ ],
9
+ "mode": "A"
10
+ },
11
+ {
12
+ "title": "EmulatorJS",
13
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/emulatorjs.png",
14
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games@main/apps/EmulatorJS.html",
15
+ "category": [
16
+ "App"
17
+ ],
18
+ "mode": "A"
19
+ },
20
+ {
21
+ "title": "Espresso",
22
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/espresso.svg",
23
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/espresso.html",
24
+ "category": [
25
+ "App"
26
+ ],
27
+ "mode": "A"
28
+ },
29
+ {
30
+ "title": "Get More Math!",
31
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/get_more_math.png",
32
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/get_more_math.html",
33
+ "category": [
34
+ "App"
35
+ ],
36
+ "mode": "A"
37
+ },
38
+ {
39
+ "title": "Ghostery Search",
40
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/ghosterysearch.svg",
41
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/ghosterysearch_2.html",
42
+ "category": [
43
+ "App"
44
+ ],
45
+ "mode": "A"
46
+ },
47
+ {
48
+ "title": "Ruffle",
49
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/ruffle.avif",
50
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/ruffle.html",
51
+ "category": [
52
+ "App"
53
+ ],
54
+ "mode": "A"
55
+ },
56
+ {
57
+ "title": "Scratch Loader GX",
58
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/scratchloadergx.svg",
59
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/scratchloadergx.html",
60
+ "category": [
61
+ "App"
62
+ ],
63
+ "mode": "A"
64
+ },
65
+ {
66
+ "title": "Spotify",
67
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/spotify.png",
68
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-games@main/apps/spotify/index.html",
69
+ "category": [
70
+ "App"
71
+ ],
72
+ "mode": "A",
73
+ "functions": [
74
+ {
75
+ "name": "handleGameClick",
76
+ "params": [
77
+ "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-games@main/apps/spotify/index.html",
78
+ "B"
79
+ ]
80
+ },
81
+ {
82
+ "name": "appendScript",
83
+ "params": [
84
+ "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-games@3d1f72d/apps/spotify/scripts.js"
85
+ ]
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "title": "Time Vortex",
91
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/time_vortex.png",
92
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/time_vortex.html",
93
+ "category": [
94
+ "App"
95
+ ],
96
+ "mode": "A"
97
+ },
98
+ {
99
+ "title": "Wayground",
100
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/wayground.png",
101
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/wayground.html",
102
+ "category": [
103
+ "App"
104
+ ],
105
+ "mode": "A"
106
+ },
107
+ {
108
+ "title": "Wikipedia",
109
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/Wikipedia.png",
110
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-Games/apps/wikipedia_2.html",
111
+ "category": [
112
+ "App"
113
+ ],
114
+ "mode": "A"
115
+ },
116
+ {
117
+ "title": "YouTube",
118
+ "image": "https://gitlab.com/arcade_v/arcade_v_images/-/raw/main/apps/youtube.jpg",
119
+ "url": "https://cdn.jsdelivr.net/gh/FutureElliotto/Arcade-4-games/apps/youtube/index.html",
120
+ "category": [
121
+ "App"
122
+ ],
123
+ "mode": "A"
124
+ }
125
+ ]
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+
7
+ <!-- Google Fonts -->
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap" rel="stylesheet">
11
+ <link href="https://fonts.googleapis.com/css?family=Pixelify+Sans" rel="stylesheet">
12
+ <link href="https://fonts.googleapis.com/css2?family=Pixelify+Sans&family=Comic+Neue&family=Courier+Prime&family=Press+Start+2P&family=VT323&family=Orbitron:wght@400;700&family=Roboto:wght@400;700&family=Open+Sans:wght@400;700&family=Patrick+Hand&family=Russo+One&display=swap" rel="stylesheet"/>
13
+ </head>
14
+ <body>
15
+
16
+ <!-- Search -->
17
+ <div class="search-container">
18
+ <input type="text" id="searchBar" placeholder="Search games..." oninput="applyFilters()">
19
+ </div>
20
+
21
+ <!-- Category + Favorites Filter -->
22
+ <div class="category-container">
23
+ <select id="categorySelect" onchange="applyFilters()">
24
+ <option value="All">All</option>
25
+ <option value="Popular">Popular</option>
26
+ <option value="New">New</option>
27
+ <option value="2D">2D</option>
28
+ <option value="3D">3D</option>
29
+ <option value="Flash">Flash</option>
30
+ <option value="Horror">Horror</option>
31
+ <option value="Idle">Idle</option>
32
+ <option value="Mobile">Mobile</option>
33
+ <option value="Multi Player">Multi Player</option>
34
+ <option value="One Button">One Button</option>
35
+ <option value="Platformer">Platformer</option>
36
+ <option value="Puzzle">Puzzle</option>
37
+ <option value="Retro">Retro</option>
38
+ <option value="Rhythm">Rhythm</option>
39
+ <option value="RPG">RPG</option>
40
+ <option value="Shooter">Shooter</option>
41
+ <option value="Sports">Sports</option>
42
+ <option value="Tower Defence">Tower Defence</option>
43
+ </select>
44
+
45
+ <label style="margin-left: 15px;">
46
+ <input type="checkbox" id="showFavorites" onchange="applyFilters()"> Show Favorites Only
47
+ </label>
48
+ </div>
49
+
50
+ <!-- Game Cards -->
51
+ <div id="gameButtons" class="game-buttons-container"></div>
52
+
53
+ <!-- Pagination Controls -->
54
+ <div class="pagination" id="paginationControls"></div>
55
+
56
+ </body>
57
+ </html>